线性表.docx
- 文档编号:3691741
- 上传时间:2022-11-24
- 格式:DOCX
- 页数:24
- 大小:18.23KB
线性表.docx
《线性表.docx》由会员分享,可在线阅读,更多相关《线性表.docx(24页珍藏版)》请在冰豆网上搜索。
线性表
#include
#include
#defineSIZE20
#defineOK1
#defineERROR0
#defineOVERFLOW-2
typedefintStatus;
typedefintElemType;
typedefstruct
{
ElemType*elem;
intlength;
intlistsize;
}SqList;
intflag1=1,flag2=1;
StatusInitList(SqList&L,intsize);
StatusGetElem(SqListL,inti,ElemType&e);
voidPriorElem(SqListLA,SqListLB);
voidPrior_LElem(SqListL,intFlag);
voidNextElem(SqListLA,SqListLB);
voidNext_LElem(SqListL,intFlag);
voidListInsert(SqList&LA,SqList&LB);
voidListInsert_L(SqList&L,intFlag);
voidListDelete(SqList&LA,SqList&LB);
voidDelete_LElem(SqList&L,intFlag);
voidClearList(SqList&LA,SqList&LB);
voidDestoryList(SqList&LA,SqList&LB,SqList&LC);
voidMergeList(SqListLA,SqListLB,SqList&LC);
voidOutput(SqListLA,SqListLB,SqListLC);
voidoutput_L(SqListL);
voidmain()
{
inta=1;
SqListLA,LB,LC;
InitList(LA,SIZE);
InitList(LB,SIZE);
InitList(LC,2*SIZE);
ListInsert_L(LA,flag1);
ListInsert_L(LB,flag2);
system("cls");
while(a)
{
printf("\n\n");
printf("\t\t\t主菜单\n\n");
printf("\t\t-------------------------------------\n\n");
printf("\t\t\t1——输出前驱\n\n");
printf("\t\t\t2——输出后继\n\n");
printf("\t\t\t3——插入元素\n\n");
printf("\t\t\t4——删除元素\n\n");
printf("\t\t\t5——置空线性表\n\n");
printf("\t\t\t6——销毁线性表\n\n");
printf("\t\t\t7——合并线性表\n\n");
printf("\t\t\t8——输出线性表\n\n");
printf("\t\t\t0——退出\n");
scanf("%d",&a);
switch(a)
{
case1:
system("cls");
PriorElem(LA,LB);
system("cls");
break;
case2:
system("cls");
NextElem(LA,LB);
system("cls");
break;
case3:
system("cls");
ListInsert(LA,LB);
system("cls");
break;
case4:
system("cls");
ListDelete(LA,LB);
system("cls");
break;
case5:
system("cls");
ClearList(LA,LB);
system("cls");
break;
case6:
system("cls");
DestoryList(LA,LB,LC);
system("cls");
break;
case7:
system("cls");
MergeList(LA,LB,LC);
system("cls");
break;
case8:
system("cls");
Output(LA,LB,LC);
system("cls");
break;
case0:
system("cls");
printf("\n\n\n\n\n\n\n\n\t\t\t\t谢谢使用\n\n\n\n\n\n\n\n\n\n\n\n");
break;
}
}
}
StatusInitList(SqList&L,intsize)
{
L.elem=(ElemType*)malloc(size*sizeof(ElemType));
if(!
L.elem)
exit(OVERFLOW);
L.length=0;
L.listsize=size;
returnOK;
}
StatusGetElem(SqListL,inti,ElemType&e)
{
if(i<1||i>L.length)
returnERROR;
e=L.elem[i-1];
returnOK;
}
voidPriorElem(SqListLA,SqListLB)
{
inta;
printf("\n\n");
printf("\t\t\t主菜单\n\n");
printf("\t\t-------------------------------------\n\n");
printf("\t\t\t1——输出LA中元素的前驱\n\n");
printf("\t\t\t2——输出LB中元素的前驱\n\n");
printf("\t\t\t3——退出\n");
scanf("%d",&a);
switch(a)
{
case1:
system("cls");
Prior_LElem(LA,flag1);
system("cls");
break;
case2:
system("cls");
Prior_LElem(LB,flag2);
system("cls");
break;
case3:
system("cls");
break;
}
}
voidPrior_LElem(SqListL,intFlag)
{
inta,e,i,flag=0;
if(L.length==0)
printf("线性表已被置空");
elseif(Flag==0)
printf("线性表已被销毁");
else
{
printf("请输入输出前驱的元素:
");
G:
scanf("%d",&a);
for(i=1;i<=L.length;i++)
{
GetElem(L,i,e);
if(a==e)
{
flag=1;
if(i==1)
{
printf("\n\n元素%d没有前驱",a);
break;
}
GetElem(L,i-1,e);
printf("\n\n元素%d的前驱是:
%d",a,e);
}
}
if(flag==0)
{
printf("\n\n你输的数据不在线性表中,请重新输入:
");
gotoG;
}
}
printf("\n\n\n\n\n\n按Enter键→");
getchar();getchar();
}
voidNextElem(SqListLA,SqListLB)
{
inta;
printf("\n\n");
printf("\t\t\t主菜单\n\n");
printf("\t\t-------------------------------------\n\n");
printf("\t\t\t1——输出LA中元素的后继\n\n");
printf("\t\t\t2——输出LB中元素的后继\n\n");
printf("\t\t\t3——退出\n");
scanf("%d",&a);
switch(a)
{
case1:
system("cls");
Next_LElem(LA,flag1);
system("cls");
break;
case2:
system("cls");
Next_LElem(LB,flag2);
system("cls");
break;
case3:
system("cls");
break;
}
}
voidNext_LElem(SqListL,intFlag)
{
inta,e,i,flag=0;
if(L.length==0)
printf("线性表已被置空");
elseif(Flag==0)
printf("线性表已被销毁");
else
{
printf("请输入输出后继的元素:
");
I:
scanf("%d",&a);
for(i=1;i<=L.length;i++)
{
GetElem(L,i,e);
if(a==e)
{
flag=1;
if(i==L.length)
{
printf("\n\n元素%d没有后继",a);
break;
}
GetElem(L,i+1,e);
printf("\n\n元素%d的后继是:
%d",a,e);
}
}
if(flag==0)
{
printf("\n\n你输的数据不在线性表中,请重新输入:
");
gotoI;
}
}
printf("\n\n\n\n\n\n按Enter键→");
getchar();getchar();
}
voidListInsert(SqList&LA,SqList&LB)
{
inta;
printf("\n\n");
printf("\t\t\t主菜单\n\n");
printf("\t\t-------------------------------------\n\n");
printf("\t\t\t1——在LA中插入元素\n\n");
printf("\t\t\t2——在LB中插入元素\n\n");
printf("\t\t\t3——退出\n");
scanf("%d",&a);
switch(a)
{
case1:
system("cls");
ListInsert_L(LA,flag1);
system("cls");
break;
case2:
system("cls");
ListInsert_L(LB,flag2);
system("cls");
break;
case3:
system("cls");
break;
}
}
voidListInsert_L(SqList&L,intFlag)
{
inta,b,i,*p,*q;
if(Flag==0)
printf("线性表已被销毁");
else
{
if(L.length==0)
{
printf("请在线性表中输入数据,输入0结束(0不作为线性表中的数据)\n");
for(i=0;i { scanf("%d",&L.elem[i]); if(L.elem[i]==0) break; L.length++; } } elseif(L.length>0&&L.length { printf("请输入要插入的数据: "); A: scanf("%d",&a); for(i=0;i { if(a==L.elem[i]) { printf("\n数据%d已存在线性表中,请重新输入: ",a); gotoA; } } printf("\n请输入要插入的位置: (1~%d)",L.length); B: scanf("%d",&b); if(b>L.length||b<1) { printf("\n\n你输入的位置有误\n请重新输入: "); gotoB; } q=&(L.elem[b-1]); for(p=&(L.elem[L.length-1]);p>=q;--p) *(p+1)=*p; *q=a; ++L.length; printf("\n数据%d已插入到线性表中",a); } else printf("线性表已存满"); } } voidListDelete(SqList&LA,SqList&LB) { inta; printf("\n\n"); printf("\t\t\t主菜单\n\n"); printf("\t\t-------------------------------------\n\n"); printf("\t\t\t1——删除LA中的元素\n\n"); printf("\t\t\t2——删除LB中的元素\n\n"); printf("\t\t\t3——退出\n"); scanf("%d",&a); switch(a) { case1: system("cls"); Delete_LElem(LA,flag1); system("cls"); break; case2: system("cls"); Delete_LElem(LB,flag2); system("cls"); break; case3: system("cls"); break; } } voidDelete_LElem(SqList&L,intFlag) { inta,*p,*q,flag=0,i; if(L.length==0) printf("线性表已被置空"); elseif(Flag==0) printf("线性表已被销毁"); else { printf("请输入要删除的数据: "); E: scanf("%d",&a); for(i=0;i { if(a==L.elem[i]) { flag=1; break; } } if(flag==0) { printf("\n数据%d不在线性表中,请重新输入: ",a); gotoE; } p=&(L.elem[i]); q=L.elem+L.length-1; for(++p;p<=q;++p) *(p-1)=*p; --L.length; printf("第%d个元素%d已被删除\n",i+1,a); printf("\n\n\n按Enter键→"); getchar();getchar(); } } voidClearList(SqList&LA,SqList&LB) { inta; printf("\n\n"); printf("\t\t\t主菜单\n\n"); printf("\t\t-------------------------------------\n\n"); printf("\t\t\t1——将LA置为空表\n\n"); printf("\t\t\t2——将LB置为空表\n\n"); printf("\t\t\t3——将LA和LB置为空表\n\n"); printf("\t\t\t4——退出\n"); scanf("%d",&a); switch(a) { case1: system("cls"); LA.length=0; printf("已将LA表置为空表\n"); printf("\n\n\n按Enter键→"); getchar();getchar(); system("cls"); break; case2: system("cls"); LB.length=0; printf("已将LB表置为空表\n"); printf("\n\n\n按Enter键→"); getchar();getchar(); system("cls"); break; case3: system("cls"); LA.length=0; LB.length=0; printf("已将LA和LB表置为空表\n"); printf("\n\n\n按Enter键→"); getchar();getchar(); system("cls"); break; case4: system("cls"); break; } } voidDestoryList(SqList&LA,SqList&LB,SqList&LC) { inta; printf("\n\n"); printf("\t\t\t主菜单\n\n"); printf("\t\t-------------------------------------\n\n"); printf("\t\t\t1——删除LA表\n\n"); printf("\t\t\t2——删除LB表\n\n"); printf("\t\t\t3——删除LA和LB表\n\n"); printf("\t\t\t4——退出\n"); scanf("%d",&a); switch(a) { case1: system("cls"); free(LA.elem); flag1=0; printf("已删除LA表\n"); printf("\n\n\n按Enter键→"); getchar();getchar(); system("cls"); break; case2: system("cls"); free(LB.elem); flag2=0; printf("已删除LB表\n"); printf("\n\n\n按Enter键→"); getchar();getchar(); system("cls"); break; case3: system("cls"); free(LA.elem); flag1=0; free(LB.elem); flag2=0; printf("已删除LA和LB表\n"); printf("\n\n\n按Enter键→"); getchar();getchar(); system("cls"); break; case4: system("cls"); break; } } voidMergeList(SqListLA,SqListLB,SqList&LC) { int*pa,*pb,*pc,*pa_last,*pb_last; pa=LA.elem; pb=LB.elem; pc=LC.elem; pa_last=LA.elem+LA.length-1; pb_last=LB.elem+LB.length-1; while(pa<=pa_last&&pb<=pb_last) { if(*pa<*pb) { *pc++=*pa++; LC.length++; } elseif(*pa==*pb) { *pc++=*pa++; pb++; LC.length++; } else { *pc++=*pb++; LC.length++; } } while(pa<=pa_last) { *pc++=*pa++; LC.length++; } while(pb<=pb_last) { *pc++=*pb++; LC.length++; } printf("已将LA和LB合并到LC中"); printf("\n\n\n按Enter键→"); getchar();getchar(); system("cls"); } voidOutput(SqListLA,SqListLB,SqListLC) { inta,b,c,d,i; printf("\n\n"); printf("\t\t\t主菜单\n\n"); printf("\t\t-------------------------------------\n\n"); printf("\t\t\t1——输出LA表\n\n"); printf("\t\t\t2——输出LB表\n\n"); printf("\t\t\t3——输出LC表\n\n"); printf("\t\t\t4——输出LA、LB和LC表\n\n"); printf("\t\t\t5——退出\n"); scanf("%d",&a); switch(a)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 线性
![提示](https://static.bdocx.com/images/bang_tan.gif)