zoukankan      html  css  js  c++  java
  • 数据结构——顺序表

    一、线性表的定义和表示方法

    1、线性表的定义
    线性表就是零个或多个相同数据元素的有限序列。

    2、线性表的表示方法
    线性表记为: L=(a0,∙∙∙∙∙∙∙∙ai-1aiai+1∙∙∙∙∙∙an-1)其中:L为表名,ai (0≤i≤n-1)为数据元素;n为表长,n>0 时,线性表L为非空表,否则为空表,记为φ; 。
    线性表L可用二元组形式描述:L= (D,R),即线性表L包含数据元素集合D和关系集合R,其中:
    D={ai | ai∈datatype ,i=0,1,2, ∙∙∙∙∙∙∙∙∙n-1 ,n≥0},R={<ai , ai+1> | ai , ai+1∈D, 0≤i≤n-2}
    关系符<ai, ai+1>在这里称为有序对,表示任意相邻的两个元素之间的一种先后次序关系,称ai-1是ai的直接前驱, ai+1是ai的直接后继,当表长n≤1时,关系集R为空集。

    3、线性表的基本运算

    设线性表 L=(a0,a1, ……,an-1),对 L的基本运算有:
    a、建立一个空表:CreateList(L)。
    b、置空表:ClearList(L)。
    c、判断表是否为空:EmptyList (L)。若表为空,返回值为True (或1) , 否则返回 False (或0)。
    d、求表长:Length (L)。
    e、取表中某个元素:GetList(L , i ), 即ai。要求0≤i≤length(L)-1。
    f、定位运算:Locate(L,x)。确定元素x在表L中的位置(或序号)
    g、插入:Insert(L,x,i)。将元素x插入到表L中第i个元素ai之前,且表长+1。
    h、删除:Delete(L,i)。删除表L中第i个元素ai,且表长减1, 要求0≤i≤n-1。

    二、顺序表

    1、线性表的顺序存储结构
    线性表作为一种基本的数据结构类型,在计算机存储器中的映象(或表示)一般有两种形式,一种是顺序映象,一种是链式映象。
    若将线性表L=(a0,a1, ……,an-1)中的各元素依次存储于计算机一片连续的存储空间,这种表示为线性表的顺序存储结构。

    2、顺序存储的特点
    顺序存储结构的特点:
    a、逻辑上相邻的元素 ai, ai+1,其存储位置也是相邻的;
    b、对数据元素ai的存取为随机存取或按地址存取。
    c、存储密度高。存储密度D=(数据结构中元素所占存储空间)/(整个数据结构所占空间)。
    顺序存储结构的不足:
    对表的插入和删除等运算的时间复杂度较差。

    3、顺序存储实现
    在C语言中,一维数组的元素也是存放于一片连续的存储空间中,故可借助于C语言中一维数组类型来描述线性表的顺序存储结构。

    #define N 100 //线性表的最大长度
    typedef int data_t;
    typedef struct
    {
    data_t data[N]; //表的存储空间
    int last; //当前表尾指针
    } sqlist_t, *sqlink_t; // 顺序表类型

    a、创建
    指针L指向一个顺序表。
    sqlink_t L;
    L = (sqlist_t *)malloc(sizeof(sqlist_t));
    L->last =-1;
    ai表示为L->data[i] (0 ≤ i ≤L->last)
    b、置空顺序表:ClearSqlist(sqlist_t *L); //L->last = -1;
    c、求顺序表长:Length(sqlist_t *L); //return (L->last+1);
    d、求顺序表中第i个元素的值:GetSqlist(sqlist_t *L, int i); //return L->data[i];
    e、插入: 将一给定值x插在元素ai之前,即实现Insert(L, x, i)。
    算法思路:若表存在空闲空间,且参数i满足:0≤i≤L->last+1,则可进行正常插入。插入前,将表中(L->data[L->last]~L->data[i])部分顺序下移一个位置,然后将x插入L->data[i]处即可。
    f、删除:将表中第i个元素ai从表中删除,即实现DeleteSqlist(L, i)。
    算法思路: 若参数i满足:0≤i≤L->last, 将表中L->data[i+1]∽L->data[L->last]部分顺序向上移动一个位置,覆盖L->data[i]。
    g、定位:确定给定元素x在表L中第一次出现的位置(或序号)。即实现Locate(L,x)。算法对应的存储结构如图所示。
    算法思路:设一扫描变量i(初值=0),判断当前表中元素ai是否等于x,若相等,则返回当前i值(表明x落在表的第i位置);否则i加1,继续往下比较。若表中无一个元素与x相等,则返回-1。

  • 相关阅读:
    Android studio开发找不到HttpClient问题
    Android studio开发找不到HttpClient问题
    互联网应用之传递HTTP参数
    互联网应用之传递HTTP参数
    计算机组成原理
    计算机组成原理
    【NYOJ】[40]公约数和公倍数
    【NYOJ】[40]公约数和公倍数
    【NYOJ】[39]水仙花数
    【NYOJ】[39]水仙花数
  • 原文地址:https://www.cnblogs.com/sanwumanzi/p/10552332.html
Copyright © 2011-2022 走看看