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("查找位置错误! ");//位置是否合法 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("表已经满了 ");//插入时,必须检查表是否已经满了。否则会出现溢出错误 50 else if(i < 1 || i > L.length) 51 printf("插入位置错误 ");//判断插入位置的有效性 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("初始化完成......... "); 93 94 while(true){ 95 96 97 printf(" 1.查看顺序表 2.查找元素 3.插入元素 4.删除元素 5.退出 请选择你的操作。。。"); 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(" "); 109 break; 110 case '2': 111 system("cls"); 112 printf("输入你要查找第几个元素? "); 113 scanf("%d",&find); 114 found=GetElem(l,find); 115 printf("第%d个值为%d ",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(" 插入后的顺序表为:"); 126 for(i=0;i<l.length;i++) 127 { 128 printf("%d ",l.data[i]); 129 } 130 printf(" "); 131 break; 132 case '4': 133 system("cls"); 134 printf("请输入要删除掉的元素位置: "); 135 scanf("%d",&position); 136 l=ListDelete(l,position); 137 printf(" 删除后的顺序表为:"); 138 for(i=0;i<l.length;i++) 139 { 140 printf("%d ",l.data[i]); 141 } 142 printf(" "); 143 break; 144 case '0': 145 exit(0); 146 147 } 148 149 } 150 system("pause"); 151 }