## 习题8.3.（1）

 1 #include <iostream>
2 #include <iomanip>
3 #include <cstdlib>
4 using namespace std;
5
6 #define OK 1
7 #define ERROR 0
8 #define OVERFLOW -2
9 typedef int Status; //Status 是函数返回值类型，其值是函数结果状态代码。
10
11 typedef int ElemType;
12 typedef struct LNode {
13   ElemType data; //结点的数据域
14   struct LNode *next; //结点的指针域
15 } LNode, *LinkList; //LinkList为指向结构体LNode的指针类型
16
17 void CreateList_L(LinkList &L, int n)
18 {
19   L = new LNode;
20   L->next = NULL;
21   LNode *r = L;     //尾指针r指向头结点
22   for(int i = 0; i < n; ++i) {
23     LNode *p = new LNode;
24     cin >> p->data;
25     p->next = NULL;
26     r->next = p;  //插入到表尾
27     r = p;     //r指向新的尾结点
28   }
29 }
30
31 //带头结点的单链表上的简单选择排序算法
32 //每次在未排序链表中选一个最小的和首元素交换
33 void LinkList_Select_Sort(LinkList &L)
34 {
35   ElemType temp;
36   LNode *p, *q, *minp;
37   for(p = L->next; p; p = p->next) {
38     minp = p;
39     for(q = p->next; q; q = q->next) {
40       if(q->data < minp->data)
41         minp = q;
42     }
43     if(minp != p) {
44       temp = p->data;
45       p->data = minp->data;
46       minp->data = temp;
47     }
48   }
49 }
50
51 Status DestroyList(LinkList &L)
52 {
53   LinkList p;
54   while(L) {
55     p = L;
56     L = L->next;
57     delete p;
58   }
59   return OK;
60 }
61
62 void DisplayList(LinkList L)
63 {
64   LinkList p = L->next;
65   while(p) {
66     cout << p->data << ' ';
67     p = p->next;
68   }
69   cout << endl;
70 }
71
72 int main()
73 {
74   int n;
75   LinkList L;
76   while(cin >> n) {
77     CreateList_L(L, n);
78     DisplayList(L);
79     LinkList_Select_Sort(L);
80     DisplayList(L);
81   }
82   DestroyList(L);
83   return 0;
84 }

posted on 2017-05-31 13:53 天地过客 阅读(...) 评论(...) 编辑 收藏