一、填空题
1.在顺序表中插入或删除一个元素,需要平均移动 表中一半 元素,具体移动的元素个数
与 表长和该元素的个数 有关。
2.线性表中结点的集合是 有限的 的,结点间的关系是 一对一 的。
3.向一个长度为n的向量的第i个元素(1≤i≤n+1)之前插入一个元素时,需向后移动 n-i+1 个元素。
4.向一个长度为n的向量中删除第i个元素(1≤i≤n)时,需向前移动 n-i 个元素。
5.在顺序表中访问任意一结点的时间复杂度均为 O(1) ,因此,顺序表也称为 随机存取 的数据结构。
6.顺序表中逻辑上相邻的元素的物理位置 一定 相邻;单链表中逻辑上相邻的元素的物理位置 不一定 相邻。
7.在单链表中,除了首元结点外,任一结点的存储位置由 其直接前驱和链域的值 指示。
8.在n个结点的单链表中要删除已知结点*p,需找到它的 前驱结点 ,其时间复杂度为 O(n) 。
二、判断正误
( 错 )1. 链表的每个结点中都恰好包含一个指针。
( 错 )2. 链表的物理存储结构具有同链表一样的顺序。
( 错 )3. 链表的删除算法很简单,因为当删除链中某个结点后,计算机会自动将后续各个单元向前移动。
( 错 )4. 线性表的每个结点只能是一个简单类型,而链表的每个结点可以是一个复杂类型。
( 错 )5. 顺序表结构适宜于进行顺序存取,而链表适宜于进行随机存取。
( 错 )6. 顺序存储方式的优点是存储密度大,且插入、删除运算效率高。
( 错 )7. 线性表在物理存储空间中也一定是连续的。
( 错 )8. 线性表在顺序存储时,逻辑上相邻的元素未必在存储的物理位置次序上相邻。
( 错 )9. 顺序存储方式只能用于存储线性结构。
( 错 )10. 线性表的逻辑顺序与存储顺序总是一致的。
三、单项选择题
( C )1.数据在计算机存储器内表示时,物理地址与逻辑地址相同并且是连续的,称之为:
(A)存储结构 (B)逻辑结构 (C)顺序存储结构 (D)链式存储结构
( B )2. 一个向量第一个元素的存储地址是100,每个元素的长度为2,则第5个元素的地址是
(A)110 (B)108 (C)100 (D)120
( A )3. 在n个结点的顺序表中,算法的时间复杂度是O(1)的操作是:
( B )4. 向一个有127个元素的顺序表中插入一个新元素并保持原来顺序不变,平均要移动 个元素
(A)8 (B)63.5 (C)63 (D)7
( A )5. 链接存储的存储结构所占存储空间:
(C) 只有一部分,存储表示结点间关系的指针
(D) 分两部分,一部分存放结点值,另一部分存放结点所占单元数
( B )6. 链表是一种采用 存储结构存储的线性表;
(A)顺序 (B)链式 (C)星式 (D)网状
( D )7. 线性表若采用链式存储结构时,要求内存中可用存储单元的地址:
(A)必须是连续的 (B)部分地址必须是连续的
(C)一定是不连续的 (D)连续或不连续都可以
( B )8. 线性表L在 情况下适用于使用链式结构实现。
(A)需经常修改L中的结点值 (B)需不断对L进行删除插入
(C)L中含有大量的结点 (D)L中结点结构复杂
( C )9. 单链表的存储密度
(A)大于1; (B)等于1; (C)小于1; (D)不能确定
( B )10. 设a1、a2、a3为3个结点,整数P0,3,4代表地址,则如下的链式存储结构称为
|
P0 |
|
|
3 |
|
|
4 |
|
|
P0 |
à |
a1 |
3 |
à |
a2 |
4 |
à |
a3 |
0 |
(A)循环链表 (B)单链表 (C)双向循环链表 (D)双向链表
四、简答题
1. 试比较顺序存储结构和链式存储结构的优缺点。在什么情况下用顺序表比链表好?
(1)顺序存储时,相邻元素的存放地址也相邻(逻辑与物理统一);要求内存中可用存储单元的地址必须是连续的。
优点:存储密度大(=1?),存储空间利用率高。缺点:插入删除元素时不方便。
(2)链式存储时,相邻数据元素可随意存放,但所占存储空间分两部分,一部分存放节点值,另一部分存放表示节点间关系的指针。
优点:插入删除元素时很方便,使用灵活。缺点:存储密度小(<1),存储空间利用率低。
顺序表适宜于做查找这样的静态操作;链表宜与做插入、删除这样的动态操作。
若线性表长度变化不大,且其主要操作是查找,则采用顺序表。
若线性表长度变化较大,且其主要操作是插入、删除操作,则采用链表。
2 . 在单链表中设置头结点的作用是什么?
首元结点是指链表中存储线性表中第一个数据元素a1的结点。为了操作方便,通常在链表的首元结点之前附设一个结点,称为头结点,该结点的数据域中不存储线性表的数据元素,其作用是为了对链表进行操作时,可以对空表、非空表的情况以及对首元结点进行统一处理。头指针是指向链表中第一个结点(或为头结点或为首元结点)的指针。若链表中附设头结点,则不管线性表是否为空表,头指针均不为空。否则表示空表的链表的头指针为空。这三个概念对单链表、双向链表和循环链表均适用。是否设置头结点,是不同的存储结构表示同一逻辑结构的问题。
简而言之,
头指针是指向链表中第一个结点(或为头结点或为首元结点)的指针;
头结点是在链表的首元结点之前附设的一个结点;数据域内只放空表标志和表长等信息(内放头指针?那还得另配一个头指针!!!)
首元素结点是指链表中存储线性表中第一个数据元素a1的结点。
五、线性表具有两种存储方式,即顺序方式和链接方式。现有一个具有五个元素的线性表L={23,17,47,05,31},若它以链接方式存储在下列100~119号地址空间中,每个结点由数据(占2个字节)和指针(占2个字节)组成,如下所示:
05 |
U |
17 |
X |
23 |
V |
31 |
Y |
47 |
Z |
|
^ |
|
|
|
|
|
|
|
|
|
^ |
100 |
|
|
|
|
|
|
|
|
|
120 |
其中指针X,Y,Z的值分别为多少?该线性表的首结点起始地址为多少?末结点的起始地址为多少?
X:116 Y:0 Z:100
首节点其实地址:108
末节点的起始地址:112
六、编程题
1. 写出在顺序存储结构下将线性表逆转的算法,要求使用最少的附加空间。
2. 编写程序,将若干整数从键盘输入,以单链表形式存储起来,然后计算单链表中结点的个数(其中指针P指向该链表的第一个结点)。
个人意见仅供参考(期末复习,纯手打)