1 //更改函数,其中,elem为要更改的元素,newElem为新的数据元素
2 sqlt amend_SeqList(sqlt s, int elem, int newElem){
3 int p=select_SeqList(s,elem);
4 s.head[p-1]=newElem;
5 //由于返回的是元素在顺序表中的位置,所以p-1就是该元素在数组中的下标
6 return s;
7 }
1 #include <stdio.h>
2 #include <stdlib.h>
3
4 #define Size 5
5 typedef struct SeqList{
6 int * head;//声明了一个名为head的长度不确定的数组,也叫“动态数组”
7 int length;//记录当前顺序表的长度
8 int size;//记录顺序表分配的存储容量
9 }sqlt;
10 sqlt init_SeqList(){
11 sqlt s;
12 s.head=(int*)malloc(sizeof(int)*Size);
13 //构造一个空的顺序表,动态申请存储空间
14 if(!s.head)//如果申请失败,作出提示并直接退出程序
15 {
16 printf("初始化失败\n");
17 exit(0);
18 }
19 s.length=0;//空表的长度初始化为0
20 s.size=Size;//空表的初始存储空间为Size
21 return s;
22 }
23 //插入函数,其中,elem为插入的元素,p为插入到顺序表的位置
24 sqlt insert_SeqList(sqlt s,int elem,int p)
25 {
26 //判断插入本身是否存在问题(如果插入元素位置比整张表的长度+1还大(如果相等,是尾随的情况),或者插入的位置本身不存在,程序作为提示并自动退出)
27 if(p>s.length+1||p<1){
28 printf("插入的位置有问题\n");
29 return s;
30 }
31 //做插入操作时,首先需要看顺序表是否有多余的存储空间提供给插入的元素,如果没有,需要申请
32 if(s.length>=s.size){
33 s.head=(int *)realloc(s.head,(s.size+1)*sizeof(int));
34 if(!s.head){
35 printf("存储分配失败\n");
36 }
37 }
38 //插入操作,需要将从插入位置开始的后续元素,逐个后移
39 for(int i=s.length-1;i>=p-1;i--){
40 s.head[i+1]=s.head[i];
41 }
42 //后移完成后,直接将所需插入元素,添加到顺序表的相应位置
43 s.head[p-1]=elem;
44 s.length++;//由于添加了元素,所以长度+1
45 return s;
46 }
47 sqlt del_SeqList(sqlt s,int p){
48 if(p>s.length||p<1){
49 printf("被删除的元素有误\n");
50 return s;
51 }
52 //删除操作
53 for(int i=p;i<s.length;i++){
54 s.head[i-1]=s.head[i];
55 }
56 s.length--;//删除一个元素表的长度要减1
57 return s;
58 }
59 //查找函数,其中,elem表示要查找的数据元素的值
60 int select_SeqList(sqlt s, int elem){
61 for(int i=0;i<s.length;i++){
62 if(s.head[i]==elem){
63 return i+1;
64 }
65 }
66 return -1;//如果查找失败,返回-1
67 }
68 //更改函数,其中,elem为要更改的元素,newElem为新的数据元素
69 sqlt amend_SeqList(sqlt s, int elem, int newElem){
70 int p=select_SeqList(s,elem);
71 s.head[p-1]=newElem;
72 //由于返回的是元素在顺序表中的位置,所以p-1就是该元素在数组中的下标
73 return s;
74 }
75 //输出顺序表中元素的函数
76 void display_SeqList(sqlt s){
77 for(int i=0; i<s.length; i++){
78 printf("%d",s.head[i]);
79 }
80 printf("\n");
81 }
82
83 int main(){
84 sqlt s1=init_SeqList();
85 //向顺序表中添加元素
86 for(int i=1;i<=Size;i++){
87 s1.head[i-1]=i;
88 s1.length++;
89 }
90 printf("原顺序表:\n");
91 display_SeqList(s1);
92
93 printf("删除元素2:\n");
94 s1=del_SeqList(s1,2);
95 display_SeqList(s1);
96
97 printf("在第3的位置插入元素5:\n");
98 s1=insert_SeqList(s1,5,3);
99 s1=insert_SeqList(s1,5,3);
100 s1=insert_SeqList(s1,5,3);
101 s1=insert_SeqList(s1,5,3);
102 display_SeqList(s1);
103
104 printf("查找元素3的位置:\n");
105 int p=select_SeqList(s1,3);
106 printf("%d\n",p);
107
108 printf("将元素3改为6:\n");
109 s1=amend_SeqList(s1,3,6);
110 display_SeqList(s1);
111 return 0;
112 }