第2章 线性表
一、判断题
1 线性关系的逻辑结构与存储结构总是一致的。
解:错。单链表的逻辑结构与存储结构有可能是不一致的,有可能两个相邻结点的存储地址并不是相邻的。
2 每种数据结构都包括插入、删除和查这三种基本运算。
解:错。散列结构无插入与删除运算;栈没有查,查须配有另一个栈。
3 线性表中的每个结点最多只有一个前驱和一个后继。
解:对。线性表的定义为:表中任意一个元素至多有一个前驱,至多有一后继。
4 线性的数据结构既可以顺序存储,也可以链接存储;非线性的数据结构则只能链接存储。
解:错。对于非线性的数据结构,若对它的数据规定某种次序之后,也可以顺序存储。如,树
的前、中、后序遍历之后的存储,一个前驱可能对应多个后继。
5 顺序存储方式只能用于存储线性结构。
解:错。非线性结构也可采用顺序存储。
6 多维数组是向量的推广。
解:对。多维向量的存储方式实际上与一维向量是一致的。
7 设串s的长度为n,则s的子串个数最多为n (n+1)/2。
解:错。s的长度为n,故它含有n个字符,它的子串应包括:1个字符的子串,2个字符的子串,…,n个字符的子串;这些子串的个数分别为
8 单链表从任何一个结点出发,都能访问到所有结点。
解:错。单链表仅能从头结点出发去访问所有结点,不能访问前驱。
9 线性表的长度是线性表所占用的存储空间的大小。
解:错。线性表所占用的存储空间大小为:每个结点所占用的存储字节数乘以线性表的长度。
10 双循环链表中,任意一结点的后继指针均指向其逻辑后继。
解:错。任意结点的后继结点包含有两个指针llink和rlink,只有rlink指向其逻辑后继,而llink指向其逻辑前驱。
11 数据结构、数据元素、数据项在计算机中的映象(或表示)分别称为存储结构、结点、数据域。
解:对。
12 线性表的顺序存储结构优于链式存储结构。
解:错。各有优缺点。
顺序存储结构的优点是:
(1)存储效率高。(2)可随机访问任意结点,存取速度快。
顺序存储结构的缺点是:
(1)插入与删除操作麻烦。(2)顺序表的长度扩充麻烦。
链式存储结构的优点是:
(1)插入与删除方便。(2)顺序表的长度可任意(动态分配内存)。
链式存储结构的缺点是:
(1)存储效率低。(2)对结点的访问不方便。
二、选择题
1 若长度为n的线性表采用顺序存储结构,在其第i个位置插入一个新元素的算法的时间复杂度为 C ,元素的移动次数为 F ( 0≤ i ≤n ) 。
(A).O(0) (B).O(1) (C).O(n) (D).O(n2)
(E).n-i+1 (F).n-i (G).i (H).i -1
解:选C与E。因为,需要第i数据结构与算法第二版课后题答案个位置至第n个位置的n-i+1个元素向后逐一移动,因此,共做n-i+1次赋值运算,故T(n)=n-i+1,即T(n)=O(n)。
2 在长度为n的顺序存储的线性表中,删除第i个元素(0≤ i ≤n-1)时,需要从前向后依次前移 C 个元素。
(A).n-i (B).n-i+1 (C).n-i-1 (D).i
解:选C。因为前移元素的个数为n-i。
3 从解决问题的需要出发,为实现必要的功能所建立的数据结构,称为 B 。
(A).物理结构 (B).逻辑结构 (C).数据类型 (D).数据对象
解:选B。
4 若长度为n的线性表采用顺序存储结构,在其第i (0≤ i ≤n )个位置插入一个新元素的平均移
动元素移动次数为 C ,在其第i (0≤ i ≤n-1 )个位置删除一个元素的平均移动元素移动次数为 D 。
(A).n (B).(n+1)/2 (C).n/2 (D).(n-1)/2
解:选C。因为,在第0个位置插入新元素应移动n个元素,而在第1个位置插入新元素应移动n-1个元素,一般地,在第i (0≤ i ≤n )个位置插入一个新元素应移动n-i个元素,而在某个位置上插入新元素的概率为1/(n+1),故平均移动的次数为
n/(n+1)+(n-1)/(n+1)+…+(n-i)/(n+1)+…+1/(n+1)+0/(n+1)=n/2
选D。因为,在第0个位置删除一个元素应移动n-1个元素,而在第1个位置删除元素应移动n-2个元素,一般地,在第i (0≤ i ≤n-1 )个位置删除一个元素的应移动n-i-1个元素,而在某个位置上删除元素的概率为1/n,故平均移动的次数为
(n-1)/n+(n-2)/n+…+(n-i-1)/n+…+1/n+0/n=(n-1)/2
5 若长度为n的无序线性表采用顺序存储结构,在其中查某个元素的平均比较的次数为
D 。
(A).n (B).(n-1)/2 (C).n/2 (D).(n+1)/2
解:选D。n个元素的排列方式有n!种,而某个指定元素排在第i个位置的种数为(n-1)!,故某个指定元素恰好排在第i个位置的概率为(n-1)!/n!=1/n。这表明,待查的元素恰好排在第1个位置、第2个位置、…和第n个位置的概率均为1/n。
若待查的元素排在第i个位置,那么查的次数为i次(1≤ i ≤n),故平均查次数为
1/n+2/n+…+i/n+…+n/n=(n+1)/2
6 对于只在首、尾两端进行插入操作的线性表,宜采用的存储结构为 。
(A).顺序表 (B).带头指针的单链表
(C).带尾指针的单循环链表 (D).单链表
解:选C。
7 在一个单链表中,若要在指针q所指结点的后面插入一个由指针p所指向的结点,则执行 。
(A).q->link = p->link;p->link = q; (B).p->link = q->link;q = p;
(C).q->link = p->link;p = q; (D).p->link = q->link;q->link = p;
解:选D。
8 在一个单链表HL中,若要向表头插入一个由指针p指向的结点,则执行 。
(A).HL = p; p->next = HL; (B).p->link = HL; HL = p;
(C).p->link = HL; p = HL; (D).p->link = HL->link; HL->link = p;
解:若单链表不带头结点,则应选B。若单链表带头结点,则应选D。
9 在一个单链表HL中,若要删除由指针q所指向结点的后继结点,则执行 。
(A).p=q-> link ; p->link = q->link; delete p;
(B).p = q->link ; q->link = p; delete p;
(C).p = q->link ; q->link = p->link; delete p;
(D).q->link = q->link->link; q->link = q;
解:选C。若选D,则链表中没有了q的后继结点,但未删除。仅C选项可使q的后继结点被删除,并按原有结点顺序重新拉链。
10 设p为有头结点双向循环链表中某结点的指针,lLink为左链指针,rLink为右链指针,则下述表达式中, 不恒为真。
(A).p->rLink->lLink == p (B).p->rLink->lLink==p->lLink->rLink
(C).p->lLink->rLink==p (D).p->rLink->rLink==p->lLink->lLink
解:选D。因为p->rLink->lLink == p== p->lLink->rLink,故只有D不一定为真。
11 若某链表最常用的操作是在最后一个结点之后插入一个结点和删除最后一个结点,则采用 存储方式最节省时间。
(A).单链表 (B).双向链表 (C).带头结点的双循环链表 (D).单循环链表
解:选C。
12 链表不具有的特点是 。
(A).可随机访问任一元素 (B).插入删除不需要移动元素
(C).不必事先估计存储空间 (D).所需空间与线性表长度成正比
解:选A。
13 线性表采用链式存储时,其地址 。
(A).连续的 (B).部分连续的
(C).一定是不连续的 (D).连续与否均可
解:选D。
14 设有一8×8下三角矩阵A[8][8],采用按行压缩存储的方式存放在一维数组B[ ]中,则数组B[ ]的容量至少需要 B 个元素空间。
(A).32 (B).36 (C).16 (D).64
解:选B。矩阵的第1行有8个非零元素,第2行有7个非零元素,…,第8行有1个非零元素,故需要存储的非零元素的个数为
8+7+6+5+4+3+2+1=8*(1+8)/2=36
三、填空题
1 对于一个长度为n的顺序存储的线性表,在表头插入元素的时间复杂度为 ,在表尾插入元素的时间复杂度为 。
解:在表头(即第0个位置)插入元素,需移动的元素个数为n,然后再做1次赋值操作,故T(n)=n+1=O(n)。在表尾插入元素无需移动表中已有元素,只需1次赋值操作,故T(n)=1=O(1)。
2 在线性表的单链接存储中,若一个元素所在结点的地址为p,则其后继结点的地址为 ,若假定p为一个数组a中的下标,则其后继结点的下标为 。
解:应填入p->link,p+1
3 在单循环链表中,最后一个结点的指针指向 结点。
解:表头结点。
4 在双向链表中每个结点包含有两个指针域,一个指向其 结点,另一个指向 其 结点。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论