【问题描述】设单链表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;
}
本文章仅供学习和参考!
欢迎交流~