03

严蔚敏视频 笔记03

线性结构 数据元素的有序集

 

线性结构的基本特征:

集合中必存在唯一一个“第一元素”

集合中必存在唯一一个“最后元素”

除最后元素外均有唯一的后继

除第一元素外均有唯一的前驱

 

2.1 线性表的类型定义

 

ADT List {

数据对象:

    D={ai|aiElemSet,i=1,2,...n,n>=0}

      {n为线性表的表长,n=0时的线性表为空表}

 

数据关系:

    R1={<ai-1,ai>|ai-1,aiD,i=2,...n}

       {设线性表为(a1,a2,...an),称iai在线性表中的位序}

 

基本操作:

{结构初始化}

InitList(&L)

操作结果:构造一个空的线性表L

 

{销毁结构}

DestroyList(&L)

初始条件:线性表L已存在

操作结果:销毁线性表L

 

{引用型操作}

操作结果不改变原来

ListEmpty(L)

初始条件:线性表L已存在

操作结果:若L为空表,则返回TRUE,否则返回FALSE

ListLength(L)

初始条件:线性表L已存在

操作结果:返回L中元素个数

PriorElem(L,cur_e,&pre_e)

初始条件:线性表L已存在

操作结果:若cur_eL的元素,但不是第一个,则用pre_e返回它的前驱,否则操作失败,pre_e无定义

NextElem(L,cur_e,&next_e)

初始条件:线性表L已存在

操作结果:若cur_eL的元素,但不是最后一个,则用next_e返回它的前驱,否则操作失败,next_e无定义

GetElem(L,i,&e)

初始条件:线性表L已存在,1<=i<=LengthList(L)

操作结果:用e返回L中第i个元素的值

LocateElem(L,e,compare())

初始条件:线性表L已存在,compare()时元素判定函数

操作结果:返回L中第一个与e满足关系compare()的元素的位序,若这样的元素不存在,则返回值为0

ListTraverse(L,visit())

初始条件:线性表L已存在

操作结果:依次对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个元素之前插入新的元素eL的长度增1

ListDelete(&L,i,&e)

初始条件:线性表L已存在且非空,1<=i<=LengthList(L)

操作结果:删除L的第i个元素,并用e返回其值,L的长度减1

 

}

 

1

假设有两个集合AB分别用两个线性表LALB表示(即线性表中的数据元素即为集合中的成员)

现要求一个新的集合A=AB

 

 

2

已知一个非纯集合B,试构造一个纯集合A,使A中只包含B中所有值各不相同的数据元素

 

 

3

归并两个“其数据元素按值非递减有序排列”的线性表LALB,求得线性表LC也具有同样特性

 

 

2.2 线性表类型的实现 ——顺序映象

用一组地址连续的存储单元依次存放线性表中的数据元素

 

起始地址 基地址

 

LOC(ai)=LOC(a1)+(i-1)*C

 

顺序映象的C语言描述

#define LIST_INIT_SIZE 80 //线性表存储空间的初始分配量

#define LISTINCREMENT 10 //线性表存储空间的分配增量

typedef struct {

    ElemType *elem; //存储空间基址

    int length; //当前长度

    int listsize; //当前分配的存储容量(以sizeof(ElemType)为单位)

} SqList;

顺序表

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值