数据结构中顺序表的基本操作.docx
- 文档编号:12738218
- 上传时间:2023-04-21
- 格式:DOCX
- 页数:9
- 大小:15.80KB
数据结构中顺序表的基本操作.docx
《数据结构中顺序表的基本操作.docx》由会员分享,可在线阅读,更多相关《数据结构中顺序表的基本操作.docx(9页珍藏版)》请在冰豆网上搜索。
数据结构中顺序表的基本操作
数据结构中顺序表的基本操作
//头文件
#include
#include
#include
//函数返回状态代码
#defineOK1
#defineERROR0
#defineTRUE1
#defineFALSE0
#defineINFEASIBLE-1
#defineOVERFLOW-2
//运用动态分配的顺序存储结构
#defineLIST_INIT_SIZE100
#defineLISTINCREMENT10
typedefintElemType;
typedefstruct{
ElemType*elem;
intlength;
intlistsize;
}SqList;
typedefintStatus;
StatusInitList(SqList&L){
//初始化一个顺序表
L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));
if(!
L.elem)exit(OVERFLOW);
L.length=0;
L.listsize=LIST_INIT_SIZE;
returnOK;
}//InitSqList
StatusListInsert(SqList&L,inti,ElemTypee){
//在第i个元素前插入一个新的元素
if(i<1||i>++L.length)returnERROR;
if(L.length==L.listsize)
{
ElemType*newbase=(ElemType*)realloc(L.elem,(LIST_INIT_SIZE+LISTINCREMENT)*sizeof(ElemType));
if(!
newbase)exit(OVERFLOW);
L.elem=newbase;
L.listsize=LIST_INIT_SIZE+LISTINCREMENT;//勿忘
}
for(intj=L.length;j>=i;--j)//此处要注意
L.elem[j]=L.elem[j-1];
L.elem[i-1]=e;
returnOK;
}//ListInsert
StatusGetElem(SqListL,inti,ElemType&e){
//返回顺序表中的第i个元素
if(i<1||i>L.length)returnERROR;
e=L.elem[i-1];
returnOK;
}//GetElem
StatusListDelete(SqList&L,inti,ElemType&e){
//删除顺序表中的第i个元素
if(i<1||i>L.length)returnERROR;
e=L.elem[i-1];
for(i;i L.elem[i-1]=L.elem[i]; --L.length; returnOK; }//ListDelete StatusPriorElem(SqListL,ElemTypecur_e,ElemType&pre_e){ //返回一个不是首元素的前驱 inti=2; if(cur_e==L.elem[0])returnERROR; while(i<=L.length&&(L.elem[i-1]! =cur_e)) i++; if(i==L.length+1)returnERROR; elsepre_e=L.elem[i-2]; returnOK; }//PriorElem StatusNextElem(SqListL,ElemTypecur_e,ElemType&next_e){ //返回一个不是末元素的后继 inti=1; while(i =cur_e)) i++; if(i==L.length)returnERROR; elsenext_e=L.elem[i]; returnOK; }//NextElem StatusListEmpty(SqListL){ //判断顺序表是否为空 returnL.length==0; }//ListEmpty StatusListLength(SqListL){ //求顺序表的长度 returnL.length; }//ListLength StatusDestroyList(SqList&L){ //销毁一个顺序表 if(L.elem) free(L.elem); L.elem=NULL; printf("此顺序表已被销毁。 "); returnOK; }//DestroyList StatusClearList(SqList&L){ //清空一个顺序表 L.length=0; returnOK; }//ClearList StatusListPrint(SqList&L) { printf("顺序表为: "); if(ListEmpty(L)) { printf("空。 \n"); returnERROR; } for(inti=0;i { printf("%-4d",L.elem[i]); } printf("\n"); returnOK; } voidmain() { SqListL; ElemTypea,b,c,d,e,f,pre_e,next_e; inti,j,k,l,m,menu; charp,q,r,s; intis_stop_; InitList(L); is_stop_=FALSE; while(! is_stop_) { printf( "1.添加元素2.查看指定位置的元素\n" "3.删除元素4.查找元素前驱\n" "5.查找元素后继6.检查是否为空\n" "7.列出所有元素8.查看列表长度\n" "9.清空表10.释放列表内存并退出\n" "11.退出\n" ); printf("请选择,执行以上操作: "); scanf("%d",&menu); switch(menu) { //"1.添加元素;\n" case1: printf("请输入你想创建的顺序表中元素的个数: "); scanf("%d",&i); if(i<1)printf("您输入的值有误,无法创建顺序表。 \n"); else { printf("请您依次输入您想创建的顺序表的元素: "); for(j=1;j<=i;j++) { scanf("%d",&a); ListInsert(L,L.length+1,a); } } ListPrint(L); break; //"2.查看指定位置的元素\n" case2: printf("请输入您想获取的元素的位序: "); scanf("%d",&k); if(GetElem(L,k,b))printf("获得的元素为: %d\n",b); elseprintf("您输入的值有误,无法获取元素。 \n"); break; //"3.删除元素\n" case3: printf("请输入您想删除的元素的位序: "); scanf("%d",&l); if(ListDelete(L,l,c)) { printf("删除的元素为: %d\n",c); printf("删除元素后的顺序表为: "); ListPrint(L); } elseprintf("您输入的值有误,无法删除元素。 \n"); break; //"4.查找元素前驱\n" case4: printf("您想返回那个元素的前驱? "); scanf("%d",&d); if(PriorElem(L,d,pre_e))printf("元素%d的前驱为%d\n",d,pre_e); elseprintf("您输入的值有误,无法返回前驱。 \n"); break; //"5.查找元素后继\n" case5: printf("您想返回那个元素的后继? "); scanf("%d",&e); if(NextElem(L,e,next_e))printf("元素%d的后继为%d\n",e,next_e); elseprintf("您输入的值有误,无法返回后继。 \n"); break; //"6.检查是否为空\n" case6: if(ListEmpty(L))printf("此顺序表为空。 \n"); elseprintf("此顺序表不为空。 \n"); break; //"7.列出所有元素\n" case7: ListPrint(L); break; //"8.查看列表长度\n" case8: printf("此顺序表的长度为: %d\n",ListLength(L)); break; //"9.清空表\n" case9: ClearList(L); printf("顺序表已清空。 \n"); break; //"10.释放列表内存\n" case10: DestroyList(L); is_stop_=TRUE; break; //"11.退出\n" case11: is_stop_=TRUE; break; } } DestroyList(L); }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 顺序 基本 操作