数据结构中顺序表的基本操作.docx

上传人:b****1 文档编号:12738218 上传时间:2023-04-21 格式:DOCX 页数:9 大小:15.80KB
下载 相关 举报
数据结构中顺序表的基本操作.docx_第1页
第1页 / 共9页
数据结构中顺序表的基本操作.docx_第2页
第2页 / 共9页
数据结构中顺序表的基本操作.docx_第3页
第3页 / 共9页
数据结构中顺序表的基本操作.docx_第4页
第4页 / 共9页
数据结构中顺序表的基本操作.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

数据结构中顺序表的基本操作.docx

《数据结构中顺序表的基本操作.docx》由会员分享,可在线阅读,更多相关《数据结构中顺序表的基本操作.docx(9页珍藏版)》请在冰豆网上搜索。

数据结构中顺序表的基本操作.docx

数据结构中顺序表的基本操作

数据结构中顺序表的基本操作

//头文件

#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);

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1