-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathSqList.cpp
More file actions
310 lines (230 loc) · 5.51 KB
/
SqList.cpp
File metadata and controls
310 lines (230 loc) · 5.51 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
/********************************************************************
Time: 2015/09/01
Filename: SqList
Author: dinglj
Purpose: 顺序表的基本实现
*********************************************************************/
#include <stdio.h>
#define MAXSIZE 20
// 基本数据类型, 推荐第一种方法,更具弹性
typedef struct
{
int data;
// char e[20];
}ElemType;
// #define ElemType int;
// 顺序表
typedef struct
{
ElemType e[MAXSIZE];
int length;
}SqList;
//主要函数申明
//////////////////////////////////////////////////////////////////////////
bool InitList(SqList &L); // 初始化
bool InsertElem(SqList &L, ElemType e, int pos);
bool DeleteElem(SqList &L, int pos);
bool GetKthElem(SqList L, int k, ElemType &e);
bool CreateList(SqList &L, int num);
bool ClearList(SqList &L);
bool isEmpty(SqList L);
bool visit(ElemType e) // 访问元素
{
printf("%d\t", e.data);
return true;
}
bool TraverseList(SqList L, bool (*pFunc)(ElemType )); // 函数指针应用
/********************************************************************
Method: InitList
Parameter:
Returns:
Purpose: 初始化顺序表
*********************************************************************/
bool InitList(SqList &L)
{
L.length = 0;
return true;
}
/********************************************************************
Method: InsertElem
Parameter: 顺序表, 被插入元素, 插入位置
Returns:
Purpose: 顺序表的插入
*********************************************************************/
bool InsertElem(SqList &L, ElemType e, int pos)
{
//////////////////// 合法性检测
// 是否还可以插入
if (L.length + 1 > MAXSIZE)
{
return false;
}
// 插入位置检测
if (pos < 1 || pos > L.length + 1)
{
return false;
}
///////////////////////////////////////
// 移动元素
for (int i = L.length - 1; i >= pos - 1; i--) // 从后往前移动, 注意循环边界
{
L.e[i + 1].data = L.e[i].data;
}
L.e[pos - 1].data = e.data;
L.length++;
return true;
}
/********************************************************************
Method: DeleteElem
Parameter: 顺序表, 删除位置
Returns:
Purpose:
*********************************************************************/
bool DeleteElem(SqList &L, int pos)
{
///////////// 合法性检测
if (0 == L.length)
{
return false;
}
if (pos < 1 || pos > L.length)
{
return false;
}
/////////////////////
for (int i = pos; i < L.length; i++) // 从前往后移动元素,注意循环边界
{
L.e[i - 1].data = L.e[i].data;
}
L.length--;
return true;
}
/********************************************************************
Method: GetKthElem
Parameter: 顺序表,元素位置,返回值
Returns:
Purpose: 获取第k个元素
*********************************************************************/
bool GetKthElem(SqList L, int k, ElemType &e)
{
// 合法性检测
if (k < 1 || k > L.length)
{
return false;
}
e.data = L.e[k - 1].data;
return true;
}
/********************************************************************
Method: CreateList
Parameter:
Returns:
Purpose: 简单的创建顺序表,为了测试插入,删除操作
*********************************************************************/
bool CreateList(SqList &L, int num)
{
InitList(L); // 初始化
for (int i = 0; i < num; i++)
{
L.e[i].data = i + 1;
}
L.length = num;
return true;
}
/********************************************************************
Method: ClearList
Parameter:
Returns:
Purpose: 清空
*********************************************************************/
bool ClearList(SqList &L)
{
L.length = 0;
return true;
}
/********************************************************************
Method: isEmpty
Parameter:
Returns:
Purpose: 顺序表是否为空
*********************************************************************/
bool isEmpty(SqList L)
{
return L.length == 0;
}
/********************************************************************
Method: TraverseList
Parameter: 顺序表, 函数指针
Returns:
Purpose: 顺序表的遍历
*********************************************************************/
bool TraverseList(SqList L, bool (*pFunc)(ElemType))
{
for (int i = 0; i < L.length; i++)
{
pFunc(L.e[i]);
}
printf("\n");
return true;
}
/********************************************************************
Method: InsertTest
Parameter:
Returns:
Purpose: 插入测试
*********************************************************************/
bool InsertTest(SqList &L)
{
// 测试插入
ElemType e;
e.data = 5;
InsertElem(L, e, 1);
e.data = 6;
InsertElem(L, e, 4);
e.data = 7;
InsertElem(L, e, 7);
TraverseList(L, visit); // 遍历
return true;
}
/********************************************************************
Method: DeleteTest
Parameter:
Returns:
Purpose: 删除测试
*********************************************************************/
bool DeleteTest(SqList &L)
{
DeleteElem(L, 7);
DeleteElem(L, 4);
DeleteElem(L, 1);
TraverseList(L, visit);
return true;
}
/********************************************************************
Method: OperationTest
Parameter:
Returns:
Purpose: 所有操作测试
*********************************************************************/
bool OperationTest()
{
SqList L;
CreateList(L, 4);
TraverseList(L, visit);
// 插入测试
InsertTest(L);
// 删除测试
DeleteTest(L);
return true;
}
/********************************************************************
Method: main
Parameter:
Returns:
Purpose:
*********************************************************************/
int main()
{
OperationTest();
return true;
}