您当前的位置: 首页 >  数据结构
  • 2浏览

    0关注

    880博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

【大话数据结构C语言】4 线性表的顺序存储结构

CodeAllen嵌入式编程 发布时间:2020-10-11 21:48:27 ,浏览量:2

系列文章参考资料为《大话数据结构》,源码为个人私有,未经允许不得转载 技术交流群或资料添加微信号:CoderAllen,回复关键字即可

定义: 在这里插入图片描述

在物理空间的存储示意图为下面这个样子: 在这里插入图片描述

看上图可以知道顺序存储结构其实就是数组

顺序存储结构的三个特性 1.存储空间的起始位置:数组data存储的位置就是存储空间的存储位置 2.线性表的最大存储容量:数组长度MaxSize 3.线性表的当前长度:length

看下其结构代码:

#define MAXSIZE 20          /* 存储空间初始分配量 */
typedef int ElemType;       /* ElemType类型根据实际情况而定,这里假设为int */
typedef struct
{
    ElemType data[MAXSIZE]; /* 数组,存储数据元素 */
    int length;             /* 线性表当前长度 */
}SqList;

地址计算方法: 由于自然数是从1开始,而C语言的数组是从0下标开始的,于是线性表的第i个元素存储在数据i-1的位置,如下图所示 在这里插入图片描述

由于其这样的物理结构,所以线性表的存入取出时间复杂度为O(1)

顺序存储结构的插入与删除

获得元素操作:GetElem 即将线性表中的第i个元素返回

/* 初始条件:顺序线性表L已存在,1≤i≤ListLength(L) */
/* 操作结果:用e返回L中第i个数据元素的值,注意i是指位置,第1个位置的数组是从0开始 */
Status GetElem(SqList L,int i,ElemType *e)
{
    if(L.length==0 || iL.length)
            return ERROR;
    *e=L.data[i-1];

    return OK;
}

插入操作:ListInsert 即在线性表中的第i个位置插入新元素

算法思路: 在这里插入图片描述

实现代码:

/* 初始条件:顺序线性表L已存在,1≤i≤ListLength(L), */
/* 操作结果:在L中第i个位置之前插入新的数据元素e,L的长度加1 */
Status ListInsert(SqList *L,int i,ElemType e)
{ 
    int k;
    if (L->length==MAXSIZE)  /* 顺序线性表已经满 */
        return ERROR;
    if (iL->length+1)/* 当i比第一位置小或者比最后一位置后一位置还要大时 */
        return ERROR;

    if (ilength)        /* 若插入数据位置不在表尾 */
    {
        for(k=L->length-1;k>=i-1;k--)  /* 将要插入位置之后的数据元素向后移动一位 */
            L->data[k+1]=L->data[k];
    }
    L->data[i-1]=e;          /* 将新元素插入 */
    L->length++;

    return OK;
}

删除操作:ListDelete

算法思路: 在这里插入图片描述

实现代码:

/* 初始条件:顺序线性表L已存在,1≤i≤ListLength(L) */
/* 操作结果:删除L的第i个数据元素,并用e返回其值,L的长度减1 */
Status ListDelete(SqList *L,int i,ElemType *e) 
{ 
    int k;
    if (L->length==0)               /* 线性表为空 */
        return ERROR;
    if (iL->length)         /* 删除位置不正确 */
        return ERROR;
    *e=L->data[i-1];
    if (ilength)                /* 如果删除不是最后位置 */
    {
        for(k=i;klength;k++)/* 将删除位置后继元素前移 */
            L->data[k-1]=L->data[k];
    }
    L->length--;
    return OK;
}

--------------------------------------------------------END----------------------------------------------------------- 电子书及源码点击下载

关注
打赏
1665938897
查看更多评论
立即登录/注册

微信扫码登录

0.0422s