在一个有序(按非递减顺序)的链表中插入一个元素为x的结点,使插入后的链表仍然有序(链表数据域为整型数,初始时输入6个元素)。

20 篇文章 5 订阅
在一个有序(按非递减顺序)的链表中插入一个元素为x的结点,使插入后的链表仍然有序(链表数据域为整型数,初始时输入6个元素)。

程序运行示例如下:
输入数组6个元素的值。
12 23 34 45 56 67
此链表各个结点的数据域为:12 23 34 45 56 67
输入要插入的数据x:36
插入后链表各个结点的数据域为:12 23 34 36 45 56 67

链表插入图示:

在这里插入图片描述

代码实现:

#include<stdio.h>
#include<stdlib.h>
typedef struct link
{
	int num;
	struct link* next;
};
struct link* Input(struct link* head)    //函数功能--输入六个数
{
	int i = 0;
	int data;
	for (i = 0; i < 6; i++)
	{
		scanf("%d", &data);
		//创建一个新节点
		struct link* p = NULL, * last = head;
		p = (struct link*)malloc(sizeof(struct link));
		if (p)
		    {
				p->num = data;
				p->next = NULL;
			}
		if (head == NULL)   //若原链表为空,则新建节点为头节点
			head = p;
		else
		{
			//找到上一个节点
			while (last->next)
			{
				last = last->next;
			}
			//将新节点接入链表末尾
			last->next = p;
		}
	}
	return head;
}
void Dispaly(const struct link* head)   //函数功能--打印链表
{ 
	struct link* p = NULL;
	p = head;
	while (p->next != NULL)
	{
		printf("%d  ", p->num);
		p = p->next;
	} 
	printf("%d\n", p->num); 
}
void Insert(struct linkl* head, int n)
{
	struct link* p = head;        
	struct link* new = NULL;   //用输入的数创造一个新节点
	new = (struct link*)malloc(sizeof(struct link));
	while (p->next->num < n) //根据大小寻找插入位置
	{
		p = p->next;
	}
	//找到插入点后
	new->next = p->next;//新的结点指向插入点的下一个结点
	new->num = n;  //新结点存放要插入的数
	p->next = new;   //插入点的上一个结点指向新的结点
}
int main()
{
	printf("输入数组6个元素的值。\n");
	struct link* head = NULL;
	head = Input(head);
	printf("此链表各个结点的数据域为:");
	Dispaly(head);
	printf("输入要插入的数据x:");
	int n;
	scanf("%d", &n);
	Insert(head, n);
	printf("插入后链表各个结点的数据域为:");
	Dispaly(head);
}
  • 5
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值