看完了知识点,接下来看看练习题吧。
『经典例题解析』
1.线性表的特点是每个元素都有一个前驱和一个后继。( )
【答案】错误。
【解析】线性表的第一个数据元素没有前驱,最后一个元素没有后继。其余的所有元素都有一个前驱和后继。
2.假设有两个按元素值递增次序排列的线性表,均以单链表形式存储。请编写算法将这两个单链表归并为一个按元素值递减次序排列的单链表,并要求利用原来两个单链表的结点存放归并后的单链表。
【解析】因为两链表已按元素值递增次序排列,将其合并时,均从第一个结点起进行比较,将小的链入链表中,同时后移链表工作指针。该问题要求结果链表按元素值递减次序排列。故在合并的同时,将链表结点逆置。
LinkedList Union(LinkedList la,lb)
∥la,lb分别是带头结点的两个单链表的头指针,链表中的元素值按递增序排列,本算法将两链表合并成一个按元素值递减次序排列的单链表。
{ pa=la->next; pb=lb->next;∥pa,pb分别是链表la和lb的工作指针
la->next=null; ∥la作结果链表的头指针,先将结果链表初始化为空。
while(pa!=null && pb!=null)∥当两链表均不为空时作
{ if(pa->data<=pb->data)
{ r=pa->next; ∥将pa的后继结点暂存于r。
pa->next=la->next; ∥将pa结点链于结果表中,同时逆置。
la->next=pa;
pa=r; ∥恢复pa为当前待比较结点。
}
else
{ r=pb->next;∥ 将pb的后继结点暂存于r。
pb->next=la->next;∥将pb结点链于结果表中,同时逆置。
la->next=pb;
pb=r;∥恢复pb为当前待比较结点。
}
}
while(pa!=null) ∥将la或lb表的剩余部分链入结果表,并逆置。
{r=pa->next; pa->next=la->next; la->next=pa; pa=r; }
while(pb!=null)
{r=pb->next; pb->next=la->next; la->next=pb; pb=r; }
}∥算法Union结束。
[算法讨论]上面两链表均不为空的表达式也可简写为while(pa&&pb),两递增有序表合并成递减有序表时,上述算法是边合并边逆置。也可先合并完,再作链表逆置。后者不如前者优化。算法中最后两个while语句,不可能执行两个,只能二者取一,即哪个表尚未到尾,就将其逆置到结果表中,即将剩余结点依次前插到结果表的头结点后面。
3.下述哪一条是顺序存储结构的优点?( )
A.存储密度大B.插入运算方便
C.删除运算方便D.可方便地用于各种逻辑结构的存储表示
【答案】A。
【解析】顺序存储利用物理的邻接关系表示数据元素之间的逻辑关系,因此没有必要设置指针域,所以其存储密度比链式存储大,但是插入运算和删除运算都需大量移动数据元素,并不方便;D选项并不是顺序存储结构的优点。
4.下面关于线性表的叙述中,错误的是哪一个?( )
A.线性表采用顺序存储,必须占用一片连续的存储单元。
B.线性表采用顺序存储,便于进行插入和删除操作。
C.线性表采用链接存储,不必占用一片连续的存储单元。
D.线性表采用链接存储,便于插入和删除操作。
【答案】B。
【解析】线性表采用顺序存储,并不便于进行插入和删除操作。
5.若某线性表最常用的操作是存取任一指定序号的元素和在最后进行插入和删除运算,则利用( )存储方式最节省时间。
A.顺序表 B.双链表 C.带头结点的双循环链表 D.单循环链表
【答案】A。
【解析】“存取任一指定序号”最好的方法是实现“随机存取”,则可采用顺序表。并且,因为插入和删除操作都是在最后进行的,因此无需大量移动数据元素,选项A是最合适的。
6.若长度为n的线性表采用顺序存储结构,在其第i个位置插入一个新元素的算法的时间复杂度为( )(1<=i<=n+1)。
A. O(0) B. O(1) C. O(n) D. O(n2)
【答案】C。
【解析】顺序存储的线性表在插入新元素时,涉及到大量数据元素的移动,其时间复杂度为O(n)。
7.对于顺序存储的线性表,访问结点和增加、删除结点的时间复杂度为( )。
A.O(n) O(n) B. O(n) O(1) C. O(1) O(n) D. O(1) O(1)
【答案】C。
【解析】顺序存储可以实现“随机存取”,因此访问结点的时间复杂度为O(1),而插入、删除结点由于涉及到大量移动元素,故其时间复杂度为O(n)。
8.(1)静态链表既有顺序存储的优点,又有动态链表的优点。所以,它存取表中第i个元素的时间与i无关。(2)静态链表中能容纳的元素个数的最大数在表定义时就确定了,以后不能增加。 (3)静态链表与动态链表在元素的插入、删除上类似,不需做元素的移动。以上错误的是( )
A.(1),(2) B.(1) C.(1),(2),(3) D.(2)
【答案】B。
【解析】静态链表使用结构体数组来实现线性链表的功能。因为其用游标cur来指示下一个数据元素的存储位置,因此存取数据时静态链表同线性链表(单链表)是相似的。也就是说,静态链表在存取表中第i个元素的时间同i是相关的。
9.线性表(a1,a2,…,an)以链接方式存储时,访问第i位置元素的时间复杂性为( )
A.O(i) B.O(1) C.O(n) D.O(i-1)
【答案】C。
【解析】略。
10.非空的循环单链表head的尾结点p↑满足( )。
A.p↑.link=head B.p↑.link=NIL C.p=NIL D.p= head
【答案】A。
【解析】非空的循环链表,所以选A。
11.某线性表中最常用的操作是在最后一个元素之后插入一个元素和删除第一个元素,则采用( )存储方式最节省运算时间。
A.单链表B.仅有头指针的单循环链表
C.双链表D.仅有尾指针的单循环链表
【答案】D。
【解析】仅有尾指针的单循环链表,可以非常方便的找到尾结点,尾结点后面的第一个结点往往是头结点,头结点的下一个结点就是第线性表的第一个结点。对最后一个元素和第一个元素操作对带尾指针的单循环链表是非常方便的。
题目也中规中矩,没什么特别变态的额。
主要还是要理解。理解,。好了,完结。
----END