按值查找 删除 用C语言编写链式存储结构下实现线性表的创建 插入 (按值查找locate(p,x))

本文目录导航:

用C语言编写链式存储结构下实现线性表的创建,插入,删除,按值查找

#include <stdio.h>#include <stdlib.h>typedef struct LNode{int>用C语言实现: (1)用头插法(或尾插法)建立带头结点的单链表;

单链表创建之--头插法创建带头结点的单链表,超详细

单链表常见的创建方法有 头插法 和 尾插法 ,这里记录头插法创建 带头结点的单链表 具体过程: 以C语言为例, 1)首先使用 typedef关键字定义结点数据类型

按值查找 删除 用C语言编写链式存储结构下实现线性表的创建 插入 (按值查找locate(p,x))

4行的 LNode和 * LinkList可有可无,有的话后面定义结点变量和指针变量时更方便,不必须在LNode前面加 struct关键字,可直接这样定义变量,

与上面 typedef关键字定义的单链表数据类型一样的定义方法:

若用这种方法定义链表结点类型,定义结点变量和指针变量时 必须 在LNode前带上 struct 关键字,即:

这两种定义方法效果是一样的,都是定义了包含 1个整型变量的数据域和 1个后继指针域 的单链表结点类型

2)通过函数 头插构建链表,并返回 LinkList类型表头指针变量 L , 算法基本思想:带有头结点的单链表有两类结点, 头结点 和 元素结点 ,头结点通常不存储数据,用 L 表示,元素结点存储数据,用 s 表示

2.1 定义头结点指针变量 L 和元素结点 s

2.2 定义了头结点之后,内存中尚未分配空间,此时头结点并不真实存在,需使用 malloc 关键字分配存储空间后,并使 L 指针指之,才真正创建了 L 头结点。由于此时仅有头结点,无后继结点,需将其指针域置空

这时设置一个整型变量 x ,通过不断输入其值,来初始化各结点数据域 val ,判断 x =9999时为输入结束条件,先任意输入一个 x ,然后通过 while 循环来判断 x值决定是否进入添加结点过程

添加结点过程算法如下: 1, 初始化一个 s 元素结点,先初始化数据域 var ,然后初始化指针域 next

先初始化数据域 var ,然后初始化指针域 next 头插法是这样插入新结点的,新的结点 s 始终在当前的表中第一个元素结点之前 ,也就是 L->next之前插入,数据输入顺序与最终链表结点顺序是相反的, 所以在创建了一个新的元素结点 s 后,需要将其指针域置为 L->next , 如图

4,若输入的值非9999,则再次进入 while 循环,反复执行上述流程,不断插入元素结点扩大单链表长,这里赘述再添加一个元素结点的过程 又初始化了一个元素结点 s ,状态如图:

按照上述算法,头插法 新的元素结点 s 插入时始终插入在当前表中首个元素结点 F 之前,故需要将其后继指针域置为当前表中首个元素结点 F ,即 s->next = L->next ,记住 L->next 始终指向首个元素结点,结果如图:

元素结点 s 被“半插入”到表中后, F 已经不是绝对意义上的首个元素结点了,此时需要更改头结点 L 的后继指针域,将其后继指针域置为被“半插入”表中的新元素结点 s ,这样,新的元素结点 s 正式被插入表中,表长+1,如图

2.3 上述插入过程的函数完整实现:

4)主函数 main()流程 需要初始化一个 head指针变量,来接收 head_Insert() 函数所返回的已创建的链表头结点指针值, 然后将 head 传入 printList() 函数直接调用打印输入单链表数据,由于printList()是从首个结点开始打印,而头结点不存储数据,故传入第一个元素结点

程序最终运行结果如图,可以看到,头插法建立的单链表数据顺序与输入顺序相反:

你可能想看:
« 上一篇
下一篇 »

相关推荐

FreeBasic:强大免费开源的64位basic编译器及应用优势

2025年05月10日

82阅读

脊柱侧弯矫正方法大盘点:运动康复、支具矫正等多种方式

2025年05月09日

87阅读

如何在winForm标题栏去掉标题文字且任务栏图标正常显示

2025年05月09日

86阅读

十一黄金周促销广告词大全,国庆购物狂欢等你来

2025年05月09日

78阅读

关闭快速编辑模式及插入模式,设置控制台指定文字颜色举例

2025年05月09日

63阅读

黄金搭档低糖高钙饮品包装及成分功效全解析,适合人群要知晓

2025年05月09日

91阅读