目录
1.线性表
线性表(linear list)是是n个具有相同特性的数据元素的有序序列。线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表,链表,栈,队列,字符串……
线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的,线性表在物理上存储时,通常以数组和链式结构的形式存储。
2.顺序表
2.1概念:
顺序表使用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改。
顺序表一般可以分为:
(1)静态顺序表:使用定长数组存储。
(2)动态顺序表:使用动态开辟的数组存储;
*静态顺序表只适用于确定知道需要知道存储多少数据的场景。静态顺序表的定长数组导致N定打了,空间开多了浪费,开少了不够用。现实中基本都是使用动态顺序表,根据需要动态的分配空间大小。
3.链表
3.1链表的概念及结构
概念:链表是一种物理存储结构上非连续,非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针连接次序决定的。
实际中要实现的链表的结构非常多样,以下情况组合起来就有8种;
(1)单向,双向
(2)带头,不带头
(3)循环,非循环
1.单链表,双向链表
2.不带头单链表,带头单链表
3.单链表循环单链表
但实际常用的有两种;
1.无头单向非循环链表
2.带头双向循环链表
1.无头单向非循环链表:结构简单,一般不会单独用来存数据。实际中更多的是作为其他数据结构的子结构,如哈希桶,图的邻接表等等。另外这种结构在笔试面试种出现很多;
2.带头双向循环链表:结构最复杂,一般用在单独存储数据。在实际中使用的链表数据结构,都是带头双向循环链表。另外这个结构虽然复杂,但是使用代码实现以后会发现结构会带来很多优势,实现反而简单了;
4.顺序表和链表的区别和联系
顺序表:
优点:空间连续,支持随机访问
缺点:
1.中间或前面部分的插入删除是按复杂度O(N)(因为要挪数据)。
2.增容的代价比较大。
链表;
缺点:
以节点为单位存储,不支持随机访问
优点:
1.任意位置插入删除时间复杂度为O(1)
2.没有增容消耗
5.顺序表和链表概念选择题
1.在一个长度为n的顺序表中删除第i个元素,要移动_______个元素。如果要在第i个元素前插入一个 元素,要后移_________个元素。(A)
A n-i,n-i+1
B n-i+1,n-i
C n-i,n-i
D n-i+1,n-i+1
解析:删除第i个元素,要移动后面n-i个元素
在第i个元素之前插入,要移动包括i在内的n-i+1个元素2.取顺序表的第i个元素的时间同i的大小有关(B)
A 对
B 错
3.在一个具有 n 个结点的有序单链表中插入一个新结点并仍然保持有序的时间复杂度是 。(B)
A O(1)
B O(n)
C O(n2)
D O(nlog2n)
解析:需要遍历
4.下列关于线性链表的叙述中,正确的是( C)。
A 各数据结点的存储空间可以不连续,但它们的存储顺序与逻辑顺序必须一致
B 各数据结点的存储顺序与逻辑顺序可以不一致,但它们的存储空间必须连续
C 进行插入与删除时,不需要移动表中的元素
D 以上说法均不正确
解析:
链表:存储空间可以不连续,但逻辑上必须连续,不需要和存储顺序一致
链表插入删除是修改指针指向,不需要挪动数据
5.设一个链表最常用的操作是在末尾插入结点和删除尾结点,则选用(D)最节省时间。
A 单链表
B 单循环链表
C 带尾指针的单循环链表
D 带头结点的双循环链表
6.链表不具有的特点是(C)。
A 插入、删除不需要移动元素
B 不必事先估计存储空间
C 可随机访问任一元素
D 所需空间与线性表长度成正比
7.在一个单链表中,若删除 P 所指结点的后续结点,则执行?(C)
A p = p->next;p->next = p->next->next;
B p->next = p->next;
C p->next = p->next->next;
D p = p->next->next
8.一个单向链表队列中有一个指针p,现要将指针r插入到p之后,该进行的操作是____。(C)
A p->next=p->next->next
B r->next=p;p->next=r->next
C r->next=p->next;p->next=r
D r=p->next;p->next=r->next
E r->next=p;p->next=r
F p=p->next->next