复习三:线性表

一、线性表定义

      线性表是具有相同数据类型的n(n > 0数据元素有限序列,其中n为表长n = 0
时线性表是一个空表线性表是一种逻辑结构,顺序表与链表是存储结构
        线性表特点:
  1. 表中元素的个数有限
  2. 表中元素具有逻辑上的顺序性,表中元素有其先后次序。
  3. 表中元素都是数据元素,每个元素都是单个元素。
  4. 表中元素的数据类型都相同,这意味着每个元素占有相同大小的存储空间。
  5. 表中元素具有抽象性,即仅讨论元素间的逻辑关系,而不考虑元素究竟表示什么内容。

二、顺序表

        线性表的顺序存储又称顺序表。顺序表的特点是表中元素的逻辑顺序与其物理顺序相同;

        顺序表最主要的特点是随机访问即通过首地址和元素序号可在时间0(1)内找到指定的
元素。顺序表的存储密度高,每个结点只存储数据元素。 顺序表逻辑上相邻的元素物理上也相邻,所以插入和删除操作需要移动大量元素
静态顺序表定义【用数组表示】

 动态顺序表定义【利用指针、malloc()函数】 初始动态分配语句

动态分配并不是链式存储、它同样属于顺序存储结构,物理结构没有变化,依然是随
机存取方式,只是分配的空间大小可以在运行时动态决定。

三、顺序表基本操作

(1)插入操作
在顺序表L的第i (l<=i<=L. length+1)个位置插入新元素ei的输入不合法则返回false,表示插入失败否则将第i个元素及其后的所有元素依次往后移动一个位置腾岀一个空位置插入新元素e,顺序表长度增加1,插入成功返回true
最好情况∶在表尾插入(即 i=n+1),元素后移语句将不执行,时间复杂度为 O(1)。
最坏情况∶在表头插入(即i=1),元素后移语句将执行n次,时间复杂度为O(n)。
平均情况∶时间复杂度为0(n)
(2)删除操作
删除顺序表L中第i (l<=i<=L. length)个位置的元素用引用变量e返回i的输入不合法,则返回false;否则,将被删元素赋给引用变量e,并将第i+ l个元素及其后的所有
元素依次往前移动一个位置,线性表长度减一,返回true
最好情况删除表尾元素(即i=n),无须移动元素,时间复杂度为0(1)。
最坏情况删除表头元素(即i=l),需移动除表头元素外的所有元素,时间复杂度为0(n)
平均情况:时间复杂度为O(n)

(3)按值查找(顺序查找)
在顺序表L中查找第一个元素值等于e的元素并返回其位序
四、顺序表的链式表示
1、单链表:线性表的链式存储又称单链表,它是指通过一组任意的存储单元来存储线性表中的数据元素。单链表结点结构如图2.3所示,其中data为数据域,存放数据元素;next为指针域,存放其后继结点的地址。
单链表中结点类型:

 

头结点和头指针的区分不管带不带头结点头指针都始终指向链表的第一个结点而头结
点是带头结点的链表中的第一个结点结点内通常不存储信息
2、单链表的创建
(1)头插法建立单链表:将新结点插入到当前链表的表头即头结点之后

采用头插法建立单链表时,读入数据的顺序与生成的链表中的元素的顺序是相反的。每个结
点插入的时间为O1),设单链表长为n,则总时间复杂度为 O(n)
(2)尾插法建立单链表:将新结点插入到当前链表的表尾,为此必须增加一个尾指针r,使其始终指向当前链表的尾结点

 

3、双链表
双链表结点中有两个指针prior和next,分 别指向其前驱结点和后继结点,如图2.9所示

(1)双链表的插入
4、循环单链表
循环单链表和单链表的区别在于,表中最后一个结点的指针不是NULL,而改为指向头结点, 从而整个链表形成一个环,如图2.12所示。 在循环单链表中,表尾结点*r的 next 域指向L,故表中没有指针域为 NULL的结点,因此, 循环单链表的判空条件不是头结点的指针是否为空,而是它是否等于头指针

5、循环双链表

由循环单链表的定义不难推出循环双链表。不同的是在循环双链表中,头结点的prior指 针还要指向表尾结点,如图2.13所示

在循环双链表L中,某结点*p为尾结点时,p->next==L;当循环双链表为空表时,其头结点的 prior域和 next域都等于L
6、静态链表
静态链表借助数组来描述线性表的链式存储结构,结点也有数据域 data 和指针域 next,静态链表也要预先分配一块连续的内存空间

 


                                                         习题                

参考答案:C

 参考答案:A

 参考答案D

 

参考答案D

 

 

 

 

参考答案D

 

 参考答案c

  

 参考答案C

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值