目录

1.链式存储结构定义

2.单链表

3.头指针与头结点

4.单链表存储结构

5.单链表的读取

6.单链表的插入

7.单链表的删除


1.链式存储结构定义

线性表的链式存储结构是用一组任意的存储单元存储线性表的数据元素,这组存储单元可以存在内存中未被占用的任意位置,不需要像顺序存储结构那样只能存在指定的位置。而比起顺序存储每个数据元素只需要存储一个位置就可以了,在链式存储结构中,除了要存储数据元素信息外,还要存储它的后继元素的存储地址(指针),也就是说,除了存储其本身的信息外,还需要存储一个指示其直接后继的存储位置的信息。

2.单链表

我们把存储数据元素信息的域称为数据域,把存储直接后继位置的域称为指针域。指针域中存储的信息称为存储映像或称为结点(Node)。由n个结点连接成一个链表,即为线性表(a1,a2,...,an)的链式存储结构。因为此链表的每一个结点中值包含一个指针域,所以叫做单链表.对于线性表来说,都有开头和结尾,链表也不例外,我们把链表中的每一个结点的存储位置叫做头指针,最后一个结点指针为空(Null)。

3.头指针与头结点

因为头结点的数据域不存储任何信息,所以会经常被人们混淆,下面我们来说一下头结点与头指针的异同。

  • 头指针

头指针是指链表指向第一个结点的指针,若链表有头指针,则是指向头结点的指针。头指针具有标识作用,我们常用头指针冠以链表的名字(即指针标量的名字)。无论链表是否为空,头指针均不为空。头指针是链表的必要元素。

  • 头结点 

头结点是为了操作的统一和方便而设立的,放在第一个元素的结点之前,其数据域一般无意义(但也可以用来存放链表的长度)。有了头结点,对在第一元素结点之前插入结点和删除第一节点等操作与对其他结点的操作就一致了。另外头结点不一定是链表的必须要素。

4.单链表存储结构

我们可以在C语言中用结构指针来描述单链表,具体代码如下:

typedef struct Node
{ElemType data;        //数据域struct Node* Next;    //指针域
}Node;
typedef struct Node* Linklist;

从上面我们可以看到结点由存放数据元素的数据域和存放后继结点地址的指针域组成。

假设p是指向线性表第i个元素的指针,则该结点ai的数据域我们可以用p->data来表示,结点ai的指针域可以用p->next来表示,p->next的值是一个指针。

5.单链表的读取

获得单链表上第i个数据的算法思路:首先声明一个结点p指向链表第一个结点,初始化j从1开始,然后当j<i时就遍历链表,让p的指针向后移动,不断指向下一个结点 j+1,若到链表末尾p为空,则说明第i个元素不存在,否则查找成功,返回结点p的数据,也就是说从头开始找,直到第i个元素或者找完链表为止。具体代码如下:

Status GetElem(LinkList,int i,ElemType *e)
{int j;LinkList p;p = L->next;j = 1;while(p && j<i){p = p->next;++j;}if(!p||j>i){return ERROR;}*e = p->data;return OK;
}

6.单链表的插入

单链表第i个数据插入结点的算法思路:首先声明一个结点指向链表头结点,初始化j从1开始;当j<i时,就遍历链表,让p的指针向后移动,不断指向下一个结点,j累加1;若到链表末尾p为空,则说明第i个元素不存在,否则查找成功,在系统总生成一个空结点s;然后将数据元素赋值给s->data。具体代码如下:

Status ListInsert(LinkList *L,int i,ElemType e)
{int j;LinkList p;p = *L;j = 1;while(p&&j<i)        //寻找第i个结点{p = p->next;j++;}if(!p||j>i){return ERROR;}s = (LinkList)malloc(sizeof(Node));s->data = e;s->next = p->next;p->next = s;return OK;
}

7.单链表的删除

单链表第i个数据删除结点的算法思路:首先声明结点p指向链表第一个结点,初始化j=1;当j<i时,就遍历链表,让p的指针向后移动,不断指向下一个结点,j累加1;如果到链表末尾p为空,则说明第i个元素不存在,否则查找成功,将欲删除的结点p->next赋值给q;接着单链表的删除标准语句p->next = q->next;再将q结点中的数据赋值给e,作为返回,最后释放q结点。具体代码如下:

Status ListDelete(LinkList *L,int i,Elemtype *e)
{int j;LinkLIst p,q;p = *L;j = 1;while(p->next && j<i){p = p->next;++j;}if(!(p->next) || j>i){return ERROR;}q = p->next;p->next = q-next;*e = q-next;free(q);return OK;
}

