1 #include<iostream>
2 #define Max 50
3
4 #define OK 1
5 using namespace std;
6 //顺序链表c语言版(a1,a2...an)
7 typedef int ElemType;
8 typedef struct //s顺序链表定义
9 {
10 ElemType* elem;
11 int length;
12 }ListLink;
13
14 int ListInit(ListLink&List)//顺序链表初始化
15 {
16 List.elem = (ElemType*)malloc(sizeof(ElemType) * Max);
17 if (!List.elem)//内存分配上失败退出程序
18 exit(-1);
19 List.length = 0;
20 return OK;
21 }
22
23 ElemType ListGet(ListLink& List, int i)//得到顺序链表第i个位置元素
24 {
25 if (i<1 || i>List.length)
26 return false;
27 return List.elem[i - 1];
28 }
29
30 bool ListInsert(ListLink& List, int i, ElemType data)//顺序链表在第i个位置插入元素data
31 {
32 if (i<1 || i>List.length)
33 return false;
34 if (List.length >= Max)
35 return false;
36 for (int j = List.length ; j >= i; --j)
37 List.elem[j] = List.elem[j-1];
38 List.elem[i- 1] = data;
39 ++List.length;
40 return true;
41 }
42
43 bool ListInsertHead(ListLink& List, ElemType data)//在头部插入一个元素
44 {
45 if (List.length >= Max)
46 return false;
47 for (int j = List.length-1; j >=0; --j)
48 List.elem[j + 1] = List.elem[j];
49 List.elem[0] = data;
50 ++List.length;
51 return true;
52 }
53
54 bool ListInsertEnd(ListLink& List, ElemType data)//在尾部插入一个元素
55 {
56 if (List.length >= Max)
57 return false;
58 List.elem[List.length] = data;
59 ++List.length;
60 return true;
61 }
62
63 bool ListDeleteIndex(ListLink& List, int i)//按位置删除元素
64 {
65 if (i<1 || i>List.length)
66 return false;
67 for (int j = i; j < List.length; ++j)
68 List.elem[j - 1] = List.elem[j];
69 --List.length;
70 return true;
71 }
72
73 bool ListDeleteElem(ListLink& List, ElemType data)//按值删除元素
74 {
75 for (int j = 0; j < List.length; ++j)
76 {
77 if (List.elem[j] == data)
78 {
79 for (int t = j; t < List.length-1; ++t)
80 List.elem[t] = List.elem[t+1];
81 --List.length;
82 return true;
83 }
84 }
85 return false;
86 }
87
88 void ListClear(ListLink& List)//删除顺序链表全部元素
89 {
90 if (List.length)
91 {
92 for (int i = List.length-1; i >=0 ; --i)
93 {
94 List.elem[i-1] = List.elem[i];
95 List.length--;
96 }
97 }
98 }
99
100 int ListLength(ListLink& List)//获取顺序链表长度
101 {
102 return List.length;
103 }
104
105 bool ListFull(ListLink& List)//顺序链表是否为满
106 {
107 return List.length == Max;
108
109 }
110
111 bool ListEmpty(ListLink& List)//顺序链表是否为空
112 {
113 return List.length == 0;
114
115 }
116
117 void ListShow(ListLink& List)
118 {
119 for (int i = 0; i < List.length; ++i)
120 cout << List.elem[i] << " ";
121 }
122
123 int main() {
124 ListLink lis;
125 ListInit(lis);
126 cout << ListEmpty(lis) << endl;
127 ListInsertHead(lis, 4);
128 ListInsertHead(lis, 3);
129 ListInsertHead(lis, 2);
130 ListInsertEnd(lis, 7);
131 ListInsertEnd(lis, 8);
132 ListInsertEnd(lis, 9);
133 ListInsert(lis, 4, 5);
134 ListInsert(lis, 5, 6);
135 ListShow(lis);
136 cout << endl;
137 ListDeleteIndex(lis, 3);
138 ListShow(lis);
139 cout << endl;
140 ListDeleteElem(lis, 8);
141 ListShow(lis);
142 cout << endl;
143 cout << ListLength(lis) << endl;
144 ListClear(lis);
145 cout << ListEmpty(lis) << endl;
146 return 0;
147
148 }