头插法和尾插法创建链表(有无头结点)

头插法和尾插法创建链表(有无头结点)

文章目录

  • 头插法和尾插法创建链表(有无头结点)
    • 1 头插法
      • 1.1头插法建表规则:
      • 1.2 头插法建表代码实现
    • 2 尾插法
      • 2.1 尾插法建表规则:
      • 2.2 尾插法建表代码实现:

1 头插法

1.1头插法建表规则:

  1. 从一个空表开始,读取字符数组a中的字符,生成新节点,将读取的数据存放到新节点的数据域中,然后将新节点插入到当前链表的表头上,直到读完字符数组a的所有元素为止。
  2. 头插法建表简单,但生成的链表中节点的次序和原数组的次序相反,若希望两者的次序一致,可采用尾插法建立

1.2 头插法建表代码实现

/*节点的结构声明
*/
typedef int ElementType;typedef struct Node {ElementType data;struct Node *Next;
} *List;/* 建立链表 - 头插法 - 有头节点 +------+	     +------+	 +------+	 +------+| head |   =>    |node_1| -> |node_2| -> |node_3| -> NULL+------+	     +------+	 +------+	 +------+\			  /+------+|   p  |+------+*/   思想:将新结点插入到表头之后,最先得到的是尾结点,将右端固定,不断向左延伸
List HeadCreate(void)
{ElementType x; // 保存 Node 中的 data 数据List p; // 临时指针,用于保存声明的节点List head; // 整个链表的头结点;head = (List)malloc(sizeof(struct Node));head->Next = NULL;head->data = 0; // 头节点的 data 域用于保存链表的长度scanf("%d", &x);while (x != -1) { // 当 x 等于 -1 的时候,停止创建链表p = (List)malloc(sizeof(struct Node));p->data = x;p->Next = head->Next;head->Next = p;head->data++; // 链表的长度加 1scanf("%d", &x); // 读取下一个节点的数据}return head;
}/*建立链表 - 头插法 - 没有头节点+------+	  +------+	   +------+	   +------+| head | -> |node_1| ->  |node_2| -> |node_3| -> NULL^  	  +------+	  +------+	   +------+	   +------+|+------+|  p   |+------+*/
List HeadCreate(void)
{ElementType x; // 保存 Node 中的 data 数据List p;List head;head = NULL;scanf("%d", &x);while (x != -1) {p = (List)malloc(sizeof(struct Node));p->data = x;if (head == NULL) {	// 若第一次创建节点,则将该点设置为头节点head = p;p->Next = NULL;} else { // 若不是第一次创建节点,则直接将新节点接到链表头p->Next = head;head = p;}scanf("%d", &x);}return head;
}

2 尾插法

2.1 尾插法建表规则:

该算法是将新节点插到当前链表的表尾上,为此必须增加一个尾指针rear,使其始终指向当前链表的尾节点

2.2 尾插法建表代码实现:

