c语言链表冒泡排序6,C语言链表的创建,增删改查,合并,冒泡排序

#include

#include

typedef struct Node

{

int num;

struct Node *next;

}node;

node *creat()//创建

{

node *p1,*p2,*head;

int n=0;

p1=p2=malloc(sizeof(node));

head=NULL;

printf("\t\t\t\t\t请输入结点数据(输入0代表结束):\n");

printf("\t\t\t\t\t");

scanf("%d",&p1->num);

if(!p1||!p2)

exit(0);

while(p1->num!=0)

{

n++;

if(n==1)

head=p1;

else

p2->next=p1;

p2=p1;

p1=malloc(sizeof(node));

printf("\t\t\t\t\t");

scanf("%d",&p1->num);

}

p2->next=NULL;

return head;

}

node *insert(node *head)//链表尾部插入

{

node *p1,*p2;

p1=head;

printf("\t\t\t\t\t请输入要插入的结点数据:");

if(head==NULL)

{

p2=malloc(sizeof(node));

head=p2;

p2->next=NULL;

scanf("%d",&p2->num);

}

else

{

while(p1->next!=NULL)

p1=p1->next;

p2=malloc(sizeof(node));

if(!p2)

return 0;

p1->next=p2;

p1=p2;

p1->next=NULL;

scanf("%d",&p2->num);

}

return head;

}

node *insert1(node *head)//链表头部插入

{

node *p1,*p2;

p1=head;

printf("\t\t\t\t\t请输入要插入的结点数据:");

if(head==NULL)

{

p2=malloc(sizeof(node));

if(!p2)

return 0;

head=p2;

p2->next=NULL;

scanf("%d",&p2->num);

}

else

{

p2=malloc(sizeof(node));

p2->next=p1;

p1=p2;

head=p2;

scanf("%d",&p2->num);

}

return head;

}

node *delNode(node *head,int e)//删除

{

node *p1,*p2;

p1=head;

if(head==NULL)

exit(0);

while(p1!=NULL&&p1->num!=e)

{

p2=p1;

p1=p1->next;

}

if(p1==NULL)

printf("\t\t\t\t\t未找到该结点,删除失败!!\n");

if(p1->num==e)

{

if(p1==head)

head=p1->next;

else

{

p2->next=p1->next;

p2=p1->next;

free(p1);

}

printf("\t\t\t\t\t删除成功!!\n");

}

return head;

}

int seek(node *head,int x)//查找结点

{

node *p1;

int n=0;

p1=head;

if(head==NULL)

{

printf("\t\t\t\t\t链表为空哦!!\n");

exit(0);

}

while(p1!=NULL)

{

n++;

if(p1->num==x)

{

printf("\t\t\t\t\t成功找到该结点!!!,该结点在链表中第%d个位置\n\n",n);

return n;

}

p1=p1->next;

}

printf("\t\t\t\t\t未找到该结点!!!\n");

return 0;

}

void print(node *head)//打印

{

node *p;

p=head;

printf("\n\t\t\t\t\t链表中的数据如下:\n");

if(head!=NULL)

{

printf("\t\t\t\t\t");

while(p!=NULL)

{

printf("%d ",p->num);

p=p->next;

}

printf("\n");

}

else

printf("\t\t\t\t\t链表为空!!!\n");

}

void sequence(node *head)//冒泡排序

{

int i,j,a,n=0;

node *p;

p=head;

while(p!=NULL)

{

n++;

p=p->next;

}

p=head;

if(p!=NULL)

{

for(i=0;i

{

if(p!=NULL)

{

for(j=0;j

{

if(p->num>p->next->num)

{

a=p->num;

p->num=p->next->num;

p->next->num=a;

}

p=p->next;

}

}

p=head;

}

}

}

node *mergeNode(node *head1,node *head2)

{

node *La;

La=head1;

if(head1==NULL&&head2==NULL)

{

printf("\t\t\t\t\t两个链表都为空,合并失败!!!\n");

return 0;

}

if(head1==NULL)

return head2;

if(head2==NULL)

return head1;

while(La->next!=NULL)

La=La->next;

La->next=head2;

return head1;

}

void menu()//菜单

{

node *p1,*p2,*p3,*p4,*p5;

int a,b,c,d;

printf("\t\t\t\t\t*************菜单系统*************\n");

printf("\t\t\t\t\t*输入1:查看第一题\n");

printf("\t\t\t\t\t*输入2:查看第二题\n");

printf("\t\t\t\t\t*输入0:退出菜单系统\n");

printf("\t\t\t\t\t**********************************\n");

printf("\t\t\t\t\t请输入你的选项:");

scanf("%d",&d);

do

{

switch(d)

{

case 1:system("cls");

p1=creat();

print(p1);

p2=insert1(p1);

print(p2);

printf("\t\t\t\t\t请输入要删除的数据:");

scanf("%d",&b);

p3=delNode(p2,b);

print(p3);

printf("\t\t\t\t\t请输入要查找的数据:");

scanf("%d",&c);

a=seek(p3,c);break;

case 2:

system("cls");

printf("\t\t\t\t\tLa:\n");

p4=creat();

printf("\n\t\t\t\t\tLb:\n");

p5=creat();

p3=mergeNode(p4,p5);

sequence(p3);

printf("\n\t\t\t\t\tLa和Lb合并后得到的Lc:\n");

print(p3);break;

case 0:break;

}

printf("\t\t\t\t\t请输入你的选项:");

scanf("%d",&d);

}while(0

printf("\t\t\t\t\t菜单已退出,感谢你使用该菜单系统!!!\n");

}

int main()

{

menu();

return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值