《数据结构与算法》典型例题Word文档下载推荐.docx
《《数据结构与算法》典型例题Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《《数据结构与算法》典型例题Word文档下载推荐.docx(93页珍藏版)》请在冰豆网上搜索。
i<
n;
i++)for(j=0;
j<
j++)x=x+l:
2
A.O(2n)B.O(n)C.O(n)D.O(1bn)
语句的执行频度即语句重复执行的次数,属于算法的时间复杂度类题目。
本题中对x的赋值语句为一个二重循环的循环体,外层循环循环n次,内层循环也循环n次,
显然此语句的执行次数为nxn=n2次。
C。
二、填空题
[例6-5]是数据的基本单位,通常由若干个组成,是数据
的最小单位。
本题是基本概念题,知识点为数据结构的相关概念。
本题答案为:
数据元素;
数据项;
数据项。
三、应用题
[例6-6]简述数据结构的定义。
数据结构是指数据元素之间的相互关系,即数据的组织形式。
数据结构通常包括三个方面的内容,分别是数据的逻辑结构、数据的存储结构(物理结构)和在这些数据上
定义的运算。
用集合的观点可以把数据结构表示为一个二元组DS=(D,R)。
其中,D是数
据元素的有穷集合,R是D上关系的有限集合。
[例6-7]分析以下程序段的时间复杂度。
i++)//语句①
{
x=x+1;
//语句②
for(j=0;
2*n;
j++)〃语句③
y++;
//语句④
语句的执行频度指的是语句重复执行的次数。
一个算法中所有语句的执行频度之
和构成了该算法的运行时间。
在本例算法中,语句①的执行频度是n+l,语句②的执行频度
是n,语句③的执行频度是n(2n+2)=2n2-2n,语句④的执行频度是n(2n+1)=2n2+n。
该程序
段的时间复杂度T(n)=(n+1)+n+(2n2+2n)+(2n2+n)=4n2+5n+1=0(n2)。
实际上,可以用算法中基本操作重复执行的频度作为度量标准,而被视为基本操作的一
般是最深层循环内的语句。
在上例中,语句④为基本操作,其执行频度为2n2+n,因此,
该算法的时间复杂度T(n)=2n2+n=0(n2)。
[例6-8]分析以下程序段的时间复杂度。
i=1;
while(i<
=m)
i=i*2;
上述算法的基本操作语句是i=i*2,设其执行频度为T(n),则有:
2如<
n,即
T(n)wlbn=0(lbn)。
因此,该程序段的时间复杂度为0(lbn)。
、单项选择题
7.3典型例题
[例7-1]在数据结构中,与所使用计算机无关的数据叫(①)结构;
链表是一种采用
(②)存储结构存储的线性表;
链表适用于(③)查找;
在链表中进行(④)操作的效率比在线性表中进行该操作的效率高。
①A.
存储
B.
物理
C.
逻辑
D.
物理和逻辑
②A.
顺序
网状
星式
链式
③A.
二分法
顺序及二分法
随机
④A.
二分法查找
快速查找
顺序查找
插入
解析
:
本题考查的是基本概念。
本题答案为
①
)C;
②D;
③A:
④
D°
[例7-2]链表不具备的特点是()。
A.插入和删除不需要移动兀素
B.可随机访问任一结点
C.不必预分配空间D.所需空间与其长度成正比
线性表可随机访问任一结点,而链表必须从第一个数据结点出发逐一查找每个结点。
[例7-3]不带头结点的单链表
A.head==NULL
C.head_>
next==head
在不带头结点的单链表
点,head==NULL表示该单链表为空。
head为空的判定条件是(
B.head_>
next==NULL
D.head!
=NULL
head中,head指向第一个数据结点。
空表即该表没有结
A°
[例7-4]带头结点的单链表
head为空的判定条件是()。
B.head—>
next==NULL
head中,head指向头结点。
空表即该表只有头结点,—>
next==NULL表示该单链表为空。
[例7-5]带头结点的循环单链表
A.head==NULL
C.head—>
next==head
在带头结点的循环单链表
C.head—>
next==head
在带头结点的单链表
head
head中,head为空的判定条件是(
D.head!
=NULLhead中,head指向头结点。
C°
)°
空表即该表只有头结点,
head—>
next==head表示该单链表为空。
[例7-6]线性表采用链式存储时其存储地址(
A.必须是连续的B.部分地址必须是连续的
C.一定是不连续的D.连续不连续都可以
链式存储采用动态存储,地址一般不连续。
[例7-7]在双向链表的*p结点前插入新结点*s的操作为(
A.p—>
prior=s;
s—>
next=p;
p—>
prior—>
next=s;
prior=p—>
prior;
B.p—>
p—>
next=p;
C.s—>
p—prior=s;
p—>
D.s—>
p—prior—>
在双向链表的*p结点前插入新结点*s的操作如图7.12所示,图中虚线为所
作的操作,序号为操作顺序。
D°
图7.12双向链表插入结点的过程示意图
(例7-8)若某表最常用的操作是在最后一个结点后插入一个结点和删除第一个结点,则采
用()存储方式最节省运算时间。
A.单链表B.双向链表
C.给出表头指针的循环单链表D.给出尾指针的循环单链表
在链表中插入或删除一个结点,需修改相邻结点的指针域。
上述四个选项中,只有选项D才能从尾指针经过最少的结点来进行题目要求的插入或删除操作。
本题答案为:
D。
[例7-9]若线性表中有2n个元素,算法()在单链表上实现要比在顺序表上实现效
率更高。
A.删除所有值为x的元素B.在最后一个元素的后面插入一个新元素
C.顺序输出前k个元素D.交换其中某两个元素的值
对于选项A,在单链表上和顺序表上实现的时间复杂度都为0(n),但后者要移
动大量的元素,因此在单链表上实现效率更高。
A。
(例7-10)在长度为n的()上,删除第一个元素,其算法复杂度为O(n)。
A.只有表头指针的不带头结点的循环单链表
B•只有尾指针的不带表头结点的循环单链表
C.只有表尾指针的带头结点的循环单链表
D.只有尾指针的带表头结点的循环单链表解析:
A。
具体算法如下:
linklist*delfirst(linklist*h)
Linklist*p=h;
while(p—>
next!
=h)//找到表尾结点
p=p—>
next;
p—>
next=h—>
next;
free(h);
returnp一>
next;
//返回头指针
}
二、填空题
[例7-11]在单链表中结点*p后插入结点*s的指令序列为;
。
在单链表中结点*p后插入结点*s,即将*p的后继结点变为*s的后继结点,
*s则成为*p的后继结点。
操作指令序列为:
next=p—>
next=s。
[例7-12]在线性表的链式存储结构中,根据每个结点所含指针的个数,链表可分为-
和;
而根据指针的链接方式,链表又可分为和。
单链表;
多重链表;
循环链表;
普通链表(非循环链表)。
[例7-13]在单链表中,要删除某一个指定的结点,必须找到该结点的结点。
由单链表的特点可知,删除某一个结点的操作是将其前驱结点的next指针域指
向该结点的后继结点。
前驱。
[例7-14]在一个长度为n的顺序表中删除第i(0<
iwn—1)个元素,需向前移动个
需将第i个元素后的元素依次前移一个位置,总共移动(n-1)-(i+1)+1个元素。
本
题答案为:
n-i-1o
[例7-15]在一个具有n个结点的单链表,在*p结点后插入一个新结点的时间复杂度是;
在给定值为x的结点后插入一个新结点的时间复杂度是o
在*p结点后插入一个新结点*s的操作是:
s—>
next=p—>
next;
next=
s;
其时间复杂度为0
(1)o
在给定值为x的结点后插入一个结点,首先要找到该结点,然后再进行插入。
找到该结点的时间复杂度为O(n),插入的时间复杂度为0
(1)o本题答案为:
0
(1);
0(n)。
三、应用题
(例7-16)设A是一个线性表(ao,內,…,a,…,乳),采用顺序存储结构,则在等概率情况下平均每插入一个元素需要移动的元素个数是多少?
若元素插在a和a+1之间
(0<
iwn-1)的概率为n一1,则平均每插入一个元素所需要移动的元素个数是多少?
n(n+1)/2
在等概率情况下,平均每插入一个元素需要移动的元素个数为:
(0+1+2+川+n)n
n+1-2
若元素插在ai和如之间(0wiwn-1)的概率为口,则平均每插入一个元素所需
n(n十1)/2
要移动的元素个数为:
n」2
二(nT)2r2222n亠1
n(n—1)1
i=o