线性表.docx

上传人:b****3 文档编号:3691741 上传时间:2022-11-24 格式:DOCX 页数:24 大小:18.23KB
下载 相关 举报
线性表.docx_第1页
第1页 / 共24页
线性表.docx_第2页
第2页 / 共24页
线性表.docx_第3页
第3页 / 共24页
线性表.docx_第4页
第4页 / 共24页
线性表.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

线性表.docx

《线性表.docx》由会员分享,可在线阅读,更多相关《线性表.docx(24页珍藏版)》请在冰豆网上搜索。

线性表.docx

线性表

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

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

当前位置:首页 > 工程科技 > 能源化工

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

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