数据结构——线性表链式存储结构相关推荐

  1. 《大话数据结构》----第三章---线性表链式存储结构

    目录 一.为啥要单独说线性表的链式存储结构? 二.这些链式存储结构分别是什么样的? 2.1 单链结构是怎么样的? 2.2 静态链表又是怎么定义的呢? 2.3循环链表是如何定义的? 2.4双向链表是为什 ...

  2. python 单链表节点怎么快速定义_线性表链式存储结构之单链表

    线性表的链式存储结构的特点就是用一组任意的存储单元存储线性表的数据元素,这组存储单元可以在内存中未被占用的任意位置.比起顺序存储结构每个元素只需要存储一个位置就可以了.现在链式存储结构中,除了要存储数 ...

  3. Linux从入门到精通系列之线性表链式存储结构-单链表原理解析

    前言 线性表的链式存储结构的特点就是用一组任意的存储单元存储线性表的数据元素,这组存储单元可以在内存中未被占用的任意位置. 比起顺序存储结构每个元素只需要存储一个位置就可以了.现在链式存储结构中,除了 ...

  4. 数据结构--线性表链式存储

    系列文章目录 第二话 数据结构之线性表 文章目录 一.线性表的基本操作步骤 1.存储结构 2.基本操作 3.实现运用 二.线性表的插入 三.线性表的删除 四.总结 前言 为了克服顺序表的缺点,可以采用 ...

  5. [一] 详细讲解: 线性表链式存储结构 中的 单链表; (数据结构和算法)

    一.定义 二.单链表

  6. 数据结构--线性表链式存储(链表)--单链表

    定义: 单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素. 链表中的数据是以节点来表示的,每个结点的构成:元素( 数据元素的映象) + 指针(指示后继元素存储位置),元素 ...

  7. 数据结构(一)线性表链式存储实现

    (一)前提 在前面的线性表顺序存储结构,最大的缺点是插入和删除需要移动大量的元素,需要耗费较多的时间.原因:在相邻两个元素的存储位置也具有邻居关系,他们在内存中的位置是紧挨着的,中间没有间隙,当然无法 ...

  8. c语言线性表链路存储结构运用,哈尔滨工业大学2020年考研854计算机基础考试大纲...

    考研大纲是2020考研学生复习的重要参考资料,它指出了所考科目的大致考试范围,也是考研命题的重要参考依据.2020考研大纲已经陆续公布,包括公共课考试大纲和专业课统考科目考试大纲,而自命题科目考试大纲 ...

  9. 大话数据结构02 :线性表链式存储 C++

    1.链表插入和删除等操作 关键是要找到插入元素的前一个元素 Status ListInsert(LinkList L, int i, ElemType e) {LinkList N = new Nod ...

最新文章

  1. Windows 08 R2_NLB负载均衡(图文详解)
  2. python程序设计与科学计算pdf_用Python做科学计算 pdf版
  3. Summer Training day4 欧拉降幂
  4. PHP 实现简单的 倒计时 时分秒
  5. 资料汇总--java开发程序员必备技能
  6. {Azure} 常用链接
  7. SQL67 牛客每个人最近的登录日期(二)
  8. 小说和散文在写作语言(表达方式等)方面究竟有多大不同?
  9. docker hive nagasuga_制作一个用来调试hive的docker镜像
  10. 最新容器项目 Kata 曝光
  11. PCB原理图绘制(1)——工程文件的建立
  12. 传输控制协议端口服务多路开关选择器
  13. 2016天猫快消母婴行业双11商家大会
  14. IT 程序员、软件工程师值得考的证书有哪些?有什么证书可以考?
  15. 2017知乎看山杯总结(多标签文本分类)
  16. 钉钉自定义机器人提示报警信息
  17. 图像处理------Mean Shift滤波(边缘保留的低通滤波)
  18. PyTorch笔记 - MAE(Masked Autoencoders) PyTorch源码
  19. 【SLAM】SLAM如何发论文?做SLAM怎么发论文
  20. modelsim is exiting with code:211 10秒后自动关闭退出

热门文章

  1. SpringBoot整合Knife4j框架
  2. 暗黑血统2android,暗黑血统2安卓版下载_暗黑血统2游戏下载-d7ol休闲益智app
  3. 17、从1加到100并显示结果
  4. unity2D-笔记 玩家跳跃时,游戏场景消失
  5. C#实现AES算法对文件的加密解密
  6. 如何在php中显示170cm,170cm的福利!教你如何穿成大高个!(男神版)
  7. SQL:mysql 开启事务
  8. 大股东猛买流通股----后G时代的机会(1)
  9. 怎么把视频做成动图?视频转gif格式怎么做?
  10. postgresql copy from、copy to