欢迎来到天天文库
浏览记录
ID:21131515
大小:25.50 KB
页数:3页
时间:2018-10-19
《将两个单链表归并成一个按元素值递减有序单链表》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、将两个单链表归并成一个按元素值递减有序的单链表.txt珍惜生活——上帝还让你活着,就肯定有他的安排。雷锋做了好事不留名,但是每一件事情都记到日记里面。#include#includetypedefstructLNode{intnum;structLNode*next;}LNode,*linklist;voidInsertlist(linklist&L,inte)/*L为已知有序递增链表,在L的适当位置插入p,使得L保持有序性*/{linklistp1,q,p2;p1=(linklist)malloc(siz
2、eof(LNode));p1->num=e;if(L->next)/*判断链表L是否为空链表*/{q=L->next;/*将L第一个元素地址给q*/p2=L;while(q->next&&q->numnum)/*若q不是最后一个节点,且q的值小于p的值则q后移一位*/{p2=q;q=q->next;}if(q->num>=p1->num)/*查找插入位置*/{p1->next=q;p2->next=p1;}else{q->next=p1;p1->next=NULL;}/*插入节点*/}else{L->next=p1;p1->next=
3、NULL;}}voidcreatelist(linklist&L)/*创建带头结点的有序链表*/{inti,m,k;L=(linklist)malloc(sizeof(LNode));L->next=NULL;printf("请输入链表的长度:");scanf("%d",&m);printf("请输入数据:");/*建立一个带头节点单链表*/for(i=0;i4、ack(linklist&L)/*链表的逆置*/{linklistp,q;p=L->next;/*p指向第一个元素*/L->next=NULL;while(p){q=p->next;p->next=L->next;L->next=p;p=q;}}voidmergelist(linklist&L1,linklistL2)/*合并L1,L2两个链表,用的地址L1作为新链表地址返回*/{linklistp1,p2,p3,p4;p1=L1->next;p2=L2->next;p3=L1;while(p1&&p2){if(p1->num<=p2->num5、)/*若p1的值小于或等于p2的值,则帕p1p3同时后移*/{p3=p1;p1=p1->next;}else/*若p1的值大于p2的值,则p1前插入p2,p2和p3后移*/{p4=p2->next;p2->next=p1;p3->next=p2;p3=p2;p2=p4;}}p3->next=p1?p1:p2;/*插入剩余段*/free(L2);/*释放L2的头节点*/}voidprintlist(linklistL)/*打印已知链表*/{linklistp;p=L->next;while(p){printf("%5d",p->num);/*输6、出数据*/p=p->next;}printf("");}voidmain(){linklistL1,L2;printf("创建有序链表L1");createlist(L1);printf("单链表L1为:");printlist(L1);printf("创建有序链表L2:");createlist(L2);printf("L2链表为:");printlist(L2);mergelist(L1,L2);//调用合并两个链表的函数printf("合并两个单链表后新的链表为:numscore");printlist(L1);pri7、ntf("递减排序:");turnback(L1);printlist(L1);}
4、ack(linklist&L)/*链表的逆置*/{linklistp,q;p=L->next;/*p指向第一个元素*/L->next=NULL;while(p){q=p->next;p->next=L->next;L->next=p;p=q;}}voidmergelist(linklist&L1,linklistL2)/*合并L1,L2两个链表,用的地址L1作为新链表地址返回*/{linklistp1,p2,p3,p4;p1=L1->next;p2=L2->next;p3=L1;while(p1&&p2){if(p1->num<=p2->num
5、)/*若p1的值小于或等于p2的值,则帕p1p3同时后移*/{p3=p1;p1=p1->next;}else/*若p1的值大于p2的值,则p1前插入p2,p2和p3后移*/{p4=p2->next;p2->next=p1;p3->next=p2;p3=p2;p2=p4;}}p3->next=p1?p1:p2;/*插入剩余段*/free(L2);/*释放L2的头节点*/}voidprintlist(linklistL)/*打印已知链表*/{linklistp;p=L->next;while(p){printf("%5d",p->num);/*输
6、出数据*/p=p->next;}printf("");}voidmain(){linklistL1,L2;printf("创建有序链表L1");createlist(L1);printf("单链表L1为:");printlist(L1);printf("创建有序链表L2:");createlist(L2);printf("L2链表为:");printlist(L2);mergelist(L1,L2);//调用合并两个链表的函数printf("合并两个单链表后新的链表为:numscore");printlist(L1);pri
7、ntf("递减排序:");turnback(L1);printlist(L1);}
此文档下载收益归作者所有