zoukankan      html  css  js  c++  java
  • 深入研究链表

    一.链表的定义

    链表是将一组在存储地址上非顺序不连续的数据元素,通过指针链接起来从而实现数据元素之间的逻辑关系的线性表

    链式结构的特点:链表存储的数据元素之间的逻辑关系与其存储的地址没有关系,而是用指针来说明

    链表的数据元素的组成部分:指针域数据域

    指针域用来存放指示数据元素之间的逻辑关系的指针

    数据域用来存放数据信息

    数据元素这种特殊的存储方式称之为结点(Node)

    画的示意图如下:

    注:https://www.cnblogs.com/ljangle/p/13036992.html

    C++中如何判断链表为空

    链表区分带头节点和不带头结点两种。假定链表节点指向下一节点的指针变量名为next。那么区分情况,判断空链表的方法为:
    
    1 带头节点。
    对于带头节点的链表,存在有不变的头结点head,这个节点并不保存任何数据,仅提供链表起始的一个标识。对于此类链表,判断为空的条件为head->next==NULL。当head的next值为NULL,这时链表为空。
    
    2 不带头结点。
    不带头结点的情况,链表的起始节点是可能变化的,但无论如何变化,必须有一个节点指针类型的变量保存实际上的第一个节点first。
    当first为空时,链表即为空。这时判断为空的条件为first==NULL。

    二.用编程语言实现链表

    数据结构单链表头插法和尾插法是什么意思?

    头插法: 头插法的实现相对简单 思路是将新形成的节点的下一个赋值为header

                   再把新形成的节点地址传给header即将header向前移动

    1.

    头插法是新增节点总是插在头部,以带头结点链表为例,链表头指针是Head,新增节点p
    那么
    p->next = Head->next;
    Head->next = p;
    如果是不带头结点的链表那么对应是
    p->next = Head;
    Head = p;

     头插法创建链表的根本在于深刻理解最后两条语句

     1 node->next = head->next; // 将头指针所指向的下一个结点的地址,赋给新创建结点的next

     2 head->next = node; // 将新创建的结点的地址赋给头指针的下一个结点 

    2.怎么实现链表翻转

    单链表翻转很容易理解,例如:

    输入: NODE1->NODE2->NODE3->NODE4->NODE5->NULL

    输出: NODE5->NODE4->NODE3->NODE2->NODE1->NULL

    3.怎么判断链表有环

  • 相关阅读:
    检测Linux硬盘IO数据
    获取OrangePI板子CPU温度
    ASP.Net开发WebAPI跨域访问(CORS)的精简流程
    一些常用复合命令
    关于Linux的虚拟内存管理
    Linux中组 与 用户的管理
    linux加载与使用ko驱动
    7z命令行 极限压缩指令
    nodejs的POST请求
    案例:用ajax 方法 解析xml
  • 原文地址:https://www.cnblogs.com/nh34546/p/14171615.html
Copyright © 2011-2022 走看看