第二章 线性表

本文详细介绍了线性表的抽象数据类型定义,包括基本操作如插入、删除、查找等,并探讨了线性表的两种实现方式:顺序映像和链式映像。在顺序映像中,讨论了插入和删除操作的时间复杂度,而在链式映像中,重点介绍了单链表的结构和操作。此外,还涵盖了链表操作的时间复杂度分析。
摘要由CSDN通过智能技术生成

线性结构是一个数据元素的有序(次序)集---非数值上的有序

基本特征:1.集合中必存在唯一的一个“第一元素”

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

                  3.除最后元素在外,均有唯一的后继

                  4.除第一个元素之外,均有唯一的前驱

2.1线性表的类型定义

抽象数据类型线性表的定义:

     ADT List{

             数据对象:

             D={ai|ai∈ElemSet,i=1,2,……,n,n>=0}

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

            数据关系:

             R1={<ai-1,ai>|ai-1,ai∈D,i=2,……n}

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

       }

基本操作:

1.结构初始化

InitList(&L)        构造一个空的线性表L

2.销毁结构

DestroyList(&L)

初始条件:L已存在          结果:销毁L

3.引用型操作----操作结果不改变结果

ListEmpty(L)空表返回true,否则返回false

ListLength(L)求长度

ListElem(L,cur_e,&pre_e)        若cur_e是L的元素,但不是第一个,pre_e返回它的前驱,否则操作失败

NextElem(L,cur_e,&next_e)若cur_e是L的元素,但不是最后一个,next_e返回它的后继,否则操作失败

GetElem(L,i,&e)  用e返回L第i个元素的值,(初始条件必须满足:保证i的参数在范围内---不需要再算法中实现)

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

ListTraverse(L,visit())   依次对L的每个元素调用visit()函数,一旦调用失败,则操作失败

4.加工型操作----结果改变结构

ClearList(&L)    将L重置为空表(前提:线性表L已存在)

PutElem(L,i,&e)             L中第i个元素赋值为e   前提:i符合范围

ListInsert(&L,i,e)    在L的第i个元素之前插入e,L的长度增1   前提:1<=i<=原始长度+1

ListDelete(&L,i,&e) 删除L的第i个元素,并用e返回值,长度-1

5.更复杂的操作

例1:A=A∪B-----扩大线性表LA,将存在于线性表LB中而不存在于线性表LA中的数据元素插入到线性表LA中去

                  1)从线性表LB中一次取得每个数据元素GetElem(LB,i,&e) ----e

                  2)依值在线性表LA中进行查访LocateElem(LA,e,equal())

                  3)若不存在,则插入之ListInsert(&LA,i,e)        

void union(List &La,List Lb){
    La_len=ListLength(La);
    Lb_len=ListLength(Lb);
    for(i=1,i<=Lb_len;i++){
        GetElem(Lb,i,e);//取Lb中第i个数据元素赋给e
        if(!LocateElem(La,e,equal())
            ListInsert(La,++La_len,e);//La中不存在和e相同的数据,插入之
    }
}

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

算法一:A为空,在A中查找有无重复的值

void purge(List &
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值