zoukankan      html  css  js  c++  java
  • 第三章 线性表---顺序存储结构

    线性表(List):零个或多个数据元素的有限序列。

     
    若将线性表记为(a1, ..., ai-1, ai , ai+1 , ..., an),则表中 ai-1 领先于ai , ai领先于ai+1,称ai-1是ai的直接前驱元素,ai+1是ai的直接后继元素。当i=1,2,...,n-1时,ai有且仅有一个直接后继,当i=2,3,..,n时,ai有且仅有一个直接前驱。
     
    线性表元素的个数n(n>=0)定义为线性表的长度,当n=0时,称为空表。
     
    在较复杂的线性表中,一个数据元素可以由若干个数组项组成。
     
    线性表的抽象数据类型定义如下:
    ADT 线性表(List)
    Data
    线性表的数据对象集合为{a1,a2,...,an),每个元素的类型均为DataType。其中,除第一个元素a1外,每一个元素有且只有一个直接前驱元素,除了最后一个元素an外,每一个元素有且只有一个直接后继元素。数据元素之间的关系是一对一的关系。
    Operation
    InitList(*L) 初始化操作,建立一个空的线性表L
    ListEmpty(L) 若线性表为空,返回true,否则返回false
    ClearList(*L) 将线性表清空
    GetElem(L,i,*e) 将线性表L中第i个位置元素返回给e
    LocateElem(L,e)   在线性表L中查找与给定值e相等的元素,如果查找成功,返回该元素在表中序号表示成功,否则,返回0表示失败
    ListInsert(*L,i,e) 在线性表L中第i个位置插入新元素e
    ListDelete(*L,i,*e) 删除线性表L中第i个位置元素,并用e返回其值
    ListLength(L)   返回现象表L的元素个数
    endADT
     
    线性表的顺序存储结构,指的是用一段地址连续的存储单元依次存储线性表的数据元素。
     
    一维数组来实现顺序存储结构
     
    顺序存储结构需要三个属性
    # 存储空间的起始位置:数组data,它的存储位置就是存储空间的存储位置
    # 线性表的最大存储容量:数组长度MaxSize
    # 线性表的当前长度:length
     
    数据长度与线性表长度的区别
    数组的长度是存放线性表的存储空间的长度,存储分配后这个量一般是不变的
    线性表的长度是线性表中数据元素的个数,随着线性表插入和删除操作的进行,这个量是变化的
    在任意时刻,线性表的长度应该小于等于数组的长度。
     
    存储器中的每个存储单元都有自己的编号,这个编号称为地址。
    Loc(ai)=Loc(a1)+(i-1)*c
     
    线性表顺序存储结构的优缺点
    优点:
    #无须为表示表中元素之间的逻辑关系而增加额外的存储空间
    #可以快速得存取表中任一位置的元素
    缺点
    # 插入和删除操作需要移动大量元素
    #当线性表长度变化较大时,难以确定存储空间的容量
    #造成存储空间的碎片
     
    顺序存储结构的读取、插入和删除
    读取元素操作思路:
    实现GetElem操作,即将线性表L中第i个位置元素返回
    就程序而言,只要i的数值在数组中下标范围内,就是把数组第i-1下标的值返回即可
    插入算法的思路:
    # 如果插入位置不合理,抛出异常
    # 如果线性表长度大于等于数组长度,则抛出异常或动态增加容量
    # 从最后一个元素开始向前遍历到第i个位置,分别将他们都向后移动一个位置
    # 将要插入元素填入位置i处
    # 表长+1
    删除算法的思路
    # 如果删除位置不合理,抛出异常
    # 取出删除元素
    # 从删除元素位置开始遍历到最后一个元素位置,分别将他们向前移动一个位置
    # 表长减1
     
     
  • 相关阅读:
    饿了么P7级前端工程师进入大厂的面试经验
    前端程序员面试的坑,简历写上这一条信息会被虐死!
    这次来分享前端的九条bug吧
    移动端开发必会出现的问题和解决方案
    创建一个dynamics 365 CRM online plugin (八)
    创建一个dynamics 365 CRM online plugin (七)
    创建一个dynamics 365 CRM online plugin (六)
    创建一个dynamics 365 CRM online plugin (五)
    使用User Primary Email作为GUID的问题
    怎样Debug Dynamics 365 CRM Plugin
  • 原文地址:https://www.cnblogs.com/yingmo/p/6148397.html
Copyright © 2011-2022 走看看