1 #include"SeqList.h"
2 void SeqListInit(SeqList *seqlist)//顺序表的重置
3 {
4 if(seqlist==NULL){
5 return;
6 }
7 seqlist->size=0;
8 }
9 void SeqListPushBack(SeqList *seqlist,SeqListType value)//尾插元素
10 {
11 if(seqlist==NULL)
12 {
13 return ;
14 }
15 if(seqlist->size>=SeqListMaxSize)
16 {
17 return ;
18 }
19 seqlist->data[seqlist->size]=value;
20 ++seqlist->size;
21 return;
22 }
23 int SeqListGet(SeqList*seqlist,size_t pos,SeqListType* value)//获取指定位置的元素
24 {
25 if(seqlist==NULL)
26 {
27 return 0;
28 }
29 if(pos>=seqlist->size)
30 {
31 return 0;
32 }
33 *value=seqlist->data[pos];
34 return 1;
35 }
36 int SeqListSet(SeqList*seqlist,size_t pos,SeqListType value)//修改指定位置的元素
37 {
38 if(seqlist==NULL)
39 {
40 return 0;
41 }
42 if(pos>=seqlist->size)
43 {
44 return 0;
45 }
46 seqlist->data[pos]=value;
47 return 1;
48 }
49 size_t SeqListFind(SeqList* seqlist,SeqListType pos)//查找指定的元素
50 {
51 if(seqlist==NULL)
52 {
53 return 0;
54 }
55 size_t i=0;
56 for(;i<seqlist->size;++i)
57 {
58 if(seqlist->data[i]==pos)
59 {
60 return i;
61 }
62 }
63 return (size_t)-1;
64 }
65 void SeqListErase(SeqList*seqlist,size_t pos)//删除指定位置的元素
66 {
67 if(seqlist==NULL)
68 {
69 return;
70 }
71 if(pos>=seqlist->size)
72 {
73 return;
74 }
75 size_t i=pos;
76 for(;i<seqlist->size-1;++i)
77 {
78 seqlist->data[i]=seqlist->data[i+1];
79 }
80 --seqlist->size;
81 }
82 void SeqListRemove(SeqList* seqlist,SeqListType to_remove)//删除指定的元素,与上面有所区别,这里没有指出位置,需要用find查找元素位置
83 {
84 if(seqlist==NULL)
85 {
86 return;
87 }
88 size_t pos=SeqListFind(seqlist,to_remove);
89 if(pos==(size_t)-1)
90 {
91 return;
92 }
93 SeqListErase(seqlist,pos);
94 }
95 void SeqListAllRemove(SeqList* seqlist,SeqListType to_remove)//删除所有的指定元素
96 {
97 if(seqlist==NULL)
98 {
99 return;
100 }
101 size_t i=0;
102 while(i<seqlist->size)
103 {
104 SeqListRemove(seqlist,to_remove);
105 ++i;
106 }
107 }
108 void SeqListBubbleSort(SeqList*seqlist) //冒泡排序
109 {
110 if(seqlist==NULL)
111 {
112 return;
113 }
114 size_t count=0;
115 size_t cur=0;
116 for(count=0;count<seqlist->size;++count)
117 {
118 for(cur=0;cur<seqlist->size-1-count;++cur)
119 {
120 size_t tmp=0;
121 if(seqlist->data[cur]>seqlist->data[cur+1])
122 {
123 tmp=seqlist->data[cur];
124 seqlist->data[cur]=seqlist->data[cur+1];
125 seqlist->data[cur+1]=tmp;
126 }
127 }
128 }
130 ///
131 ///以下为测试代码///
132 #include<stdio.h>
133 SeqlistPrintchar(SeqList *seqlist,const char* msg)
134 {
135 if(seqlist==NULL)
136 {
137 return ;
138 }
139 printf("[%s] \n",msg);
140 size_t i=0;
141 for(;i<seqlist->size;++i)
142 {
143 printf("[%c] ",seqlist->data[i]);
144 }
145 }
146
147 TextGet()
148 {
149 SeqList seqlist;
150 SeqListInit(&seqlist);
151 SeqListPushBack(&seqlist,'a');
152 SeqListPushBack(&seqlist,'b');
153 SeqListPushBack(&seqlist,'c');
154 SeqListType value;
155 int ret= SeqListGet(&seqlist,2,&value);
156 printf(" pos expected 'c',actual %c\n",value);
157 printf(" ret expected '1',actual %d\n",ret);
158 }
159 TextSet()
160 {
161 SeqList seqlist;
162 SeqListInit(&seqlist);
163 SeqListPushBack(&seqlist,'a');
164 SeqListPushBack(&seqlist,'b');
165 SeqListPushBack(&seqlist,'c');
166 SeqListSet(&seqlist,2,'x');
167 SeqListType value;
154 SeqListType value;
155 int ret= SeqListGet(&seqlist,2,&value);
156 printf(" pos expected 'c',actual %c\n",value);
157 printf(" ret expected '1',actual %d\n",ret);
158 }
159 TextSet()
160 {
161 SeqList seqlist;
162 SeqListInit(&seqlist);
163 SeqListPushBack(&seqlist,'a');
164 SeqListPushBack(&seqlist,'b');
165 SeqListPushBack(&seqlist,'c');
166 SeqListSet(&seqlist,2,'x');
167 SeqListType value;
168 int ret=SeqListGet(&seqlist,2,&value);
169 printf(" value expected 'x',actual %c\n",value);
170 printf(" ret expected '1',actual %d\n",ret);
171 }
172 TextFind()
173 {
174 SeqList seqlist;
175 SeqListInit(&seqlist);
176 SeqListPushBack(&seqlist,'a');
177 SeqListPushBack(&seqlist,'b');
178 SeqListPushBack(&seqlist,'c');
179 size_t ret=SeqListFind(&seqlist,'b');
180 printf(" ret expected '1',actual %d\n",(int)ret);
181 }
182 TextRemove()
183 {
184 SeqList seqlist;
185 SeqListInit(&seqlist);
186 SeqListPushBack(&seqlist,'a');
187 SeqListPushBack(&seqlist,'b');
188 SeqListPushBack(&seqlist,'c');
189 SeqListRemove(&seqlist,'a');
190 SeqlistPrintchar(&seqlist,"以下是删除指定元素的结果");
191 }
192
193 TextAllRemove()
194 {
195 SeqList seqlist;
196 SeqListInit(&seqlist);
197 SeqListPushBack(&seqlist,'a');
198 SeqListPushBack(&seqlist,'b');
199 SeqListPushBack(&seqlist,'c');
200 SeqListPushBack(&seqlist,'a');
201 SeqListAllRemove(&seqlist,'a');
202 SeqlistPrintchar(&seqlist,"以下是删除所有相同元素的结果");
203 }
204 TextBubbleSort()
205 {
206
207 SeqList seqlist;
208 SeqListInit(&seqlist);
209 SeqListPushBack(&seqlist,'b');
210 SeqListPushBack(&seqlist,'a');
211 SeqListPushBack(&seqlist,'c');
212 SeqListPushBack(&seqlist,'d');
213 SeqListBubbleSort(&seqlist);
214 SeqlistPrintchar(&seqlist,"冒泡升序的结果;");
215 }
216 int main()
217 {
218 TextGet();
219 printf("\n");
220 TextSet();
221 printf("\n");
222 TextFind();
223 printf("\n");
224 TextRemove();
225 printf("\n");
226 TextAllRemove();
227 printf("\n");
228 TextBubbleSort();
229 return 0;
230 }
2 #pragma once//给出所需要的头文件,因为与上一篇文章所写都为顺序表,所以引用了上一篇的头文件加以增添所需
3 #include<stddef.h>
4 #define SeqListMaxSize 100
5 typedef char SeqListType;
6 typedef struct SeqList
7 {
8 SeqListType data[SeqListMaxSize];
9 size_t size;
10 }SeqList;
11 void SeqListInit(SeqList *seqlist);
12 void SeqListPushBack(SeqList* seqlist,SeqListType value);
13 void SeqListPopback(SeqList* seqlist);
14 void SeqListPushFront(SeqList* seqlist,SeqListType value);
15 void SeqListPopFront(SeqList* seqlist);
16 void SeqListInsert(SeqList*seqlist,size_t pos,SeqListType value);
17 void SeqListErase(SeqList*seqlist,size_t pos);
18 size_t SeqListFind(SeqList*seqlist,SeqListType find);
19 void SeqListRemove(SeqList*seqlist,SeqListType to_remove);
20 void SeqListAllRemove(SeqList*seqlist,SeqListType to_remove);
21 void SeqListBubbleSort(SeqList*seqlist);