• C++ 单链表的基本算法


    线性表是最简单,最常用的一种数据结构。线性表的逻辑结构是n个数据元素的有限序列(a1,a2,…,an)。而线性表的物理结构,我们已经学习过顺序表,也就是数组 ;另一种线性表的物理结构——链表 。

    什么是单链表

    单链表(Singly Linked list)也称线性链表。每个元素占用一个节点(Node)。一个节点至少包含两个域,一个域存放数据信息info,其数据类型由应用问题决定,另一个存放指向该链表中下一个节点的指针link。
     

    单链表的c++实现思路

    ◆ 1、单链表节点的数据类型
    typedef int Datatype; //节点的数据为整型
    struct node
    {
        Datatype info;//节点的数据信息
        node *link;
    //指向下一个节点的指针,是结构自身的指针类型,决不能是结构自身类型
    };

    ◆ 2、由节点形成单链表
    单链表的第一个节点首先通过new运算获得,并用链表的表头指针head指向, head在使用中必须妥善保存,千万不可丢失,否则单链表整个丢失,内存也发生泄漏。
        ……//有关node的声明,见上段代码
        node *head;
        head=new node;
        //第一个节点的数据不赋值,则该节点仅作head
        head->link=NULL;//指针初始化

    单链表后面的节点可以通过插入与删除来维护:只要改变链中节点指针的指向,而无需移动表中的元素,就能实现插入和删除操作。

    单链表的基本插入算法

    现在已经存在单链表“head”,插新节点时考虑三种情况:
    1. 新插入节点作为单链表的第一个结点;
    2. 也有可能新插入节点是中间节点;
    3. 也有可能新插入节点作为最后一个节点。

    首先要先产生新节点:
        ……//有关node的声明
        node *newone;
        newone=new node;
        newone->info=13;//给该节点的数据赋值
        newone->link=NULL;//指针初始化

    ◆ 1、新节点插在链首
        //注意:链表操作次序非常重要
        ……//node、head、newone的声明及定义,见上面
        newone->link=head->link;
        Head->link=newone;//注意指针赋值

    ◆ 2、新节点插在单链表中间
    首先用工作指针p找到指定节点,而让指针q指向紧跟其后的节点;新节点插在p、q之间;
        node *p,*q;
        ……//此段代码实现:利用查找算法将p定位在指定节点(稍后将学习)
        q=p->link; //注意指针赋值
        newone->link=q;
        //或newone->link=p->link;这样就不需要q了
        p->link=newone;
     
     
    如有问题,欢迎和我联系。 我的邮箱 cq20151207@163.com 
     
  • 相关阅读:
    Java数据类型转换(自动转换和强制转换)
    Java数据类型以及变量的定义
    Java8新特性_日期时间新类 LocalDate、LocalTime、LocalDateTime
    Java8新特性_接口中的默认方法
    java8 新特性 Optional容器类
    Java8新特性 并行流与串行流 Fork Join
    Java8新特性_stream API 练习
    IDEA导入JUnit4
    Reduce:规约;Collector:收集、判断性终止函数、组函数、分组、分区
    【Linux】排序命令sort
  • 原文地址:https://www.cnblogs.com/qiange/p/5100441.html
Copyright © 2020-2023  润新知