线性表(一)

线性表

定义:

线性表(List):由零个或多个数据元素组成的有限序列

强调几点:
1. 首先它是一个序列,有一定的顺序。
2. 如果有多个元素,第一个元素没有前驱,最后一个没有后继;让其他元素有且只有一个前驱和一个后继。
3. 线性表强调是有限的。

如果用数学语言来定义,如下:
如果将线性表记为(a1,…,ai-1,ai,ai+1,…,an),则表中ai-1领先于ai,ai领先于ai+1,称ai-1是ai的直接前驱元素,ai+1是ai的直接后继元素。
所以线性表元素的个数n(n>=0)定义为线性表的长度,当n=0时,称为空表。

线性表的相关操作

类似于安排一个队伍,最初我们需要创建和初始化;有人离队归队,就是删除插入元素;寻找某一个成员,查找的实现。
ADT 线性表 (List)
Date
线性表的数据对象集合为{a1,a2,…,an},每个元素的类型均为Datetype。元素之间的关系是一对一的关系。
Operation

  • InitList(*L)初始化操作尽力一个空的线性表L。
  • ListEmpty(L):判断线性表是否为空表,若线性表为空,则返回true,否则返回false。
  • ClearList(*L):将线性表清空。
  • GetElem(L,i,*e):将线性表L中的第i个位置元素返回给e。
  • LocateElem(L,e):在线性表L中查找与给定值e相等的元素,如果查找成功,返回该元素在表中序号表示成功,否则返回0表示失败。
  • ListInsert(*L,i,e):在线性表L中第i个位置插入新元素e。
  • ListDelete(*L,i,*e):删除线性表L中第i个位置元素,并用e返回其值。
  • ListLength(L):返回线性表L的元素个数。
    endADT

对于不同的应用,所需要的基本操作是不同的,虽与一些复杂问题,我们完全可以用上述基本操作组合实现。
举个例子,实现AB的并集:我们可以循环遍历B中的每个元素,如果A中没有,那么插入A。
我们会用到以下几个操作:

  • ListLength(L):返回线性表L的元素个数,为循环提供参数。
  • GetElem(L,i,*e):将线性表L中的第i个位置元素返回给e,获取我们要的元素。
  • LocateElem(L,e):在线性表L中查找与给定值e相等的元素,判断我们是否需要这个元素。
  • ListInsert(*L,i,e):在线性表L中第i个位置插入新元素e,插入新元素。
void unionL(List *La, List Lb){
    int La_len = ListLength(La),
        lb_len = ListLength(Lb);
        ElemType e;
    for(int i = 0;i<Lb_len;i++ ){
        GetElem(L,i,*e);                   //获取Lb中的元素
        if( !LocateElem(*La,e) ){          //判断得到的元素是否在线性表La中
            ListInset(*La,i,e);            //插入元素
        }
    }
}

下一篇我们会给出具体的实现方法

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值