数据结构 第二章线性表

本文详细介绍了线性表的逻辑结构,包括其定义、基本特征和抽象数据类型。线性表是一种数据元素有序集,具有唯一的第一和最后一个元素。内容还涵盖了线性表的顺序存储结构——顺序表,包括初始化、销毁、查找、插入和删除等操作。此外,文章提到了链表的三种类型:单链表、循环链表和双链表,以及顺序表和链表的优缺点比较。
摘要由CSDN通过智能技术生成
  1. 线性表的逻辑结构
  • 线性表的定义

线性表是一种线性结构,在一个线性表中数据元素的类型是相同的,或者说线性表是由

同一类型的数据元素构成的线性结构,定义如下:
线性表是具有相同数据类型的n(n≥0)个数据元素的有限序列,通常记为:
(a 1 ,a 2 ,… a i-1 ,a i ,a i+1 ,…a n )
其中n为表长, n=0 时称为空表。
需要说明的是:a i 为序号为 i 的数据元素(i=1,2,…,n),通常将它的数据类型抽象为
ElemType,ElemType根据具体问题而定。

  • 线性结构的基本特征
    1.线性结构是一个数据元素有序集
    2.集合中必存在唯一一个“第一元素”
    3.集合中必须存在唯一一个“最后元素”
    4.除最后一个元素外所有元素都有一个后继
    5.除第一个元素外所有元素都有一个前继
    线性表的抽象数据类型定义

ADT List {
 数据对象:D={ | ∈ ElemSet, i=1,2,…,n, n≥0 }
数据关系:R1={ <ai-1 ,ai >| ,∈D, i=2,…,n }

基本操作:
  {结构初始化}
  InitList( &L )
   操作结果:构造一个空的线性表 L 。

{销毁结构}
  DestroyList( &L )
   初始条件:线性表 L 已存在。
   操作结果:销毁线性表 L 。
例如,26个小写英文字母是一个线性表
     (a,b,…,z)
同一花色的13张扑克牌
  (2,3,4,5,6,7,8,9,10,J,Q,K,A)
可以构成一个线性表。
序偶 <,> 表示 是 的直接前驱,反之, 是 的直接后继。
{引用型操作}
  ListEmpty( L )
   初始条件:线性表L已存在。
   操作结果:若 L 为空表,则返回 TRUE,否则返回 FALSE。

ListLength( L )
   初始条件:线性表 L 已存在。
   操作结果:返回 L 中元素个数。
PriorElem( L, cur_e, &pre_e )
   初始条件:线性表 L 已存在。
   操作结果:若 cur_e 是 L 中的数据元素,则用 pre_e 返回它的前驱,
        否则操作失败,pre_e 无定义。
NextElem( L, cur_e, &next_e )
   初始条件:线性表 L 已存在。
   操作结果:若 cur_e 是 L 中的数据元素,则用 next_e 返回它的后继,
        否则操作失败,next_e 无定义。

GetElem( L, i, &e )
   初始条件:线性表 L 已存在,1≤i≤LengthList(L)。
   操作结果:用 e 返回 L 中第 i 个元素的值。
LocateElem( L, e, compare( ) )
   初始条件:线性表 L 已存在,compare( ) 是元素判定函数。
   操作结果:返回 L 中第1个与 e 满足关系 compare( ) 的元素的位序。
        若这样的元素不存在,则返回值为0。

ListTraverse(L, visit( ))
  初始条件:线性表 L 已存在,visit( ) 为元素的访问函数。
  操作结果:依次对 L 的每个元素调用函数 visit( )。
       一旦 visit( ) 失败,则操作失败。
{加工型操作}

ClearList( &L )
   初始条件:线性表 L 已存在。
   操作结果:将 L 重置为空表。

PutElem( &L, i, &e )
   初始条件:线性表L已存在,1≤i≤LengthList(L)。
   操作结果:L 中第 i 个元素赋值同 e 的值。
 ListInsert( &L, i, e )
   初始条件:线性表 L 已存在,1≤i≤LengthList(L)+1。
   操作结果:在 L 的第 i 个元素之前插入新的元素 e,L 的长度增1。

ListDelete( &L, i, &e )
   初始条件:线性表 L 已存在且非空,1≤i≤LengthList(L)。
   操作结果:删除 L 的第 i 个元素,并用 e 返回其值,L 的长度减1。

} ADT ListADT List {
 数据对象:D={ | ∈ ElemSet, i=1,2,…,n, n≥0 }
数据关系:R1={ <ai-1 ,ai >| ,∈D, i=2,…,n }

基本操作:
  {结构初始化}
  InitList( &L )
   操作结果:构造一个空的线性表 L 。

{销毁结构}
  DestroyList( &L )
   初始条件:线性表 L 已存在。
   操作结果:销毁线性表 L 。
例如,26个小写英文字母是一个线性表
     (a,b,…,z)
同一花色的13张扑克牌
  (2,3,4,5,6,7,8,9,10,J,Q,K,A)
可以构成一个线性表。
序偶 <,> 表示 是 的直接前驱,反之, 是 的直接后继。
{引用型操作}
  ListEmpty( L )
   初始条件:线性表L已存在。
   操作结果:若 L 为空表,则返回 TRUE,否则返回 FALSE。

ListLength( L )
   初始条件:线性表 L 已存在。
   操作结果:返回 L 中元素个数。
PriorElem( L, cur_e, &pre_e )
   初始条件:线性表 L 已存在。
   操作结果:若 cur_e 是 L 中的数据元素,则用 pre_e 返回它的前驱,
       

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值