zoukankan      html  css  js  c++  java
  • 二.线性表

    线性表的定义

    由n(n≥0)个数据元素(节点)(a_1,a_2,...a_n)组成的有限序列。该序列中的所有节点具有相同的数据类型。其中数据元素的个数n称为线性表的长度。
    当n=0时,称为空表。
    当n>0时,将非空的线性表记作:((a_1,a_2,...,a_n),a_1)称为线性表的第一个(首)节点,(a_n)称为线性表的最后一个(尾)节点。
    $ a_1,a_2,...a_{i-1}(都是)a_i(2≤i≤n)(的`前驱`,其中)a_{i-1}(是)a_i(的`直接前驱`;)a_{i+1},a_{i+2},...a_n(都是)a_i(1≤i≤n-1)(的`后继`,其中)a_{i+1}(是)a_i$的直接后继

    线性表的抽象数据类型

    ADT List{
    数据对象:(D={a_i|a_i∈ElemSet,i=1,...,n,n≥0})
    数据关系:(R={<a_{i-1},a_i>|a_{i-1},a_i∈D,i=2,3,...n})
    基本操作:
    InitList(&L)
    操作结果:构造一个空的线性表L;
    ListLength(L)
    初始条件:线性表L已存在;
    操作结果:若L为空表,则返回TRUE,否则返回FALSE;
    ......
    GetEleme(L,i,&e)
    初始条件:线性表L已存在,1≤i≤ListLength(L);
    操作结果:用e返回L中第i个数据元素的值;
    ListInsert(L,i,&e)
    初始条件:线性表L已存在,1≤i≤ListLength(L);
    操作结果:在线性表L中的第i个位置插入元素e;
    ......
    }ADT List

    线性表的顺序存储

    • 存储结构

    顺序存储:把线性表的节点按逻辑顺序依次存放在一组地址连续的存储单元里。用这种方法存储的线性表简称顺序表。
    顺序存储 的线性表的特点
    1)线性表的逻辑顺序与物理顺序一致;
    2)数据元素之间的关系是以元素在计算机内“物理位置相邻”来体现。

    • 基本操作
    • 初始化
      这里写图片描述
    • 插入

    在线性表(L=(a_1,...,a_{i-1},a_i,a_{i+1},...,a_n))中的第i(1≤i≤n)个位置上插入一个新节点e,使其成为线性表:
    (L=(a_1,...,a_{i-1},e,a_i,a_{i+1},...,a_n))
    实现步骤:
    (1)将线性表L中的第i个至第n个节点后移一个位置
    (2)将节点e插入到节点(a_{i-1})之后
    (3)线性表长度加1
    这里写图片描述

    • 删除

    在线性表(L=(a_1,...,a_{i-1},a_i,a_{i+1},...,a_n))中删除节点(a_i)(1≤i≤n),使其成为线性表:(L=(a_1,...,a_{i-1},a_{i+1},...,a_n))
    实现步骤:
    (1)将线性表L中的第i+1个至第n个节点依次向前移动一个位置
    (2)线性表长度减1
    这里写图片描述

    线性表的链式存储

    • 存储结构

    用一组任意的存储单元存储线性表中的数据元素。用这种方法存储的线性表简称线性链表
    存储链表中节点的一组任意的存储单元可以是连续的,也可以是不连续的,甚至是零散分布在内存中的任意位置上的。
    链表中节点的逻辑顺序和物理顺序不一定相同。
    链表是通过每个节点的指针域将线性表的n个节点按其逻辑次序链接在一起的。

    • 基本操作

      单链表建立

    头插法
    头插法
    尾插法
    尾插法

    单链表查找
    

    按序号查找
    这里写图片描述
    按值查找
    这里写图片描述

    单链表插入
    

    这里写图片描述

    单链表删除
    

    按序号删除
    这里写图片描述
    按值删除
    这里写图片描述

    单链表合并
    

    这里写图片描述

    双向链表

    • 存储结构

    双向链表指的是构成链表的每个节点中设立两个指针域:一个指向其直接前驱的指针域prior,一个指向其直接后继的指针域next。这样形成的链表中有两个方向不同的链,故称为双向链表
    这里写图片描述

    • 基本操作

    双向链表插入
    这里写图片描述
    双向链表删除
    这里写图片描述

    注意:与单链表的插入和删除操作不同的是,在双向链表中插入和删除必须同时修改两个方向上的指针域的指向。

  • 相关阅读:
    oracle创建表空间自增长和创建用户
    Cmd Markdown 简明语法手册
    Excel VBA修改不同文件簿sheet页名字
    常用JS(JQ)插件研究
    CSS颜色大全(转载)
    React框架学习
    不同浏览器中空格符的兼容问题
    VHDL----基础知识1
    串口通讯1---单片机
    Qt5 程序发布打包
  • 原文地址:https://www.cnblogs.com/jianxiong0117/p/9430036.html
Copyright © 2011-2022 走看看