严蔚敏数据结构C语言版(两个有序链表并为一个有序链表)(用户自己输入有序的链表!)(功能体系较为完善建议认真理解本程序)——中职

本文介绍如何使用C语言根据严蔚敏数据结构中的算法,结合宏定义,让用户输入两个有序链表,并合并成一个新的有序链表。程序实现过程中包括链表节点的动态分配、用户输入合法性检查、有序链表合并以及内存释放等关键步骤。
摘要由CSDN通过智能技术生成

严蔚敏数据结构C语言版 P31 算法2.11

两个有序链表并为一个有序链表(用户自己输入有序的链表!)(功能体系较为完善建议认真理解本程序)

/*
严蔚敏数据结构C语言版 P31 算法2.11

两个有序链表并为一个有序链表(用户自己输入有序的链表!)(功能体系较为完善建议认真理解本程序)
*/

//头文件
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>

//宏区
#define List_length 5							//可一次性修改需要开辟的个数(注意,要把下面一个宏定义的数值改为List_length的两倍(两个链表))
#define List_MAX 10								//第三个链表的结点数

//结构	
typedef struct List												//该单链表的结构
{
   
	int data;													//数据域
	struct List *NEXT;											//指针域
}Sqlist,*PList;	

//函数声明
PList List_initialize(void);									//初始化链表,并返回头指针
void List_valuation(PList);										//由用户自定义开辟的结点数并赋予每个结点的值
void List_printf(PList);										//输出链表的值
void List_establish(PList);										//建立链表但数据域不赋予值
void List_Orderly_merge(PList, PList, PList);					//两个有序链表并为一个有序链表

//函数区
PList List_initialize(void)										//初始化链表,并返回头指针
{
   
	PList PHead = (PList)malloc(sizeof(Sqlist));				//开辟头结点并用头指针指向
	if (NULL == PHead)											//判断是否开辟成功
	{
   
		printf("初始化链表头结点开辟失败,检查程序\n");			//显示出错位置,方便查找
		exit(1);												//非正常退出程序
	}

	PHead->NEXT = NULL;											//将头结点的指针域挂起

	return PHead;												//返回头指针
}
		
void List_valuation(PList PHead)												//由题意默认开辟五个结点数并赋予每个结点的值
{
   
	PList PTail = NULL;															//用于临时操作的移动指针
	PList PNEW = NULL;															//用于开辟新结点的头指针
	int i, len, val;

	PTail = PHead;																//将头指针的权限交给PTail

	for (i = 1;i <= List_length;i++)											//建立链表
	{
   
		printf("输入第%d个结点的值:", i);										//提醒用户的操作
		scanf_s("%d", &val);													//输入数据

		PNEW = (PList)malloc(sizeof(Sqlist));									//用头指针指向新开辟的结点
		if (NULL == PNEW)														//判断是否开辟成功
		{
   
			printf("用户赋值初始化时,开辟新结点失败,检查程序");				//显示出错位置,方便查找
			exit(1);															//非正常退出程序
		}		

		PNEW->data = val;														//将用户输入的数据赋给新结点
		PNEW->NEXT = NULL;														//使新结点的指针域挂起
		PTail->NEXT = PNEW;														//将新结点的上一个结点指向新结点

		while (PTail->data > PTail->NEXT->data)									//如果用户输入的不是有序链表,则重新输入值
		{
   
			printf("输入的不是有序链表,重新输入!\n");			
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值