算法与数据结构1800题 之线性表 (一)

329 阅读4分钟

线性表是又穷序列,由0或者多个元素组成,长度为零的称为空表

线性表的顺序存储结构:数组
线性表的链式存储结构:链表
数组可以实现随机访问,和随机存储,简称随机存取的存储结构
链表必须按照顺序从头节点开始寻找,简称顺序存取的存储结构
索引存取的存储结构:Map,节点维护一个索引表,按照索引来进行存取
线性表是逻辑结构,而数组和链表是线性表的两种实现,是存储结构(具体实现)

ABD
二叉树的顺序存储结构:将二叉树当做一个完全二叉树,或者满二叉树,按照层次遍历的方式将二叉树存储在数组中,对于二叉树中的空节点,使用某种空标志来替代,浪费大量空间
逻辑上相邻的,物理存储不一定相邻
栈和队列就具有查找操作
D选项有问题

O(1)是指常数时间
单链表,单向循环链表,双向链表,都是O(n)

线性表是具有相同数据类型的n个数据元素构成的有限序列
数据项构成了数据元素
头结点,就是为了操作上的方便,也就是方便运算的实现,不是为了表明表节点中首节点的位置(使用头指针也可以表明)

链表,如果需要在最后插入和删除的话, 需要 从头结点,一直顺序找到尾节点

D
循环单链表的最后一个元素的指针指向头结点,如果循环单链表只设头指针,那么如果需要找到尾节点进行操作,需要遍历整个链表
循环链表的尾指针,只要next一下,就是头结点,所以,如果只是对最后一个元素和第一个元素进行操作,可以使用仅有头指针的单循环链表,这样,如果对最后一个元素进行操作(删除),只需要直接使用尾指针进行操作,而如果需要对头指针进行操作(插入),仅仅需要将尾指针next一线即可

如果使用带尾指针的单循环链表,在删除尾节点的时候,需要遍历整个线性表,找到尾节点的前一个节点,而是使用带有头结点的双循环链表,可以使得头结点直接退一步会这两个节点,找到对应的节点

D ,同上

B,存储结构能反映数据之间的逻辑关系,应该用链表,而不是线性表

A,线性表可以实现随机读取,所以读取时间最少

D

指针
链表中的指针不是指向数据元素的,而是指向包装了数据元素和指针的节点的,所以,属于之间的关系是通过指针来实现的,而不是通过指示数据元素的指针来实现的

C
静态链表是借助数组来描述线性表的链式存储结构,结点也有数据域和指针域,与链表中的指针不同的是,这里的指针是节点的相对地址(数组下标,也成为游标),静态链表在使用前也需要分配一块连续的内存空间
适用于不支持指针的语言中

B

A

B

C,静态链表需要提前分配空间,如果只有少量的数据,则会有浪费的存储空间

C

好题

由于1<= i <= n+1,所以,概率为(1/(n+1)), 平均移动次数为:
(1/(n+1)) * (n(n+1)/2) == n/2

A

C

C

D

D

以下是带有头结点的循环单链表,Header指向头结点,线性表的长度,指的是不算头结点的长度

1,不含任何元素,只有一个头结点,则head->next->next->next还是head
2,含有两个元素

C
单链表默认为只有头指针,那么需要将长度为m的链表的头指针,移动到链表的尾部,也就是需要O(m)的时间复杂度

D