数据结构-线性链表的实现和应用

该篇博客详细介绍了如何使用链式存储结构实现两个已排序的线性链表的合并,确保合并后的链表仍保持非递减有序。通过`MergeList_L`函数展示了具体的算法步骤,并提供了输入输出示例,包括创建链表、输出链表元素以及合并后的结果展示。
摘要由CSDN通过智能技术生成

采用线性表的链式存储结构,实现线性链表的合并操作:①设有线性链表 La 和 Lb,试设计算法将La 和 Lb 归并为新的线性链表 Lc;②设线性链表 La 和 Lb 中的数据元素为整数,且均已按值非递减有序排列,要求 Lc 中的数据元素也按值非递减有序排列。

#include<malloc.h>
#include<stdio.h>
#define ERROR 0
#define NULL 0
#define OK 1
typedef int ElemType;
typedef struct LNode {
	ElemType data;
	struct LNode* next;
}LNode, * LinkList;
void CreateList_L(LinkList& L, int n)
{
	int i;
	LinkList p, q;
	L = (LinkList)malloc(sizeof(LNode));
	q = L;                                       
	for (i = 1; i <= n; i++)
	{
		p = (LinkList)malloc(sizeof(LNode));
		scanf_s("%d", &p->data);
		q->next = p;
		q = p;
	}
	q->next = NULL;
}
int OutputList_L(LinkList L)
{
	LinkList p = L->next;
	if (p == NULL)
		return ERROR;
	while (p != NULL)
	{
		printf("%d ", p->data);
		p = p->next;
	}
	printf("\n");
	return OK;
}
void MergeList_L(LinkList& La, LinkList& Lb, LinkList& Lc)
{
	LinkList pa, pb, pc;
	pa = La->next;
	pb = Lb->next;
	Lc = pc = La;
	while (pa && pb)
	{
		if (pa->data <= pb->data)
		{
			pc->next = pa;
			pc = pa;
			pa = pa->next;
		}
		else
		{
			pc->next = pb;
			pc = pb;
			pb = pb->next;
		}
	}
	pc->next = pa ? pa : pb;
	free(Lb);
}
int main()
{
	int a, b;
	LinkList La, Lb, Lc = 0;
	printf("输入La元素个数a:\n");
	scanf_s("%d", &a);
	printf("请输入链表La中的元素:\n");
	CreateList_L(La, a);
	printf("输入Lb元素个数b:\n");
	scanf_s("%d", &b);
	printf("请输入链表Lb中的元素:\n");
	CreateList_L(Lb, b);
	printf("输出链表La所有元素:\n");
	OutputList_L(La);
	printf("输出链表Lb所有元素:\n");
	OutputList_L(Lb);
	MergeList_L(La, Lb, Lc);
	printf("输出链表Lc所有元素:\n");
	OutputList_L(Lc);
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值