1 #include<stdio.h>
2 #include<time.h>
3 #include<stdlib.h>
4 #define MAXSIZE 20 //初始长度
5
6
7
8 typedef int ElemType; //类型为int
9 typedef struct{
10 ElemType data[MAXSIZE];//数组。存储元素
11 int length;
12 }SqList;
13 //顺序表的初始化
14 SqList Init(){
15 //创建一个空的线性表L,时间复杂度O(1)
16 SqList L; //定义
17 L.length=0;//初始长度为0
18 return L; //返回空顺序表
19 }
20 //顺序表的建立
21 SqList Create(SqList L)
22 {
23 int i;
24 srand((unsigned)time(NULL));
25 for(i=0;i<10;i++)
26 {
27 L.data[i]=rand()%100;
28 L.length++;
29 }
30 return L;
31 }
32 //用e返回线性表中第i个元素的值
33 //此时L应该已经存在
34 ElemType GetElem(SqList L,int i)
35 {
36 if(i<1||i>L.length)
37 {
38 printf("查找位置错误!\n");//位置是否合法
39 return 0;
40 }
41 else
42 return L.data[i-1];
43 }
44 //顺序表的插入
45 SqList ListInsert(SqList L, int i, ElemType x)
46 { //在顺序表中的第i个位置插入元素x
47
48 if(L.length == MAXSIZE)
49 printf("表已经满了\n");//插入时,必须检查表是否已经满了。否则会出现溢出错误
50 else if(i < 1 || i > L.length)
51 printf("插入位置错误\n");//判断插入位置的有效性
52 int j;
53 for(j = L.length-1; j >= i - 1; j--)//第i个位置元素逐个后移
54 L.data[j+1] = L.data[j];
55 L.data[i-1] = x; //插入元素x
56 L.length++; //顺序表长度增1
57
58 return L;
59
60 }
61
62 //删除元素
63 SqList ListDelete(SqList L,int i)
64 {
65 int k;
66 if(L.length==0) //线性表为空
67 printf("表为空无法删除");
68 if(i<1||i>L.length)
69 printf("删除的位置不正确");
70 if(i<L.length)
71 {
72 for(k=i;k<L.length;k++)//将删除的位置后继元素前移
73 L.data[k-1]=L.data[k];
74 L.length--;
75 }
76 return L;
77 }
78 int main()
79 {
80 SqList l;
81 l=Init();
82 l=Create(l);
83 char choose;//操作选择
84 int find;//查找操作
85 int found;//查找到的元素
86
87 int position;//标记元素的位置
88 int value;//插入的元素
89
90 int i;
91
92 printf("初始化完成.........\n");
93
94 while(true){
95
96
97 printf("\n1.查看顺序表 \n2.查找元素 \n3.插入元素 \n4.删除元素 \n5.退出 \n请选择你的操作。。。");
98 scanf("%c",&choose);
99
100 switch(choose){
101 case '1':
102 system("cls");
103 printf("查看线性表:");
104 for(i=0;i<l.length;i++)
105 {
106 printf("%d ",l.data[i]);
107 }
108 printf("\n");
109 break;
110 case '2':
111 system("cls");
112 printf("输入你要查找第几个元素?\n");
113 scanf("%d",&find);
114 found=GetElem(l,find);
115 printf("第%d个值为%d\n",find,found);
116 break;
117 case '3':
118 system("cls");
119 printf("请输入要插入的元素位置:");
120 scanf("%d",&position);
121 printf("输入要插入的元素的值:");
122 scanf("%d",&value);
123 l=ListInsert(l,position,value);
124
125 printf("\n插入后的顺序表为:");
126 for(i=0;i<l.length;i++)
127 {
128 printf("%d ",l.data[i]);
129 }
130 printf("\n");
131 break;
132 case '4':
133 system("cls");
134 printf("请输入要删除掉的元素位置:\n");
135 scanf("%d",&position);
136 l=ListDelete(l,position);
137 printf("\n删除后的顺序表为:");
138 for(i=0;i<l.length;i++)
139 {
140 printf("%d ",l.data[i]);
141 }
142 printf("\n");
143 break;
144 case '0':
145 exit(0);
146
147 }
148
149 }
150 system("pause");
151 }