• 深入研究链表


    一.链表的定义

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

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

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

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

    数据域用来存放数据信息

    数据元素这种特殊的存储方式称之为结点(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.怎么判断链表有环

  • 相关阅读:
    AUTOSAR-文档中所使用的UML文件
    开心一下-实现基于Java一个中文编程语言
    HDU 1026 Ignatius and the Princess I
    HDU 2553 (状压) N皇后问题 (2)
    UVa 11825 (状压DP) Hackers' Crackdown
    UVa 10891 (博弈+DP) Game of Sum
    LA 2965 Jurassic Remains
    HDU 2126 (背包方法数) Buy the souvenirs
    POJ 3984 迷宫问题
    POJ 3287 (基础BFS) Catch That Cow
  • 原文地址:https://www.cnblogs.com/nh34546/p/14171615.html
Copyright © 2020-2023  润新知