数据结构-线性表的顺序表总结

目录

一.逻辑结构

二.线性表的运算/操作

三.线性表的顺序表示

        3.1线性表相关概念

        3.2静态分配与动态分配

        3.3顺序表相关操作


一.逻辑结构

线性表的定义
线性表是n个系统 数据元素 的有限序列
线性表示一种 数据结构/逻辑结构
线性表的特点
表中元素的 个数有限
表中元素具有 逻辑上的顺序性
•表中元素的数据类型都相同,这意味着 每个元素占有相同大小的存储空间

二.线性表的运算/操作

InitList(&L)

初始化表

构造一个空的线性表

Length(L)

求表长

返回线性表L的长度,即L中数据元素的个数

LocateElem(L,e)

按值查找操作

在表L中查找具有给定关键字值的元素

GetElem(L,i)

按位查找操作

获取表L中第i个位置的元素的值

ListInsert(&L,i,&e)

插入操作

在表中的第i个位置插入指定元素e

ListDelete(&L,i,&e)

删除操作

删除表中第i个位置的元素,并用e返回删除元素的值

PrintList(L)

输出操作

按前后顺序输出线性表的所有元素值

DestroyList(&L)

销毁操作

销毁线性表,并释放空间。

三.线性表的顺序表示

3.1线性表相关概念

定义

  • 用一组地址连续的存储单元依次存储线性表中的数据元素,从而使得逻辑上相邻的两个元素在物理位置上也相邻

特点

  • 表中元素的逻辑顺序与其物理顺序相同
  • 随机访问,即通过首地址和元素序号能在时间O(1)内找到指定的元素
  • 顺序表的存储密度高,每个节点只存储数据元素
  • 顺序表逻辑上相邻的元素物理上也相邻,所以插入和删除需要移动大量元素

3.2静态分配与动态分配

静态分配

动态分配

定义

  • 数组的大小和空间事先已经固定
  • 一旦空间占满,再加入新的数据就会产生溢出,进而导致程序崩溃
  • 存储数组的空间是在程序执行过程中通过动态存储分配语句分配的
  • 一旦数据空间占满,就另外开辟一块更大的存储空间,用以替换原来的存储空间

顺序存

储类型

#define MaxSize 50 //定义线性表的最大长度

typedef struct

{

ElemType data[MaxSize]; //顺序表元素

int length;//顺序表当前长度

} SqList;//顺序表的类型定义

#define InitSize 100 //表长度的初始定义

typedef struct

{ElemType *data;    //指示动态分配数组的指针

int Maxsize,length;  //数组的最大容量和当前个数

} SeqList;//动态分配数组顺序表的类型定义

动态分配语句:

C的初始动态分配语句

L.data = (ElemType *)

malloc(sizeof(ElemType) * InitSize);

C++的初始动态分配语句

L.data = new ElemType[InitSize];

3.3顺序表相关操作

代码

最好

情况

最坏

情况

平均

情况

插入

bool ListInsert(SqList &L, int i, ElemType e)

{

if (i < 1 || i > L.length + 1) //判断i的范围是否有效 (1~n+1)

return false;

if (L.length >= Maxsize) //当前存储空间已满,不能插入

return false;

for (int j = L.length; j >= i; j--) //第i个元素及以后的元素后移

L.data[j] = L.data[j - 1];

L.data[i - 1] = e; //在位置i处放入e

L.length++;

return true;

}

在第i个位置插入一个元素,需要移动n-i+1n + 1 (i + 1) + 1】个元素(此时 1 ≤ i ≤ n +1,i从1开始)

O(1)

O(n)

O(n)

删除

bool ListDelete(SqList &Lint iElemType &e)

{

if (i < 1 || i > L.length + 1) //判断i的范围是否有效

return false;

e = L.data[i - 1];    //将被删除的元素赋值给e

for (int j = i; j < L.length; j++) //将第i个元素以后的元素前移

L.data[j - 1] = L.data[j]; L.length--;

//线性表长度减1 return true;

}

O(1)

O(n)

O(n)

按值查找

int LocateElem(SqList &L, int i, ElemType &e)

{  int i;

for (i = 0; i < L.length; i++)

if (L.data[i] == e)

           return i + 1; //下标为i的元素值等于e,返回其位序i+1

 return 0; //退出循环,说明查找失败

}

O(1)

O(n)

O(n)

        以上是在备考期间根据备考进度做出相对应的总结,后续还会有408其他相关内容及题型总结。

                                                                                                            -----ssss

  • 12
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值