线性表Word格式.docx
《线性表Word格式.docx》由会员分享,可在线阅读,更多相关《线性表Word格式.docx(24页珍藏版)》请在冰豆网上搜索。
L,intFlag);
voidListDelete(SqList&
voidDelete_LElem(SqList&
voidClearList(SqList&
voidDestoryList(SqList&
LB,SqList&
LC);
voidMergeList(SqListLA,SqListLB,SqList&
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"
\t\t\t主菜单\n\n"
\t\t-------------------------------------\n\n"
\t\t\t1——输出前驱\n\n"
\t\t\t2——输出后继\n\n"
\t\t\t3——插入元素\n\n"
\t\t\t4——删除元素\n\n"
\t\t\t5——置空线性表\n\n"
\t\t\t6——销毁线性表\n\n"
\t\t\t7——合并线性表\n\n"
\t\t\t8——输出线性表\n\n"
\t\t\t0——退出\n"
scanf("
%d"
&
a);
switch(a)
{
case1:
system("
PriorElem(LA,LB);
break;
case2:
NextElem(LA,LB);
case3:
ListInsert(LA,LB);
case4:
ListDelete(LA,LB);
case5:
ClearList(LA,LB);
case6:
DestoryList(LA,LB,LC);
case7:
MergeList(LA,LB,LC);
case8:
Output(LA,LB,LC);
case0:
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"
}
}
}
L,intsize)
L.elem=(ElemType*)malloc(size*sizeof(ElemType));
if(!
L.elem)
exit(OVERFLOW);
L.length=0;
L.listsize=size;
returnOK;
e)
if(i<
1||i>
L.length)
returnERROR;
e=L.elem[i-1];
voidPriorElem(SqListLA,SqListLB)
inta;
printf("
\t\t\t1——输出LA中元素的前驱\n\n"
\t\t\t2——输出LB中元素的前驱\n\n"
\t\t\t3——退出\n"
scanf("
switch(a)
case1:
system("
Prior_LElem(LA,flag1);
break;
case2:
Prior_LElem(LB,flag2);
case3:
voidPrior_LElem(SqListL,intFlag)
inta,e,i,flag=0;
if(L.length==0)
线性表已被置空"
elseif(Flag==0)
线性表已被销毁"
else
请输入输出前驱的元素:
"
G:
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的前驱是:
a,e);
}
if(flag==0)
\n\n你输的数据不在线性表中,请重新输入:
gotoG;
\n\n\n\n\n\n按Enter键→"
getchar();
getchar();
voidNextElem(SqListLA,SqListLB)
\t\t\t1——输出LA中元素的后继\n\n"
\t\t\t2——输出LB中元素的后继\n\n"
\t\t\t3——退出\n"
Next_LElem(LA,flag1);
Next_LElem(LB,flag2);
voidNext_LElem(SqListL,intFlag)
请输入输出后继的元素:
I:
{
if(i==L.length)
\n\n元素%d没有后继"
GetElem(L,i+1,e);
\n\n元素%d的后继是:
gotoI;
LB)
\t\t\t1——在LA中插入元素\n\n"
\t\t\t2——在LB中插入元素\n\n"
ListInsert_L(LA,flag1);
ListInsert_L(LB,flag2);
L,intFlag)
inta,b,i,*p,*q;
if(Flag==0)
if(L.length==0)
请在线性表中输入数据,输入0结束(0不作为线性表中的数据)\n"
for(i=0;
SIZE;
scanf("
L.elem[i]);
if(L.elem[i]==0)
L.length++;
elseif(L.length>
0&
&
L.length<
SIZE)
请输入要插入的数据:
A:
L.length;
if(a==L.elem[i])
\n数据%d已存在线性表中,请重新输入:
gotoA;
\n请输入要插入的位置:
(1~%d)"
L.length);
B:
b);
if(b>
L.length||b<
1)
\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;
\n数据%d已插入到线性表中"
else
线性表已存满"
{
\t\t\t1——删除LA中的元素\n\n"
\t\t\t2——删除LB中的元素\n\n"
Delete_LElem(LA,flag1);
Delete_LElem(LB,flag2);
inta,*p,*q,flag=0,i;
请输入要删除的数据:
E:
for(i=0;
if(a==L.elem[i])
break;
\n数据%d不在线性表中,请重新输入:
gotoE;
p=&
(L.elem[i]);
q=L.elem+L.length-1;
for(++p;
p<
++p)
*(p-1)=*p;
--L.length;
第%d个元素%d已被删除\n"
i+1,a);
\n\n\n按Enter键→"
getchar();
\t\t\t1——将LA置为空表\n\n"
\t\t\t2——将LB置为空表\n\n"
\t\t\t3——将LA和LB置为空表\n\n"
\t\t\t4——退出\n"
LA.length=0;
已将LA表置为空表\n"
LB.length=0;
已将LB表置为空表\n"
已将LA和LB表置为空表\n"
case4:
LC)
\t\t\t1——删除LA表\n\n"
\t\t\t2——删除LB表\n\n"
\t\t\t3——删除LA和LB表\n\n"
free(LA.elem);
flag1=0;
已删除LA表\n"
free(LB.elem);
flag2=0;
已删除LB表\n"
已删除LA和LB表\n"
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)
pb++;
{
*pc++=*pb++;
=pa_last)
*pc++=*pa++;
LC.length++;
while(pb<
*pc++=*pb++;
已将LA和LB合并到LC中"
voidOutput(SqListLA,SqListLB,SqListLC)
inta,b,c,d,i;
\t\t\t1——输出LA表\n\n"
\t\t\t2——输出LB表\n\n"
\t\t\t3——输出LC表\n\n"
\t\t\t4——输出LA、LB和LC表\n\n"
\t\t\t5——退出\n"