/* 创建链表 - 尾插法 - 有头节点+------+	+------+	+------+| head | -> |node_1| -> |node_2|   ____+------+	+------+	+------+	  |v+------+ 	  +------+| rear |  ->  |   p  |+------+	  +------+*/  思想:新增一个尾指针rear,将新结点插入到表尾,尾指针始终指向head便于建表
List TailCreate(void)
{ElementType x; // 保存 Node 中的 data 数据List p;List head; // 头结点List rear; // 因为尾插法需要在尾部插入,所以要有个指针来保存尾的位置head = (List)malloc(sizeof(struct Node));head->Next = NULL;head = rear; // 链表为空,头和尾指向同一个位置scanf("%d", &x);while (x != -1) {p = (List)malloc(sizeof(struct Node));p->data = x;rear->Next = p;rear = p;}rear->Next = NULL; // 链表建立结束后将最后一个节点指向 NULLreturn head;
}/* 创建链表 - 尾插法 - 没有头节点 +------+	+------+	+------+|node_1| -> |node_2| -> |node_3| 	____+------+	+------+	+------+	   |v+------+	+------+| rear | ->	|   p  |+------+	+------+*/
List TailCreate(void)
{ElementType  x;List p;List head;List rear;head = NULL;rear = NULL;scanf(%d, &x);while (x != -1) {p = (List)malloc(sizeof(struct Node));p->data = x;if (head == NULL) { // 创建链表的第一个节点head = p;rear = p;p->Next = NULL;} else {rear->Next = p;rear = p;}scanf("%d", &x);}rear->Next = NULL; // 链表建立结束后将最后一个节点指向 NULL(尾插法中不要遗漏)return head;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/482293.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

量子计算机首次成功模拟化学反应

SHUTTERSTOCK来源:IEEE电气电子工程师━━━━利用谷歌的Sycamore量子处理器,科学家们进行了迄今为止涉及量子计算机的最大规模的化学模拟。他们采用了一种新技术,可能有助于抵抗量子电路中常见的噪声。量子计算机理论上可以实现量子优势&…

单链表的按位置插入和删除

单链表的插入和删除 文章目录单链表的插入和删除1 单链表插入2 单链表删除3 代码实现1 单链表插入 要想将结点s插入到ai与ai1之间,不需要移动数据元素,只需要在ai与ai1之间插入一个新的结点,也就是我们要插入的结点s。关键就是要修改结点p的…

DeepMind最新研究:如何将「大语言模型」 训练到最优?

来源:AI科技评论 作者:维克多Transformer的提出距离我们已经有5年的时间,随着模型规模的不断增长,性能提升也逐渐出现边际效益递减的情况。如何训练出最优性能的大模型?最近,DeepMind做了一项调查&#xf…

Typora用法教程小结

Typora用法小结 文章目录Typora用法小结1 Typora简介2 Markdown介绍3 Typora常用快捷键Typora快捷键整合换行符引用文字无序列表有序列表任务列表代码块数学表达式插入表格脚注分割线目录(TOC)跨度元素链接内部链接参考链接网址图片斜体加粗加粗斜体代码…

给计算机处理器做手术来研究大脑

来源:混沌巡洋舰在人类对大脑认识的历史上,曾经使用过很多隐喻来描述脑,比如齿轮机械、电话交换机、计算机等等。目前,“脑就像一台计算机”这个隐喻仍然占据着主导地位,尽管人们对于这个隐喻的贴切程度的看法存在分歧…

为什么百度查到的ip地址和ipconfig查到的不同;详解公网Ip和私网ip; 网络分类ABC类;

文章目录1.百度查到的ip和ipconfig查到的不同1.1引出问题1.2不一样的原因2.IP地址分类2.1IP类别2.1 Public IP和Private IP3.总结3.1整理上网流程3.2遗留问题1.百度查到的ip和ipconfig查到的不同 IP可以分为Public IP 和 Private IP,出现这种规划的原因在于IPv4所能表示的IP太少…

国科金:共融机器人基础理论与关键技术研究重大研究计划

来源:学术头条国家自然科学基金委员会现发布共融机器人基础理论与关键技术研究重大研究计划 2022 年度项目指南,请申请人及依托单位按项目指南中所述的要求和注意事项申请。 国家自然科学基金委员会 2022 年 4 月 2 日一、科学目标本重大研究计划瞄准国…

停止追赶最新的 RPA 趋势

来源:AI前线作者:Anupam Krishnamurthy译者:Phoenix策划:蔡芳芳本文最初发布于 anupam.de 博客,由 InfoQ 中文站翻译并分享。我做了 4 年的 RPA 开发者——2017 至 2021 年。在 2019 年底,我做了一个重要的…

请求转发与重定向的区别和执行流程

请求转发与重定向的区别和执行流程 文章目录请求转发与重定向的区别和执行流程1 请求转发与重定向区别2 现实生活的例子2.1 重定向2.2 请求转发3 重定向-流程图、代码、结果3.1 流程图3.2 代码BoyServlet3.3 代码GirlServlet3.4 web.xml文件3.5 结果4 请求转发-流程图、代码、结…

牛津大学最新调研:AI面临基准危机,NLP集中“攻关”推理测试

来源:AI科技评论作者:维克多人工智能(AI)基准为模型提供了衡量和比较的路径,超越基准,达到SOTA,经常成为顶会论文的标配。同时,有些基准确实推动了AI的发展,例如ImageNet 基准测试对…

Postman使用小教程--基础入门篇

文章目录1 Postman介绍2 postman基础功能介绍2.1 postman基础页面2.2 postman基础页面介绍2.2 接口测试流程和原理2.3 请求区域介绍3 导出和导入接口集3.1 导出3.2 导入4 设置环境变量4.1 环境变量优先级4.2 新建环境变量4.3 将返回值的某个数据设置为环境变量4.4 将其他的常用…

W玻色子质量实验与理论矛盾,或是十年来最重要的进展

来源:科学大院就在昨天,美国费米实验室的CDF项目在《Science》上发了篇文章,W玻色子质量的测量结果和标准模型预测的结果有明显差距。消息一出,粒子物理界炸了窝。因为这或许是十年来最重要的粒子物理进展!这个结果意味…

Git理论教程

文章目录1 什么是Git1.1 什么是版本控制系统1.2 为什么需要版本控制系统1.3 常见的版本控制工具1.4 版本控制分类1.4.1 集中版本控制 SVN1.4.2 分布式版本控制 Git1.4.3 Git与SVN的主要区别2 Git环境配置3 Git基本理论3.1 Git三个区域3.2 Git工作流程3.3 Git项目搭建3.3.1 本地…

Science | 再创生命奇迹!日本科学家造出了不需要“父亲”的大鼠及小鼠

来源:【iNature】iNature从多能干细胞 (PSC) 体外生成生殖细胞可以对未来的生殖医学和动物育种产生重大影响。十年前,在小鼠中建立了体外配子发生。然而,在任何其他物种中尚未实现诱导原始生殖细胞样细胞(PGCLCs)产生配…

总结Vue中index.html、main.js、App.vue、index.js之间关系以及Vue项目加载流程

总结Vue中index.html、main.js、App.vue、index.js之间关系以及Vue项目加载流程 文章目录总结Vue中index.html、main.js、App.vue、index.js之间关系以及Vue项目加载流程1 vue中index.html、main.js、App.vue、index.js关系简介1.1 项目的运行入口index.html1.2 入口文件main.j…

ACM 杰出会员姬水旺:量子化学和物理的深度学习

整理:汪浩文校对:维克多量子技术和人工智能都是当前最先进的科学技术,前者被寄希望于拥有超强的计算能力,后者已经在各行各业“大杀四方”。当两者相遇会碰撞出什么样的火花?人工智能又能在哪些方面助力量子技术&#…

1 操作系统第一章 操作系统概念、功能、四大特征、操作系统发展与分类

文章目录1.1 操作系统概念1.2 操作系统功能1.3 操作系统四大特征1.3.1 并发1.3.2 共享1.3.3 并发性和共享区别及对应关系:1.3.4 虚拟1.3.5 异步1.4 操作系统的发展与分类1.4.1 手工操作阶段1.4.2 批处理阶段——单道批处理系统1.4.3 批处理阶段——多道批处理系统1.…

不能头脑一热,就布局颠覆性技术、上马未来产业

来源:财经国家周刊作者:曹方 何颖 姬少宇 张鹏近年来,布局、规划及培育人工智能与机器人、先进材料、新能源、生命科学、云计算和量子计算、混合现实等颠覆性技术、未来产业,成为不少地方政府推动当地产业结构调整、助力经济高质量…

2 操作系统第一章 操作系统体系结构、中断和异常、系统调用

文章目录1.1 指令概念及其分类1.2 操作系统体系结构:1.2.1操作系统内核概念1.3 中断和异常1.3.1 中断的诞生1.3.2 中断分类1.3.3 外中断的处理过程1.3.4 中断小结1.4 系统调用1.4.1 系统调用介绍1.4.2 系统调用功能1.4.3 系统调用小结1.1 指令概念及其分类 指令就是…

百年诺奖的那些争议与放弃

来源:数学与通识自1901年首届诺贝尔奖颁发以来,它已成为人们心中最崇高、最向往的奖项之一。可能没有人想要去拒绝它,因为它不仅仅是奖金的问题,还是莫大的荣誉和骄傲,其追求真理、造福社会、为人类文明创造价值的初心…