有序数列中插入一个数(C语言实现链表)
程序员文章站
2024-03-15 20:12:12
...
一个有序数列中插入一个数,用C语言实现链表。
输入
9
2 3 5 8 9 10 18 26 32
6
输出
2 3 5 6 8 9 10 18 26 32
代码
#include <stdio.h>
#include <stdlib.h>
//创建一个结构体用来表示链表的结点类型
struct node {
int data;
struct node *next;
};
int main()
{
struct node *head,*p,*q,*t;
int i,n,a;
scanf("%d",&n);
head = NULL; //头指针为空
for (i = 1; i<=n; i++){//读入n个数
scanf("%d",&a);
//动态申请一个空间,用来存放一个结点,并用临时指针p指向这个结点
p = (struct node *)malloc(sizeof(struct node));
p -> data = a;//将数据存储到当前结点的data域中
p -> next = NULL;//设置当前结点的后继指针指向为空,也就是当前结点的下一个结点为空
if (head == NULL){
head = p;//如果这是第一个结点,则将头指针指向这个结点
}
else {
q->next = p;//如果不是第一个创建的结点,则将上一个结点的后继指针指向当前结点
}
q = p;//指针q也指向当前结点
}
scanf("%d",&a);//读入待插入的数
t = head;//从链表头开始遍历
while (t != NULL){//当没有到达链表尾的时候循环
if (t->next == NULL || t->next->data > a)
//当前结点是最后一个结点或下一个结点的值大于a时插入
{
p = (struct node *)malloc(sizeof(struct node));//申请内存用来存放新增的结点
p->data = a;
p->next = t->next;//新增结点的后继指针指向当前结点的后继指针指向的结点
t->next = p;//当前结点的后继指针指向新增结点
break;
}
t = t->next;//继续遍历下一个结点
}
//输出链表中所有数
t = head;
while (t != NULL){
printf("%d ",t->data);
t = t->next;//继续下一个结点
}
return 0;
}
推荐阅读
-
有序数列中插入一个数(C语言实现链表)
-
c语言 一个数组中只有两个数字是出现一次, 其他所有数字都出现了两次。 找出这两个数字,编程实现。
-
【c语言】一个数组中只有两个数字是出现一次, 其他所有数字都出现了两次。 找出这两个数字,编程实现。
-
C语言:一个数组中只有两个数字是出现一次, 其他所有数字都出现了两次。 找出这两个数字,编程实现。
-
C语言编程实现之一个数组中只有两个数字是出现一次,其他所有数字都出现了两次,找出这两个数字
-
C语言:保持数列有序:有n(约定n<=100)个整数,已经按照从小到大顺序排列好,现在另外给一个整数x,请将该数插入到序列中,并使新的序列仍然有序。
-
(C语言)13个人围成一圈,从第1个人开始顺序报号1,2,3.凡报到3者退出圈子.找出最后留在圈子中的人原来的序号,要求用链表实现
-
c语言实现向有序数组中插入一个数并保持有序
-
C语言编程实现之一个数组中只有两个数字是出现一次,其他所有数字都出现了两次,找出这两个数字
-
c语言实现向有序数组中插入一个数并保持有序