记录一下(插入,删除,查找)
注意点:位序 i 的值是从1开始的,而数据n是从 0 开始计数的。
时间复杂度:
插入:最好情况:表尾插入:O(1)
最坏情况:表头插入:O(n)
平均情况:执行n/2次,O(n)
删除:最好情况:表尾删除:O(1)
最坏情况:表头删除:O(n)
平均情况:执行(n-1)/2次,O(n)
按值查找:最好情况:表头查找:O(1)
最坏情况:表尾查找:O(n)
平均情况:执行(n+1)/2次,O(n)
#include<stdio.h> #include<stdlib.h> #define Maxsize 50 typedef struct{ int data[Maxsize]; //顺序表中的元素 int length; // 顺序表长度 }SqList; /*-----------插入函数----------*/ //在顺序表的第i个位置插入新元素e ,i后元素后移操作 bool List_insert(SqList &L,int i,int e) { // if (i<1 || i>L.length+1){ // printf("插入失败,插入位置不合法\n"); // return false; // } // // if (L.length >= Maxsize){ // printf("插入失败,顺序表已满\n"); // return false; // } // @@@@@@@@将判定条件前移放入main函数里面了 for (int j=L.length;j>=i;j--){ L.data[j] = L.data[j-1]; } L.data[i-1] = e; L.length++; return true; } /*-----------删除函数-----------*/ bool List_delete(SqList &L,int i,int &e){//直接赋值将第i个数赋值给e e = L.data[i-1];//注意下标位置是从1开始的 for (int j = i;j < L.length; j++ ){ L.data[i-1] = L.data[i];//i后元素前移一位 } L.length--; return true; } /*-----------查找函数(按值查找,return its location)-----------*/ int List_find(SqList &L,int e){ int i; for (i = 0;i <= L.length;i++){ if(L.data[i]==e){ return i+1; } } return 0; } /*-----------查找函数(按位i查找,return its location)-----------*/ int List_search(SqList &L,int i){ return L.data[i-1]; } /*-----------输出函数-----------*/ bool Sqlist_display(SqList L){ int j; for (j=0;j<=L.length-1;j++) printf("%4d",L.data[j]); printf("\n"); } /*-----------主函数-----------*/ int main(){ SqList L; int i,x,j; printf("\n请输入顺序表长度:"); scanf("%d",&L.length); printf("请输入顺序表元素:\n"); for (j=0;j<=L.length-1;j++){ scanf("%d",&L.data[j]); } printf("*******************************\n"); printf("请输入您要进行的操作:\n"); printf("1.插入元素\n"); printf("2.删除元素 3.按值查找元素\n"); printf("4.按位查找元素\n"); printf("*******************************\n"); printf("实现操作:"); scanf("%d",&i); switch (i) { case 1: printf("请输入插入操作位置:"); scanf("%d",&i); if (i<1 || i>L.length+1){ printf("插入失败,插入位置不合法\n"); return false; } if (L.length >= Maxsize){ printf("插入失败,顺序表已满\n"); return false; } //直接将插入条件判定移到输入插入位置之后 printf("请输入需要插入的新元素:"); scanf("%d",&x); List_insert(L,i,x); Sqlist_display(L); break; case 2: printf("请输入删除操作位置:"); scanf("%d",&i); if (i<1 || i>L.length){ printf("失败,位置不合法\n"); return false; } if (L.length >= Maxsize){ printf("失败,顺序表已满\n"); return false; } List_delete(L,i,x); Sqlist_display(L); break; case 3: printf("请输入要查找的元素:"); scanf("%d",&x); if(List_find(L,x)){ printf("find success!!查找元素在第%d位\n",List_find(L,x)); } else{ printf("find false!!\n"); } break; case 4: printf("输入查找位序:"); scanf("%d",&i) ; if(i>0&&i<=L.length){ printf("find success!!查找元素是%d\n",List_search(L,i)); } else{ printf("find false!!,the location you input exceeds the range!\n"); } break; default: printf("没有这一步操作\n"); break; } // system("pause"); }