码迷,mamicode.com
首页 > 其他好文 > 详细

数据链表

时间:2017-11-27 23:27:54      阅读:152      评论:0      收藏:0      [点我收藏+]

标签:运行   链表   技术分享   数组   组成   span   def   第一个   idt   

链表的定义:链表是一种物理存储上非连续,数据元素的逻辑顺序通过链表中的指针链接次序,实现的一种线性存储结构。

链表的特点:链表由一系列节点(链表中每一个元素称为节点)组成,节点在运行时动态生成(malloc),每个节点包括两个部分:

      一个是存储数据元素的数据域

      另一个是存储下一个节点的地址的指针域

一.单向链表的操作

 1.链表的结构

  ? 链表由一个个节点构成,每个节点一般采用结构体的形式组织。

    比如:typedef struct stu

       {

         int num;

         float score;

         struct stu *next;

       }STU;

  ? 链表节点分为两个域

    数据域:存放各种实际的数据,如:num、score等

    指针域:存放下一节点的首地址

  ? 链表的一般结构如下:

    技术分享图片

  ? 链表的特点:

    ? 链表作为一个线性存储结构,链表的使用比数组更加灵活(数组都是在静态存储区中定义的数组)。

    ? 构造一个链表时,不一定在程序中指定链表的长度(节点个数),可以在程序的运行过程中动态的生成一个链表。

    ? 链表使用完后可以通过调用free释放节点的方式完成对整个链表空间的释放。

 2.链表的创建

  构建算法:首先申请一个链表节点,然后为该节点成员赋值,最后将链表节点添加到链表中

  ① 添加到链表尾部:顺序创建,新加入的节点放在链表尾部

    ? 当链表为空时,将链表头直接指向待添加节点(该节点成为了链表的第一个节点)

    ? 链表不为空时,首先遍历链表找到链表尾节点,然后将待添加节点挂接到尾节点上

    技术分享图片

  ②添加到链表头部:逆序创建,新加入的节点放在链表头部

    ? 当链表为空时,将链表头直接指向待添加节点(该节点成为了链表的第一个节点)

    ? 链表不为空时,首先将之前的第一个链表节点挂接到新插入的节点上,然后将链表头指向新插入的节点

     技术分享图片

 3.链表的遍历:遍历输出链表所有节点

  ? 得到链表第一个节点的地址,即head的值

  ? 设一个临时指针变量p_mov,指向第一个节点head,即可获取p_mov所指节点的信息

  ? 使p_mov后移一个节点,即可访问下一节点,直到链表的尾节点(注意结尾判断条件)

  技术分享图片

4.链表的查找:按照指定关键字查找节点

  ? 得到链表第一个节点的地址,即head的值

  ? 设一个临时指针变量p_mov,指向第一个节点head,即可获取p_mov所指节点的信息

  ? 比较是否是要查找的节点

  ? 是,则返回相应节点地址,停止查找

  ? 不是,使p_mov后移一个节点,即可访问下一节点,直到链表的尾节点(注意结尾判断条件),最后若找不到返回NULL

  技术分享图片

5.链表的有序插入

 

6.链表的删除

7.链表的释放

 

数据链表

标签:运行   链表   技术分享   数组   组成   span   def   第一个   idt   

原文地址:http://www.cnblogs.com/lemongirl/p/7906357.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!