2021-11-07 有序链表的插入

【问题描述】设单链表Va中的数据元素递增有序。试编写程序,将数据X插入单链表Va,要求插入后保持该表的有序性。

【输入形式】
【输出形式】
【样例输入】

                  8 

                  25 28  36  78  96  102  980  1000

                   88

【样例输出】25 28 36 78 88 96 102 980  1000
【样例说明】单链表Va表长为8

                      Va:25 28  36  78  96  102  980  1000

                     插入后:25 28 36 78 88 96 102 980  1000

【运行结果如下】

【代码如下】 

#include<stdio.h>
#include<stdlib.h>
#define OVERFLOW -1
typedef int Status;
typedef int ElemType;


/*线性表的单链表存储结构 */ 
typedef struct LNode{
	ElemType       data;	
	struct LNode  *next;
}LNode, *LinkList;

/*初始化链表*/
void InitList_L(LinkList &L,int n)
{
	int i;
	LinkList p;
	LinkList pre;
	L = (LinkList)malloc(sizeof(LNode));
	pre = L;		//当前指针 
	for (i=0; i<n; i++){
		p = (LinkList)malloc(sizeof(LNode));
		scanf("%d",&p->data);	
		pre->next = p; 
		p->next = NULL;
		pre = pre->next;	//当前指针后移	
	}
}

/*插入链表*/
void ListInsert_L(LinkList &L,ElemType x)
{
	LinkList pre,s;
	pre = L;		//当前指针 
	while (pre->next != NULL && pre->next->data <= x){
		pre = pre->next;	//寻找大于x的值,并将当前指针指向该值的前驱 
	}	
	s = (LinkList)malloc(sizeof(LNode));	//生成新结点 	
	s->data = x;
	s->next = pre->next;	//插入L中 
	pre->next = s; 
}

/*输出链表数据*/
void OutputList_L(LinkList &L){
	LinkList pre;
	pre = L;		//当前指针 
	while (pre->next != NULL){
		pre = pre->next;
		printf("%d ",pre->data);
	}
}

int main()
{
	ElemType e; 
	LinkList L;
	int n;
	scanf("%d",&n);
	InitList_L(L,n);	//初始化链表 
	scanf("%d",&e);	
	ListInsert_L(L,e);	//将e插入链表中 
	OutputList_L(L); 	//输出数据 
	return 0;
}

本文章仅供学习和参考!

欢迎交流~

Guess you like

Origin blog.csdn.net/m0_58489132/article/details/121189243