当前位置: 首页 > news >正文

软考程序员2021年C语言链表案例题解答

设有头指针为 head 且不含有头结点的单链表,用来存储一个非递减有序的元素序列,如图4-1所示。

 函数insertList(LinkList head, ElemType x)的功能是为元素x创建结点并将其插入到头指针为 head且不含头结点的单链表中,并保持表中元素非递减有序排列的特点,最后返回头指针。

【C代码】

typedef struct LNode * PtrToNode;typedef int ElemType;struct LNode {ElemType elem;/*结点数据*/PtrToNode next;/*指向后继结点的指针*/}typedef PtrToNode LinkList;LinkList insertList (LinkList head, ElemTy pe x){PtrToNode s;s =(PtrToNode ) malloc((1));if(!s) return head;//结点创建失败s->elem= x;
s->next =NULL;
if(! head){ //插入x之前单链表为空
(2)
return head;
}
if(x<head->elem){
//x小于单链表中的最小元素
(3)_;
head=s;
return head;
}
PtrToNode pre, p;
pre = head; p = head->next;while (p &&x>p->elem){
(4);
(5):
}
s->next =p;
表中
//将新结点插入单链
pre->next= (6) ;
return head;}

参考答案:

(1)sizeof(struct LNode)

(2) head=s

(3) s->next = head 或(*s).next = head (4)pre=p

(5)p=p->next

(6)s

 

所属知识点:

C程序设计>C程序设计

 

解析:

本题考查C程序中的指针应用及运算。若单链表(head为头指针)不含头结点,则表为空时头指针用空指针表示。

根据结点类型的定义,若指针 p指向表中某结点,则p->elem表示结点中的数据域(p->elem是一个变量),p->next表示结点中的指针域,其实质是一个指针变量。

空(1)所在语句申请新元素的结点空间,每个结点所需的内存空间大小在运行时由系统分配,由于需考虑对齐因素,同时考虑可移植性,应该用sizeof进行计算而不是由程序员直接指定,因此空(1)处应填入"sizeof (struct LNode)"。

当单链表为空时插入新结点s,就需要修改头指针的值,因此应将头指针head设置为指向新结点,即空(2)处应填入"head = s"。若单链表不为空且新插入的结点要放在第一个结点之前,如图4-2所示,则需将新结点链接到链表中,即空(3)处应填入"s->next = head"(将s所指结点链接到链表中),然后更新头指针head 的指向。

下面代码的功能是在链表中查找待插入结点的位置,其中p所指结点称为当前结点,将其与新插入元素进行比较,循环条件为"p&& x>p->elem"表示p所指结点存在(即p是下面代码的功能是在链表中查找待插入结点的位置,其中p所指结点称为当前结点,将其与新插入元素进行比较,循环条件为"p&& x>p->elem"表示p所指结点存在(即p是非空指针),并且x大于当前元素,那么就要继续查找。pre的作用是记下p所指结点的前驱结点,一旦找到插入位置,此时x<=p->el em或p所指结点不存在,都需要修改pre的指针域,以将新结点接入链表。在查找过程中通过运算"p= p->next"修改变量p,使其能实现对链表中元素的遍历。
在循环中修改p之前,应该更新pre的值,使得两者保持前驱和后继关系,因此空(4)应填入"pre =p",空(5)应填入"p-p->nex t"。
找到新结点的插入位置后,需要修改指针将新结点接入链表中,操作"s->next=p"已经实现了第一步操作,如图4-3所示。显然在将x接入ej之后,需要的操作为"pre->next =s;",即空(6)处应该填入"s"。


 

 

http://www.dtcms.com/a/614350.html

相关文章:

  • nfs练习作业
  • 红黑树分析 1
  • Linux:监控命令
  • 官方网站开发用什么语言厦门建网站的公司
  • 做网站设计需要哪些软件兖州做网站
  • 马来西亚医疗旅游理事会举办“2025马来西亚深圳医疗旅游周“发力中国医疗旅游市场
  • wordpress 微信授权做网站建设优化的公司排名
  • 网站制作招聘音乐网站可做哪些内容
  • 一块中国好屏,和智能终端共舞
  • 240. Java 集合 - 使用集合工厂方法创建和处理数据
  • 南京app定制台州商品关键词优化
  • 代码生成工具Amazon CodeWhisperer介绍
  • 做视频网站的流程注册公司流程需要多久
  • 域名与空间购买后怎么做网站一般网站海报做一张多久
  • 网站建设合同规定橘子建站是什么
  • LangChain框架入门:全方位解析记忆组件
  • Python如何写一个可迭代对象
  • 命名规范snake_case
  • 即插即用涨点系列 (八):AMDNet 详解!AAAI 2025 SOTA,MLP 融合多尺度分解(MDM)与 AMS 的涨点新范式。
  • riscv64开启llama.cpp的RVV
  • colima 扩容
  • 第十篇 扫雷游戏 下(初版·思路)
  • 哪些网站可以做外链室内设计培训机构排行
  • 个人网站设计说明photoshop网页制作视频教程
  • 2025年10月总结
  • 《Agent 应用开发与落地全景》笔记
  • 字节码(Bytecode)深度解析:跨平台运行的魔法基石
  • 从零实现 REINFORCE/GRPO —— 大模型推理强化微调实践
  • 通州网站建设站开发评价效果图网站密码破解
  • 社区互助|社区​交易|基于springboot+vue的社区​互助交易系统(源码+数据库+文档)