单链表.docx
《单链表.docx》由会员分享,可在线阅读,更多相关《单链表.docx(17页珍藏版)》请在冰豆网上搜索。
单链表
#include
#include
typedefstructLNode
{
intdata[3];
structLNode*next;
}LNode,*LinkList;
intflag1=1,flag2=1,flag3=0;
voidwelcome();
voidCreateList(LinkList&L);
voidSearch(LinkListLA,LinkListLB);
intSearch_L(LinkListL,intFlag);
voidDelete(LinkList&LA,LinkList&LB);
intDelete_L(LinkList&L,intFlag);
voidInsert(LinkList&LA,LinkList&LB);
intInsert_L(LinkList&L,intFlag);
voidDestroy(LinkList&LA,LinkList&LB);
voidDestroy_L(LinkList&L,int&Flag);
voidMerge(LinkListLA,LinkListLB,LinkList&LC);
voidOutput(LinkListLA,LinkListLB,LinkListLC);
intOutput_L(LinkListL,intFlag);
voidmain()
{
inta=1;
LinkListLA,LB,LC;
welcome();
printf("请在单链表LA中输入数据,按0键结束(0不作为单链表中数据)\n");
CreateList(LA);
printf("\n\n请在单链表LB中输入数据,按0键结束(0不作为单链表中数据)\n");
CreateList(LB);
system("cls");
while(a)
{
printf("\n\n\n");
printf("\t\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\t0——退出\n\n");
scanf("%d",&a);
switch(a)
{
case1:
system("cls");
Search(LA,LB);
break;
case2:
system("cls");
Delete(LA,LB);
break;
case3:
system("cls");
Insert(LA,LB);
break;
case4:
system("cls");
Destroy(LA,LB);
break;
case5:
system("cls");
if(flag1==0)
{
printf("请在单链表LA中输入数据,按0键结束(0不作为单链表中数据)\n");
CreateList(LA);
flag1=1;
}
elseif(flag2==0)
{
printf("请在单链表LB中输入数据,按0键结束(0不作为单链表中数据)\n");
CreateList(LB);
flag2=1;
}
else
printf("销毁LA或LB后才能创建新的单链表");
getchar();
system("cls");
break;
case6:
system("cls");
Merge(LA,LB,LC);
break;
case7:
system("cls");
Output(LA,LB,LC);
break;
case0:
system("cls");
Destroy_L(LA,flag1);
Destroy_L(LB,flag2);
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;
}
}
}
voidwelcome()
{
printf("\n\n\n\n\n\n\n\n\n\t\t\t\t欢迎使用");
printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n按Enter键→");
getchar();
system("cls");
}
voidCreateList(LinkList&L)
{
LinkListp,q;
L=(LinkList)malloc(sizeof(LNode));
L->data[0]=0;
L->next=NULL;
q=L;
while
(1)
{
p=(LinkList)malloc(sizeof(LNode));
scanf("%d",&p->data[0]);
if(p->data[0]==0)
break;
p->data[2]=p->data[1]=p->data[0];
q->next=p;
q=p;
L->data[0]++;
}
q->next=NULL;
}
voidSearch(LinkListLA,LinkListLB)
{
inta=1;
while(a)
{
printf("\n\n\n");
printf("\t\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\t0——退出\n\n");
scanf("%d",&a);
switch(a)
{
case1:
system("cls");
Search_L(LA,flag1);
break;
case2:
system("cls");
Search_L(LB,flag2);
break;
case0:
system("cls");
break;
}
}
}
intSearch_L(LinkListL,intFlag)
{
inta,i;
LinkListp;
if(Flag==0)
{
printf("此单链表已被销毁");
return0;
}
p=L->next;
printf("请输入要查找元素的位置(1~%d):
",L->data[0]);
scanf("%d",&a);
for(i=1;ip=p->next;
printf("\n\n此单链表中第%d个元素为:
%d",a,p->data[0]);
printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n按Enter键→");
getchar();getchar();
system("cls");
return1;
}
voidDelete(LinkList&LA,LinkList&LB)
{
inta=1;
while(a)
{
printf("\n\n\n");
printf("\t\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\t0——退出\n\n");
scanf("%d",&a);
switch(a)
{
case1:
system("cls");
Delete_L(LA,flag1);
break;
case2:
system("cls");
Delete_L(LB,flag2);
break;
case0:
system("cls");
break;
}
}
}
intDelete_L(LinkList&L,intFlag)
{
inta,i=0;
LinkListp=L,q;
if(Flag==0)
{
printf("此单链表已被销毁");
return0;
}
printf("请输入要删除元素的位置(1~%d):
",L->data[0]);
scanf("%d",&a);
while(p->next&&i{
p=p->next;
i++;
}
if(!
(p->next)||i>a-1)
return0;
q=p->next;
p->next=q->next;
printf("\n\n\n\n已将第%d个元素%d从单链表中",a,q->data[0]);
free(q);
printf("\n\n\n\n\n\n\n\n按Enter键→");
getchar();getchar();
system("cls");
return1;
}
voidInsert(LinkList&LA,LinkList&LB)
{
inta=1;
while(a)
{
printf("\n\n\n");
printf("\t\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\t0——退出\n\n");
scanf("%d",&a