zoukankan      html  css  js  c++  java
  • 常用的数据结构之链表

      数据结构是一种特殊的组织和存储数据的方式,使我们可以更高效的对存储的数据执行操作。以下介绍常用的数据结构中的链表结构。

      链表是一种顺序结构,由相互链接的线性顺序项目序列组成,只能顺序访问,不能随机访问。

    •  单链表中的概念
      • 链表中的元素成为结点
      • 每个结点包含两个域:数据域和指针域。
      • 链表的头结点(head):仅存放地址,可以不存放数据,起标识单链表的作用。
      • 链表的尾结点的指针为空。
    • 链表的类型
      • 单链表:只能单向遍历结点。
        • 使用单链表示线性表时,数据元素之间的逻辑关系是由结点中的指针指示的,逻辑上相邻的两个数据元素其存储的物理位置不要求相邻。
        • 可由头指针唯一确定。  
      • 双链表:可以正向和反向遍历结点。结点中有两个指针域,一个指向后继结点,一个指向前驱结点。
      • 循环链表:尾结点的指针指向头结点,整个链表形成一个环。
    • 单链表的操作
      • 搜索:通过线性搜索在给定链表中找出key为k的第一个元素,并返回该元素的指针
      • 创建链表:
        • 前插法:将新结点逐个插入头结点之后。①创建一个只有头结点的空链表;②每读入一个数据元素则申请一个新结点;③将新节点插入到头结点之后。
        • 后插法:将新节点逐个插入到联表尾结点之后。①创建一个只有头结点的空链表L;②增加一个尾指针r指向尾结点(初始时指向头节点);③每读入一个数据元素则申请一个新结点;④将新结点插入到尾结点r之后;⑤将r指向新的尾结点。  
      • 插入:把链表先一分为二,再用新结点把它们连接起来。

          已知头指针head、插入位置前的结点指针pGuard,使用先连后断的方式,把新结点和后结点连接,再把插入未知之前的结点与后结点断开并与新结点连接。如图:   

      • 删除:采用先连后断的方式,先把待删除结点的前驱结点和它后继结点连接,再把待删除的结点与它的后继结点断开,并释放待删除结点的空间。如下图:
    • 链表的应用
      • 用于编译器设计中的符号表管理。
      • 用于Alt Tab(使用循环链表实现)的程序之间进行切换。         

      以上总结,参考:https://mp.weixin.qq.com/s/rycQvasVNGcozyDiropSow、https://www.jianshu.com/p/2db20e1115a8。

  • 相关阅读:
    RabbitMQ在windows环境下的安装、集群配置
    c# c++通信--命名管道通信
    CreateWindow创建无边框 可拉伸窗体
    jetbrains goland 跳到上一个光标处
    centos 7 install virtualbox
    CentOS 7如何将.deb文件转换.rpm
    golang解析json报错:invalid character 'x00' after top-level value
    linux 查看内存信息,及其他硬件信息 dmidecode命令
    kali 源设置sources.list
    ubuntu linux 1604 编译安装tesseract-ocr 4.0
  • 原文地址:https://www.cnblogs.com/smallzhen/p/14148941.html
Copyright © 2011-2022 走看看