C语言创建两个递增单链表,并合并成递增单链表 |
您所在的位置:网站首页 › 合并两个单链表a和b › C语言创建两个递增单链表,并合并成递增单链表 |
(C语言)创建两个递增单链表,并合并成递增单链表
实现要求: (1)任意顺序输入5个整数,按有序插入的要求生成两个有序单链表,将该链表输出显示。 (2)将这两个有序单链表使用两个单链表的原有空间进行合并,合并成一个有序单链表,将生成的有序单链表输出显示。 实现方法首先定义单链表的结构 typedef struct node{ //单链表的结构定义 int data; struct node *next; }node,*LinkList;下面是4个函数来实现单链表的初始化、创建、打印输出以及最后的合并操作。 (1)初始化操作 node *StartList(node *L){ //初始化单链表 并设置为空表 L=(node *)malloc(sizeof(node)); L->next=NULL; return L; }(2)创建数据元素按数值递增的单链表 通过先输入进一维数组,将数组进行冒泡排序后再进行单链表的赋值操作。 void CreateList(node *L,int n){//用头插法建立单链表,n为单链表长度 node *p; int i,j,tmp; int a[n]; for(i=0;inext=p; } else i=-1;//i等于n以后已经插入n个数值使i为-1,跳出循环 } }(3)打印函数 void PrintList(node *L){//打印单链表的函数 printf("整个单链表的元素为:"); while(L->next!=NULL){//遍历 printf("%d ",L->next->data); L=L->next; } printf("\n"); }(4)合并链表的函数 通过两个指针的操作不断合并,将La,Lb两个链表的值从小到大赋在La中。 LinkList MergeLinkList(LinkList La,LinkList Lb){//融合两个单链表 LinkList pa,pb; pa=La->next; pb=Lb->next; LinkList pc=La;//以La进行链的连接操作 while(pa&&pb){ if(pa->datadata)//pa里数据比pb小,就连接pa指向的结点,pa指向La的后一个 { LinkList p=pa->next; pa->next=NULL; pc->next=pa; pc=pc->next; pa=p; } else{//pb里数据较小,就连接pb指向的结点,pb指向Lb的后一个 LinkList p=pb->next; pb->next=NULL; pc->next=pb; pc=pc->next; pb=p; } } pc->next=pa?pa:pb;//合并剩下的没遍历完的部分 return La; }主函数的创建,创建两个单链表,并合并,代码如下 int main(){//主函数写调用函数 node *L1,*L2;//L1,L2分别为两个插入的单链表 int n,m;//输入链表的长度 printf("输入第一个链表长度:"); scanf("%d",&n); printf("\n"); L1=StartList(L1); L2=StartList(L2);//分别初始化 //构建第一个单链表 printf("下面构建第一个单链表\n"); CreateList(L1,n); PrintList(L1); printf("\n"); //构建第二个单链表 printf("下面构建第二个单链表\n"); printf("输入第一个链表长度:"); scanf("%d",&m); printf("\n"); CreateList(L2,m); PrintList(L2); printf("\n"); //合成两个链表,使其有序 printf("合并两个单链表,"); MergeLinkList(L1,L2); PrintList(L1); return 0; }运行程序,输入第一个链表长度为8,输入第一个链表的所有元素,再输入第二个链表的长度,进行第二个链表元素的插入。 运行结果如下: C语言程序文件地址:https://download.csdn.net/download/weixin_44512370/13071135 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |