顺序表的插入、删除、查找、取值

it2023-06-16  71

#include<stdio.h> #define MAXSIZE 100 typedef struct{ int *elem; //存储空间的基地址 int length; }SqList; //初始化 bool InitList(SqList &L){ L.elem=new int[MAXSIZE]; //为顺序表分配一个大小为MAXSIZE的数组空间 if(!L.elem) return false; L.length=0; //将表设置为空表 return true; } //取值 bool GetElem(SqList L,int i,int &e){ if(i<1 || i>L.length || L.length==0) //判断i是否合理和是否为空表 return false; e=L.elem[i-1]; //数组的下表是从0开始的,所以i-1 printf("取出的值为:%d\n",e); return true; } //查找 int LocateElem(SqList L,int e){ for(int i=0;i<L.length;i++){ if(L.elem[i]==e) printf("%d是第%d号元素\n",e,i+1); } return 0; } //插入 bool ListInsert(SqList &L,int i,int e){ //在顺序表L中第i个位置插入新的元素e,i值的合法范围是1≤i≤L.length+1 if((i<1)||(i>L.length+1)||L.length==MAXSIZE) return false; for(int j=L.length-1;j>=i-1;j--) { L.elem[j+1]=L.elem[j]; //插入元素之后的元素后移 } L.elem[i-1]=e; //将新元素e放到第i个位置 ++L.length; //插入新的元素,故表长应该+1 printf("插入元素:%d\n",e); return true; } //删除 bool ListDelete(SqList &L,int i) { //在顺序表L中删除第i个元素,i值得合法范围是1≤i≤L.length if((i<1)||(i>L.length)||L.length==0) return false; printf("删除的元素:%d\n",L.elem[i-1]); for(int j=i;j<=L.length;j++){ //删除元素之后的数前移 L.elem[j-1]=L.elem[j]; } --L.length; //删除一个元素,表长-1 return true; } //遍历 void BianLi(SqList L){ for(int i=0;i<L.length;i++) printf("%d ",L.elem[i]); } int main() { SqList s; int e; InitList(s); ListInsert(s,1,1); ListInsert(s,2,2); ListInsert(s,1,10); ListInsert(s,3,3); ListInsert(s,4,11); GetElem(s,1,e); printf("遍历:"); BianLi(s); printf("\n"); ListDelete(s,1); GetElem(s,1,e); printf("遍历:"); BianLi(s); printf("\n"); LocateElem(s,2); }

最新回复(0)