学习 线性表的顺序存储 总结一

本文总结了线性表的顺序存储结构,包括其定义、特点、顺序存储的属性以及基本操作。顺序表的插入和删除操作时间复杂度为O(n),而存取操作时间为O(1)。讨论了顺序表在空间利用和操作效率上的优缺点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

学习 线性表的顺序存储 总结一

线性表是最简单的一种数据结构了,也是最常用的一种。线性表的逻辑结构简单,便于实现和操作。线性表有以下两个特点:
1. 它首先是个序列,元素之前是有顺序的。
2. 数据元素之间的关系是一对一的,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的。

线性表的元素个数n定义为线性表的长度。

线性表的顺序存储定义

线性表的顺序存储:用一段地址连续的存储单元依次存储线性表的数据元素。线性表的顺序存储结构代码如下:

#define MAXSIZE 20
typedef int ElemType
typedef struct
{
    ElemType data[MAXSIZE];
    int length;
}SqList;

由以上定义,可以发现线性表的顺序存储有下面三个属性:
1. 存储空间的起始位置—数组data
2. 线性表顺序存储的最大存储容量
3. 线性表顺序存储的当前长度length

下面把线性表的顺序存储记为顺序表。并学习顺序表的一些基本操作:顺序表的初始化、建立、查找、插入、删除等。

// 顺序表的初始化
SqList Init()
{
    SqList L;

    L.length = 0;

    return L;
}
// 顺序表的建立
SqList Create(SqList L)
{
    int i;
    srand((unsigned)time(NULL);

    for (i = 0; i < 100; i++)
    {
        L.data[i] = rand() % 100;
        L.length++;
    }

    return L;
}
// 顺序表的查找
int GetElem(SqList L, int i, ElemType* e)
{
    if (L.length == 0 || i < 1 || i > L.length)
    {
        return ERROR;
    }

    *e = L.data[i - 1];

     return OK;
}
// 顺序表的插入
int ListInsert(SqList* L, int i, ElemType e)
{
    int k;

    if (L->length == MAXSIZE)
        return ERROR;
    if (i < 1 || i > L->length + 1)
        return ERROR;

    if (i <= L->length)
    {
        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;
}
// 顺序表的删除
int ListInsert(SqList* L, int i, ElemType* e)
{
    int k;

    if (L->length == 0)
        return ERROR;
    if (i < 1 || i > L->length)
        return ERROR;

    *e = L->data[i - 1];
    if (i < L->length)
    {
        for (k = i; k >= L->length; k++)
        {
            L->data[k - 1] = L->data[k];
        }
    }

    L->length--;

    return OK;
}

顺序表的插入或删除操作,时间复杂度都是O(n). 而存和读数据操作,不管是哪个位置,时间复杂度为O(1).

下面总结下顺序表的优缺点:
好吧,从优点开始说。当我们在使用线性表的时候,我们不需要为表中元素之间的逻辑关系而增加额外的存储空间,而且可以快速的存取表中任意位置的元素。接下来谈谈缺点。如我们所见,如果我们要插入或者删除的元素是在第一个位置,那么无疑的,我们需要移动大量的元素来完成这样的操作,而且限于线性表长度必须小于数组长度,如果我们需要插入大量数据,那么很难保证空间是否充足,而如果我们要删除大量数据的时候,无疑又会造成空间的浪费。

参考文档:

  1. 《数据结构》
  2. http://www.nowamagic.net/librarys/veda/detail/1787
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值