day2 线性表之顺序表(上)

线性表是一种数据元素的线性序列,具有逻辑上的先后次序。在顺序存储结构中,元素在内存中也是连续存放的,便于随机访问。然而,这种结构在插入和删除操作时效率较低,需要移动大量元素。线性表的基本操作包括建立、置空、判断空表、求表长、取元素、定位、插入和删除等。
摘要由CSDN通过智能技术生成
  1. 目录结构

  1. 线性表

2.1什么是线性表

  1. 线性表是包含若干数据元素的一个线性序列

  1. 记为:L=(a(0),......a(i-1),a(i),a(i+1)......a(n-1))

  • L为表名,(0) ,(i-1)......为下标,a(i) ,(0<=i<=n-1)为数据元素;

  • n为表长,n>0时,线性表L为费控表,否则为空表。

3.线性表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是ai+1的直接前驱, ai+1是ai的直接后继;

4.关系图

设有一个顺序表L={1,2,3,4,5,6};他们的关系图:

  • 使用二元组描述L=(D,R),则

D={1,2,3,4,5,6}(n=6)

R={<1,2>,<2,3>,<3,4>,<4,5>,<5,6>}

2.2线性表的特征

  1. 对非空表,a0是表头,无前驱;

  1. an-1是表尾,无后继;

  1. 其他的每个元素ai有且仅有一个直接前驱ai-1和一个直接后继ai+1。

3.线性表顺序存储

3.1顺序存储结构的表示

1.若将线性表L=(a0,a1, ……,an-1)中的各元素依次存储于计算机一片连续的存储空间。

设Loc(ai)为ai的地址,Loc(a0)=b,每个元素占d个单元 则:

Loc(ai)=b+i*d             
  1. 在C语言中,可借助一维数组类型来描述线性表的顺序存储结构(简称为顺序表)

#define N 100       
typedef int data_t;
typedef struct                     
{    data_t data[N]; //表的存储空间
     int last;       //last用于表示当前是存在的数量 
}sqlist, *sqlink;                                                                                                           

3.2顺序存储结构的特点与不足

特点:

1.逻辑上相邻的元素 ai, ai+1,其存储位置也是相邻的

2.对数据元素ai的存取为随机存取或按地址存取

3.存储密度高

  • 存储密度D=(数据结构中元素所占存储空间)/(整个数据结构所占空间)

不足:

  1. 对表的插入和删除等运算的时间复杂度较差。

4.线性表的基本运算

设线性表L=(a0,a1,......,an-1),对L的基本运算有:

  1. 建立一个空表:list_create(L)

  1. 置空表:list_clear(L)

  1. 判断表是否为空:list_empty(L)。若表为空,返回值为1,否则返回值为0

  1. 求表长:length(L)

  1. 取表中某个元素:GetList(L,i),即ai。要求0<=i<=length(L)-1

  1. 定位运算:Locate(L,x)。确定元素x在表L中的位置(或序号)

  1. 定位:确定给定元素x在表L中第一次出现的位置(或序号)。

即实现Locate(L,x)。算法对应的存储结构如图所示

  1. 插入:Insert(L,x,i)。将元素x插入到表L中第i个元素ai之前,且表长+1。

  1. 插入前: (a0,a1,---,ai-1,ai,ai+1-------,an-1) 0≤i≤n,i=n时,x插入表尾

  1. 插入后: (a0,a1,---,ai-1, x, ai,ai+1-------,an-1)

  1. 算法思路:若表存在空闲空间,且参数i满足:0≤i≤L->last+1,则可进行正常插入。插入前,将表中(L->data[L->last]~L->data[i])部分顺序下移一个位置,然后将x插入L->data[i]处即可。算法对应的表结构。

  1. 删除:Delete(L,i)。删除表L中第i个元素ai,且表长减1, 要求0≤i≤n-1。

  1. 删除前: (a0,a1,---,ai-1,ai,ai+1-------,an-1)

  1. 删除后: (a0,a1,---,ai-1,ai+1-------,an)

  1. 算法思路: 若参数i满足:0≤i≤L->last, 将表中L->data[i+1]∽L->data[L->last] 部分顺序向上移动一个位置,覆盖L->data[i]。

5.线性表的顺序存储优点和缺点

1.优点:线性表的顺序存储结构有存储密度高及能够随机存取等优点。

2.缺点:

  1. 要求系统提供一片较大的连续存储空间。

  1. 插入、删除等运算耗时,且存在元素在存储器中成片移动的现象;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值