顺序表所有操作代码:
head.h:
1 #ifndef __HEAD_H__
2 #define __HEAD_H__
3 #include<stdio.h>
4 #include<string.h>
5 #include<stdlib.h>
6 enum num
7 {
8 FALSE=-1,
9 SUCCESS
10 };
11 #define MAXSIZE 7
12 typedef int datatype;
13 typedef struct SQLIST
14 {
15 datatype data[MAXSIZE];
16 int len;
17 }sqlist;
18 sqlist* create();
19 int full(sqlist*list);
20 int insert_rear(datatype element,sqlist*list);
21 int output(sqlist*list);
22 int delete_rear(sqlist*list);
23 void search_index(sqlist*list,int index);
24 void change_index(sqlist*list,int index,datatype element);
25 void insert_index(sqlist*list,int index,datatype element);
26 int delete_index(sqlist*list,int index);
27 int search_element(sqlist*list,datatype key);
28 int delete_repeat(sqlist*list);
29 void Bubble(sqlist*list);
30 void simeple_sort(sqlist*list);
31 sqlist* free_space(sqlist*list);
32 #endif
main.c:
1 #include "head.h"
2 int main(int argc, const char *argv[])
3 {
4 //创建顺序表堆区
5 sqlist *list=create();
6 //循环调用尾插函数
7 int n;
8 datatype element;//
9 printf("please enter n:");
10 scanf("%d",&n);
11 for(int i=0;i<n;i++)
12 {
13 printf("please enter %d inser element:",i+1);
14 scanf("%d",&element);
15 int flag=insert_rear(element,list);
16 if(flag==FALSE)
17 {
18 puts("NULL or FULL");
19 break;
20 }
21 }
22 //遍历
23 output(list);
24 //尾删
25 delete_rear(list);
26 delete_rear(list);
27 output(list);
28 //按下标查找
29 int index;
30 printf("please enter search index:");
31 scanf("%d",&index);
32 search_index(list,index);
33 //按任意下标修改
34 printf("please enter change index:");
35 scanf("%d",&index);
36 printf("please enter change element:");
37 scanf("%d",&element);
38 change_index(list,index,element);
39 output(list);
40 //任意位置插入
41 printf("please enter insert index:");
42 scanf("%d",&index);
43 printf("please enter insert element:");
44 scanf("%d",&element);
45 insert_index(list,index,element);
46 output(list);
47 //任意位置删除
48 printf("please enter delete index:");
49 scanf("%d",&index);
50 delete_index(list,index);
51 output(list);
52 //按任意元素查找
53 datatype key;
54 printf("please enter search key:");
55 scanf("%d",&key);
56 int s=search_element(list,key);
57 printf("search by element: %d\n",s);
58 //顺序表去重
59 delete_repeat(list);
60 output(list);
61 //按顺序表任意元素删除
62 printf("please enter search key:");
63 scanf("%d",&key);
64 int d=search_element(list,key);
65 printf("search by element: %d\n",d);
66 delete_index(list,d);
67 output(list);
68 //顺序表按任意元素修改
69 printf("please enter search key:");
70 scanf("%d",&key);
71 for(int i=0;i<list->len;i++)
72 {
73 int c=search_element(list,key);
74 printf("search by element: %d\n",c);
75 if(c<0)
76 break;
77 else
78 {
79 printf("please enter change element:");
80 scanf("%d",&element);
81 change_index(list,c,element);
82 }
83 }
84 output(list);
85 //顺序表排序
86 //1.冒泡排序
87 Bubble(list);
88 output(list);
89 //2.简单排序
90 simeple_sort(list);
91 output(list);
92 //释放内存
93 list=free_space(list);
94 return 0;
95 }
test.c:
1 #include "head.h"
2 //创建顺序表堆区
3 sqlist* create()
4 {
5 sqlist *list=(sqlist*)malloc(sizeof(sqlist));
6 if(NULL==list)
7 return NULL;
8 memset(list->data,0,sizeof(list->data));//数据元素清零
9 list->len=0;//顺序表长度清零
10 return list;//list类型为sqlist*
11 }
12 //判断顺序表满
13 int full(sqlist*list)
14 {
15 return list->len==MAXSIZE?FALSE:SUCCESS;
16 }
17 //尾插
18 int insert_rear(datatype element,sqlist*list)
19 {
20 if(NULL==list || full(list))
21 return FALSE;
22 list->data[list->len++]=element;
23 return SUCCESS;
24 }
25 //判断顺序表空
26 int empty(sqlist*list)//主函数不调用不声明
27 //下面函数可直接使用
28 {
29 return list->len==0?FALSE:SUCCESS;
30 }
31 //遍历
32 int output(sqlist*list)
33 {
34 if(NULL==list || empty(list))
35 return FALSE;
36 for(int i=0;i<list->len;i++)
37 {
38 printf("%-4d",list->data[i]);
39 }
40 puts("");
41 }
42 //尾删
43 int delete_rear(sqlist*list)
44 {
45 if(NULL==list || empty(list))
46 return FALSE;
47 list->len--;//只是不显示,不能真正删除
48 return SUCCESS;
49 }
50 //按下标查找
51 void search_index(sqlist*list,int index)
52 {
53 if(NULL==list||empty(list)||index<0||index>=list->len)
54 {
55 puts("error");
56 return;
57 }
58 printf("search by index :%d\n",list->data[index]);
59 }
60 //按任意下标修改
61 void change_index(sqlist*list,int index,datatype element)
62 {
63 if(NULL==list||empty(list)||index<0||index>=list->len)
64 {
65 puts("erro");
66 return;
67 }
68 list->data[index]=element;
69 }
70 //任意位置插入
71 void insert_index(sqlist*list,int index,datatype element)
72 {
73 if(NULL==list||full(list)||index<0||index>list->len)
74 {
75 puts("error");
76 return;
77 }
78 for(int i=list->len-1;i>=index;i--)
79 {
80 list->data[i+1]=list->data[i];
81 }
82 list->data[index]=element;
83 list->len++;
84 }
85 //任意位置删除
86 int delete_index(sqlist*list,int index)
87 {
88 if(NULL==list||empty(list)||index<0||index>=list->len)
89 {
90 puts("error");
91 return FALSE;
92 }
93 for(int i=index+1;i<list->len;i++)
94 {
95 list->data[i-1]=list->data[i];
96 }
97 list->len--;
98 return SUCCESS;
99 }
100 //按任意元素查找
101 int search_element(sqlist*list,datatype key)
102 {
103 //int index=-1;
104 if(NULL==list || empty(list))
105 return FALSE;
106 for(int i=0;i<list->len;i++)
107 {
108 if(list->data[i]==key)
109 {
110 //index=i;
111 return i;//返回第一个key的下标
112 }
113 }
114 return FALSE;
115 }
116 //顺序表去重
117 int delete_repeat(sqlist*list)
118 {
119 if(NULL==list || empty(list))
120 return FALSE;
121 for(int i=0;i<list->len-1;i++)
122 {
123 for(int j=i+1;j<list->len;j++)
124 {
125 if(list->data[i]==list->data[j])
126 {
127 delete_index(list,j);
128 j--;//防止漏删
129 }
130 }
131 }
132 return SUCCESS;
133 }
134 //顺序表按任意元素删除
135 //顺序表按任意元素修改
136 //顺序表排序
137 //1.冒泡排序//
138 void Bubble(sqlist*list)
139 {
140 for(int i=1;i<list->len;i++)
141 {
142 for(int j=0;j<list->len-i;j++)
143 {
144 if(list->data[j]>list->data[j+1])
145 {
146 datatype t=list->data[j];
147 list->data[j]=list->data[j+1];
148 list->data[j+1]=t;
149 }
150 }
151 }
152 //2.简单排序
153 void simeple_sort(sqlist*list)
154 {
155 for(int i=0;i<list->len-1;i++)
156 {
157 int min=i;
158 for(int j=i+1;j<list->len;j++)
159 {
160 if(list->data[min]>list->data[j])
161 {
162 min=j;
163 }
164 }
165 if(min!=i)
166 {
167 datatype t=list->data[min];
168 list->data[min]=list->data[i];
169 list->data[i]=t;
170 }
171 }
172 }
173 //释放内存
174 sqlist* free_space(sqlist*list)
175 {
176 if(NULL==list)
177 return NULL;
178 free(list);
179 list=NULL;
180 return NULL;
181 }
1.按元素删除(只删第一个)、按元素修改
2.顺序表排序
冒泡排序:
简单排序:
3.释放内存
流程图: