C语言创建两个递增单链表,并合并成递增单链表

您所在的位置:网站首页 合并两个单链表a和b C语言创建两个递增单链表,并合并成递增单链表

C语言创建两个递增单链表,并合并成递增单链表

2024-03-25 02:23| 来源: 网络整理| 查看: 265

(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