C语⾔简单的顺序表操作
顺序表
顺序表,⼜称线性表,是编程语⾔中⼀个很重要的知识点 。基本上 C语⾔以及其它的编程语⾔都有涉及这个知识点。
所以,这个知识点⼀定要弄清楚 。
顺序表是在中以的形式保存的,是指⽤⼀组地址连续的依次存储的。线性表采⽤顺序存储的⽅式存储就称之为顺序表。顺序表是将表中的结点依次存放在计算机内存中⼀组地址连续的存储单元中。
线性表的基本定义格式:
1//MAX_SIZE 为插⼊数据的最⼤个数
2#define MAX_SIZE 10
3//DataType插⼊数据的类型
4#define DataType int
5typedef struct Seqlist
6{
7 DataType arr[MAX_SIZE];
8 int size;
9}Seqlist,*pSeqlist;
⼀般的顺序表,所包含的基本操作函数有:
1//顺序表初始化
2void InitSeqlist(pSeqlist pSeq);
3//从尾部插⼊数据
4void PushBack(pSeqlist pSeq,DataType data);//DataType 为数据的类型
5//从尾部删除数据
6void PopBack(pSeqlist pSeq);
7//从头部插⼊数据
8void PushFront(pSeqlist pSeq,DataType data);
9//从头部删除数据
10void PopFront(pSeqlist pSeq);
11//按位置插⼊数据
12void Insert(pSeqlist pSeq,int pos,DataType data);//在下表为pos的后⾯插⼊
13//按位置删除数据
14void Erase(pSeqlist pSeq,int pos);//删除pos位置的数据
15//查数据
16int Find(pSeqlist pSeq,DataType data);
17//按数据删除
18void Remove(pSeqlist pSeq,DataType data);
19//按数据彻底删除
20void RemoveAll(pSeqlist pSeq,DataType data);
21//判断线性表是否为空
22int IsEmpty(pSeqlist pSeq);
23//打印线性表
24void PrintSeqlist(pSeqlist pSeq);
函数的实现
1初始化
2void InitSeqlist(pSeqlist pSeq)
3{
4 assert(pSeq);//先检验参数是否合格
5 memset(pSeq->arr,0,MAX_SIZE*sizeof(DataType));//初始化顺序表为全零
6 pSeq->size = 0;//顺序表的当前长度为 0
7}
8//尾部插⼊
9void PushBack(pSeqlist pSeq,DataType data)
10{
11 assert(pSeq);//先检验参数是否合格
12 if(pSeq->size >= MAX_SIZE)//判断顺序表是否已满??
13 {
14 printf("Seqlist has been full\n");
15 return ;
16 }
17 pSeq->arr[pSeq->size] =data;//在结尾插⼊数据
18 pSeq->size++;//顺序表的当前长度加 1
19}
20//尾部删除
21void PopBack(pSeqlist pSeq)
22{
23 assert(pSeq);//先检验参数是否合格
24 if(pSeq->size ==0)//判断顺序表是否为空
25 {
26 printf("Seqlist has been empty\n");
27 return ;
28 }
29 pSeq->size--;//顺序表当前长度减 1;
30}
31//头部插⼊
32void PushFront(pSeqlist pSeq,DataType data)
33{
34 int i =0;
35 assert(pSeq);//先检验参数是否合格
36 if(pSeq->size >= MAX_SIZE)//判断顺序表是否已满??
37 {
38 printf("Seqlist has been full\n");
39 return ;
40 }
41 for(i = pSeq->size;i>0;--i)//将当前顺序表的数据向后移⼀位
42 {
43 pSeq->arr[i] = pSeq->arr[i-1];
44 }
45 pSeq->arr[0] = data;//为头部附上要插⼊的值;
46 pSeq->size++; //当前的顺序表长度加 1;
47}
48//头部删除
49void PopFront(pSeqlist pSeq)
50{
51 int i = 0;
52 assert(pSeq);
53 if(pSeq->size ==0)//判断顺序表是否为空
54 {
55 printf("Seqlist has been empty\n");
56 return ;
57 }
58 pSeq->size--;//当前长度减1;
59 for(i = 0;i < pSeq->size;++i)//当前顺序表的数据(除了头部)向前移⼀位
60 {
61 pSeq->arr[i] = pSeq->arr[i+1];
62 }
63}
64//插⼊数据
65void Insert(pSeqlist pSeq,int pos,DataType data)
66{
67 int i = 0;
68 assert(pSeq &&(pos>=0)&&(pos<=pSeq->size));//断⾔参数,插⼊的位置要合法
69 if(pSeq->size >= MAX_SIZE)//判断顺序表是否已满
70 {
71 printf("Seqlist has been full\n");
72 return ;
73 }
74 for(i = pSeq->size;i > pos;--i)//把插⼊的位置之后的数据向后移⼀位
75 {
76 pSeq->arr[i] = pSeq->arr[i-1];
78 pSeq->arr[pos] = data;//为要插⼊的复制
79 pSeq->size++;
80
81
82}
83//按位置删除
84void Erase(pSeqlist pSeq,int pos)
85{
86 int i = 0 ;
87 assert(pSeq &&(pos>=0)&&(pos<=pSeq->size));//断⾔参数,删除的位置要合法
88 if(pSeq->size ==0)//判断顺序表的是否为空
89 {
90 printf("Seqlist has been empty\n");
91 return;
92 }
93 pSeq->size--;
94 for(i = pos ;i < pSeq->size;++i)//将删除的位置以后的数据全部向前移⼀位
95 {
96 pSeq->arr[i]= pSeq->arr[i+1];
97 }
98}
99//查
100int Find(pSeqlist pSeq,DataType data)
101{
102 int i = 0;
103 assert(pSeq);
104 if(pSeq->size ==0)//判断顺序表是否为空
105 {
106 printf("Seqlist has been empty\n");
107 return -1;
108 }
109 for(i = 0;i < pSeq->size;++i)//判断顺序表中的数据是否存在
110 {
111 if(pSeq->arr[i] ==data)
112 return i;//存在的话返回下标
113 }
114 if(i == pSeq->size)
115 {
116 printf("Not find\n");
117 return -1;
118 }
119}
120//按内容删除
121void Remove(pSeqlist pSeq,DataType data)
122{
123 int i = 0;
124 assert(pSeq);
125 if(pSeq->size ==0)
126 {
127 printf("Seqlist has been empty\n");
128 return ;
129 }
130 for(i = 0;i<pSeq->size;++i)
131 {
132 if(pSeq->arr[i] ==data)//到数据
133 {
134 int j = 0;
135 --pSeq->size;//删除数据
136 for(j =i ;j<pSeq->size;++j)//将之后的数据向前移⼀位
137 {
138 pSeq->arr[j] =pSeq->arr[j +1];
139 }
c语言listinsert函数140 return ;
141 }
143 printf("Seqlist does not the data\n");//,没到要删除的数144
145}
146//按内容彻底删除
147void RemoveAll(pSeqlist pSeq,DataType data)
148{
149 int i = 0;
150 int temp = 0;
151 assert(pSeq);
152 if(pSeq->size ==0)
153 {
154 printf("Seqlist has been empty\n");
155 return ;
156 }
157flag:
158 for(i = 0;i<pSeq->size;++i)
159 {
160 temp = pSeq->size;
161 if(pSeq->arr[i] ==data)
162 {
163 int j = 0;
164 --pSeq->size;
165 for(j =i ;j<pSeq->size;++j)
166 {
167 pSeq->arr[j] =pSeq->arr[j +1];
168 }
169 break;
170 }
171 }
172 if(i != temp)//如果么有删除完,回去继续删除
173 goto flag;
174}
175//判断线性表是否为空
176int IsEmpty(pSeqlist pSeq)// 0为空
177{
178 assert(pSeq);
179 if(pSeq->size ==0)
180 {
181 printf("Seqlist has been empty\n");
182 return 0;
183 }
184 return 1;
185}
186//打印线性表
187void PrintSeqlist(pSeqlist pSeq)
188{
189 int i = 0;
190 assert(pSeq);
191 for(i = 0 ;i < pSeq->size;++i)
192 {
193 printf("%d ",pSeq->arr[i]);
194 }
195 printf("\n");
196}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论