下列给定程序中已建立一个带头结点的单向链表,链表中各节点按节点数据域中的数据递增有序链接。函数fun的功能是:把形参x的值放入一个新节点并插入列表中使插入后各节点数据域中的数据仍保持递增有序。 
请在程序的下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。

结合例子逐步分析可能比较容易理解。本题目我们只需要关注fun这个函数

试题程序。

#include<stdio.h>
#include<stdlib.h>
#define N  8
typedef struct list   //定义链表结构体
{
int data;
struct list *next;

} SLIST;

void fun(SLIST *h, int x)      //插入新结点并保持递增顺序
{

SLIST *p, *q, *s;     //s为新插入的结点,p、q两个结点分别用来记录当前链表结点位置的前一个结点和后一个结点

s = (SLIST *)malloc(sizeof(SLIST));
s->data = 1 ;         //此处填:x,待插入的值
q = h;
p = h->next;
while (p != NULL && x > p->data)
{
q = 2 ;        //此处填:p或q->next,意思是如果p不为空并且待插入的值x大于p位置的值,因为要满足递增顺序,
p = p->next;    //就需要把p和q往后移动
}
s->next = p;
/********** found **********/
q->next = 3 ;        //此处填:s

}

SLIST *crealist(int *a)    //创建链表
{
SLIST *h, *p, *q; int i;
h = p = (SLIST *)malloc(sizeof(SLIST));
for (i = 0; i < N; i++)
{
q = (SLIST *)malloc(sizeof(SLIST));
q->data = a[i]; p->next = q; p = q;
}
p->next = 0;
return h;

}

void outlist(SLIST *h)  //输出链表
{
SLIST *p;
p = h->next;
if (p == NULL)
printf("\nThe list is NULL!\n");
else
{
printf("\nHead");
do
{
printf("->%d", p->data);
p = p->next;
}
while (p != NULL);
printf("NULL");
printf("->End\n");
}

}

main( )
{
SLIST *head; int x;
int a[N] = (11, 12, 15, 18, 19, 22, 25, 29);
head = creatlist(a);
printf("\nThe list before inserting:\n");
oulist(head);
printf("\nEnter a number: "); scanf("%d", &x);
fun(head, x);
printf("\nThe list after intserting:\n");
outlist(head);
}

在一个递增有序链表中插入新结点并保持链表递增顺序不变相关推荐

  1. Coding Interview Guide -- 向有序的环形单链表中插入新节点

    [题目] 一个环形单链表从头节点head开始不降序,同时由最后的节点指回头节点.给定这样一个环形单链表的头节点head和一个整数num,请生成节点值为num的新节点,并插入到这个环形链表中,保证调整后 ...

  2. 向有环的环形链表中插入新节点

    题目: 一个环形单链表从头节点开始不降序,同时由最后的节点指向头节点.给定这样一个环形单链表的头节点head和一个整数num,请生成节点值为num的新节点,并插入到这个环形链表中,保证调整后的链表依然 ...

  3. 链表题目---4 删除链表中重复的结点 和 判断链表是否为回文链表

    删除链表中重复的结点 /* struct ListNode {int val;struct ListNode *next;ListNode(int x) :val(x), next(NULL) {} ...

  4. 链表问题18——向有序的环形单链表中插入新节点

    题目 一个环形链表从头节点开始的顺序为不降序的顺序,也就是如1->2->2->2->3->4这样的链表叫做不降序,同时由最后的节点指回头节点.给定这个环形单链表的头节点h ...

  5. 【 C 】在双链表中插入一个新值的简明程序

    上两篇博文讲了如何在单链表中插入一个值: [ C ]在单链表中插入一个新节点的尝试(一) [ C ]在单链表中插入一个新节点的尝试(二) 这篇博文讲解如何在双链表中插入一个值. 单链表的替代方案就是双 ...

  6. 【 C 】在单链表中插入一个新节点的尝试(二)

    在上篇博文中:[ C ]在单链表中插入一个新节点的尝试(一),我们最后提到了如果向单链表的开头(起始位置)插入一个节点,上篇博文中给出的程序显然完成不了这任务. 这篇博文中,我们将解决这个问题,给出一 ...

  7. 数据结构例16.试设计一个算法, 使得在一个有序的单链表中插入一个元素后仍然有序。

    /* 16.试设计一个算法, 使得在一个有序的单链表中插入一个元素后仍然有序. */ # include <iostream> # include <stdlib.h> # i ...

  8. 【 C 】在单链表中插入一个新节点的尝试(一)

    根据<C和指针>中讲解链表的知识,记录最终写一个在单链表中插入一个新节点的函数的过程,这个分析过程十分的有趣,准备了两篇博文,用于记录这个过程. 链表是以结构体和指针为基础的,所以结构体和 ...

  9. 考研数据结构之查找(9.8)——练习题之编写一个函数利用二分查找算法在一个有序表中插入关键字k并保持表的有序性(C表示)

    题目 编写一个函数,利用二分查找算法在一个有序表中插入一个关键字k,并保持表的有序性. 分析 先在有序表中利用二分查找算法查找关键字值等于或小于k的结点,m指向正好等于k的结点或l指向关键字正好大于k ...

最新文章

  1. Oracle数据库迁移
  2. 第二学期-第一次作业
  3. java语言程式设计——异常处理语法 3
  4. FTP服务器配置与管理(2) 创建FTP站点
  5. PSPNet——Pyramid Scene Parsing Network
  6. 如何用excel做正交分析_excel表格分析正交数据处理-excel中怎么对正交试验进行F值检验...
  7. 高等学校计算机一级考试题库,全国计算机一级考试题库「附答案」
  8. 车联网信息服务数据——采集合规性——行业标准解读
  9. 2022年 27 个最佳 UX/UI 设计灵感网站
  10. linux 指令安装显卡驱动,Linux 16.04 LTS 安装显卡驱动
  11. 组合排列中重复数问题
  12. 客户贷款逾期预测[2]-svm和决策树模型
  13. Hashing(哈希)
  14. 英语学习真的需要思考
  15. 本地——云服务器文件传输
  16. python爬取百部电影数据,我分析出了一个残酷的真相
  17. TryHackMe学习笔记-Windows PrivEsc Arena
  18. MoveIt-tutorial笔记
  19. cv.resize()详解
  20. 讲义六 之 docker 搭建测试环境以及部署项目包 created by 爱软测_bill

热门文章

  1. 一起谈.NET技术,Microsoft NLayerApp案例理论与实践 - 多层架构与应用系统设计原则...
  2. Oracle 9i初始化参数文件
  3. 美女在中国移动家属院上厕所
  4. 16、document的_source元数据以及定制返回结果解析
  5. 【写作技巧】毕业设计的附录放在论文的哪个位置?
  6. 【毕业答辩】毕业设计答辩现场技巧
  7. 【毕业设计】JAVA医药管理系统设计(论文+源代码)
  8. 图像分割matlab阈值自动计算,图像分割的阈值算法matlab实现.doc
  9. java用 拼接字符串的原理_Java String 拼接字符串原理详解
  10. python3.8自带matlop和numpy吗_python3.8自带matlop和numpy吗_python之matloplib可视化