带头结点的单链表的创建_第1页
带头结点的单链表的创建_第2页
带头结点的单链表的创建_第3页
带头结点的单链表的创建_第4页
带头结点的单链表的创建_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

带头结点的单链表的创建 求表长 输出 插入 删除 查找 逆置带头结点的单链表的创建 求表长 输出 插入 删除 查找 逆置 说明在 VC6 0 中不能把本代码保存为 c 进行编译 应保存为 cpp 原因可能是里边注释是 c 的风格 在 codeblocks 中不存在这个问题 include include define DataType int define FLAG 1 typedef struct Node DataType data struct Node next Lnode LinkList LinkList Creat LinkList LinkList L Lnode s r int x printf 建立有表头结点的单链表 以 d 作为创建链表完成的标志 n FLAG L r s NULL L Lnode malloc sizeof Lnode if L printf 表头结点开辟失败 n exit 1 L next NULL scanf d while x FLAG s Lnode malloc sizeof Lnode if s printf 结点开辟失败 n exit 1 s data x if NULL L next 第一个结点的处理 L next s else r next s r s scanf d if r NULL 对于非空表 最后结点的指针域放空指针 r next NULL return L 有头结点的链表 求表长算法 int Length LinkList LinkList L Lnode p int j p L j 0 while p next p p next j return j int Print LinkList LinkList L printf 输出 n Lnode s s L while s next NULL s s next printf 3d s data printf n return 0 逆置算法思路 依次取原链表中每个结点 将其作为第一个结点插入到新的 链表中去 指针 p 用来指向原表中当前结点 p 为空时结束 void Reverse LinkList LinkList H 单链表的逆置 Lnode p q p H next p 指向第一个结点 H next NULL 将原链表置为空表 while p q p p p next q next H next 将当前节点插入到头结点后面 H next q return 按序号查找 Lnode Get LinkList LinkList L int i Lnode p int j 0 p L while p next NULL j if j i return p else return NULL 按值查找 Lnode Locate LinkList LinkList L DataType x Lnode p p L next while p NULL return p 插入操作 分为 前插接点 后插结点 下面的算法实现在链表的第 i 个位置上插入一个数值 后插结点 设 p 指向单链表中某结点 s 指向待插入值为 x 的新结点 将 s 插入到 p 之后 操作 s next p next p next s 前插接点 遇红茶结点不同德是 这种算法要先找到前驱结点 q 然后完成在 q 后插入 s 操作 q L while q next p q p next s next q next q next s int Insert LinkList LinkList L int i DataType x Lnode p s p Get LinkList L i 1 if NULL p printf 前驱结点不存在 不能插入 n return 0 else s Lnode malloc sizeof Lnode s data x s next p next p next s return 1 按序号删除结点 int Del LinkList LinkList L int i Lnode p s p Get LinkList L i 1 if NULL p printf 你要删除的结点前驱结点不存在 n return 1 else if NULL p next printf 第 d 个结点不存在 n i return 0 else s p next p next s next free s return 1 按值删除结点 为了使算法清晰 只删除找到的第一个结点 int Remove LinkList LinkList L DataType x Lnode p s p Locate LinkList L x 找到要删除的结点 if NULL p printf 你要删除的结点不存在 n return 1 s L while s next p s s next 找到要删除结点的前驱 s next p next free p return 1 int main Lnode L p int n m k L Creat LinkList Print LinkList L printf 表长 头结点不计算在内 d n Length LinkList L printf 按序号查找 请输入你要查找的结点的序号 n scanf d p Get LinkList L n if NULL p printf 未找到 n else printf 找到了 该结点存放的数据 d n p data printf 按值查找 请输入你要查找的数据 n scanf d p Locate LinkList L n if NULL p printf 未找到 n else printf 找到了 n printf 插入结点 请输入你要插入的位置和数值 n scanf d d m Insert LinkList L k n if 0 m printf 前驱结点不存在不能插入 n else if 1 m printf 插入成功 n Print LinkList L printf 表长 头结点不计算在内 d n Length LinkList L printf 按序号删除 请输入你要删除的结点的序号 n scanf d m Del LinkList L n if 1 m printf 你要删除的结点无前驱结点 n else if 0 m printf 你要删除的结点不存在 n else if 1 m printf 删除成功 n Print LinkList L printf 表长 头结点不计算在内 d n Length LinkList L printf 按值删除 请输入你要删除的数据 n scanf d m Remove LinkList L n if 1 m printf 你要删除的结点无前驱结点 n else if 0 m printf 你要

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论