数据结构习题集C语言版严蔚敏第一二三章Word格式.docx
《数据结构习题集C语言版严蔚敏第一二三章Word格式.docx》由会员分享,可在线阅读,更多相关《数据结构习题集C语言版严蔚敏第一二三章Word格式.docx(19页珍藏版)》请在冰豆网上搜索。
z=y-x;
break;
casex=y:
z=abs(x*y);
default:
z=(x-y)/abs(x)*abs(y);
1.6在程序设计中,常用下列三种不同的出错处理方式:
(1)用exit语句终止执行并报告错误;
(2)以函数的返回值区别正确返回或错误返回;
(3)设置一个整型变量的函数参数以区别正确返回或某种错误返回。
试讨论这三种方法各自的优缺点。
1.7在程序设计中,可采用下列三种方法实现输出和输入:
(1)通过scanf和printf语句;
(2)通过函数的参数显式传递;
(3)通过全局变量隐式传递。
试讨论这三种方法的优缺点。
1.8设n为正整数。
试确定下列各程序段中前置以记号@的语句的频度:
(1)i=1;
k=0;
=n-1){
@k+=10*i;
(2)i=1;
}while(i<
=n-1);
(3)i=1;
while(i<
=n-1){
(4)k=0;
for(i=1;
i<
=n;
i++){
for(j=i;
j<
j++)
@k++;
(5)for(i=1;
for(j=1;
=i;
j++){
for(k=1;
k<
=j;
k++)
@x+=delta;
(6)i=1;
j=0;
while(i+j<
=n){
@if(i>
j)j++;
elsei++;
(7)x=n;
y=0;
//n是不小于1的常数
while(x>
=(y+1)*(y+1)){
@y++;
(8)x=91;
y=100;
while(y>
0){
@if(x>
100){x-=10;
y--;
elsex++;
1.9假设n为2的乘幂,并且n>
2,试求下列算法的时间复杂度及变量count的值(以n的函数形式表示)。
intTime(intn){
count=0;
x=2;
while(x<
n/2){
x*=2;
count++;
}
returncount;
1.11已知有实现同一功能的两个算法,其时间复杂度分别为和,假设现实计算机可连续运算的时间为秒(100多天),又每秒可执行基本操作(根据这些操作来估算算法时间复杂度)次。
试问在此条件下,这两个算法可解问题的规模(即n值的范围)各为多少?
哪个算法更适宜?
请说明理由。
1.12设有以下三个函数:
,,
请判断以下断言正确与否:
(1)f(n)是O(g(n))
(2)h(n)是O(f(n))
(3)g(n)是O(h(n))
(4)h(n)是O(n3.5)
(5)h(n)是O(nlogn)
1.13试设定若干n值,比较两函数和的增长趋势,并确定n在什么范围内,函数的值大于的值。
1.14判断下列各对函数和,当时,哪个函数增长更快?
(1),
(2),
(3),
(4),
1.15试用数学归纳法证明:
(1)
(2)
(3)
(4)
1.16试写一算法,自大至小依次输出顺序读入的三个整数X,Y和Z的值
1.17已知k阶斐波那契序列的定义为
,,…,,;
,
试编写求k阶斐波那契序列的第m项值的函数算法,k和m均以值调用的形式在函数参数表中出现。
1.18假设有A,B,C,D,E五个高等院校进行田径对抗赛,各院校的单项成绩均已存入计算机,并构成一张表,表中每一行的形式为
项目名称
性别
校名
成绩
得分
编写算法,处理上述表格,以统计各院校的男、女总分和团体总分,并输出。
1.19试编写算法,计算的值并存入数组a[0..arrsize-1]的第i-1个分量中(i=1,2,…,n)。
假设计算机中允许的整数最大值为maxint,则当n>
arrsize或对某个,使时,应按出错处理。
注意选择你认为较好的出错处理方法。
1.20试编写算法求一元多项式的值的值,并确定算法中每一语句的执行次数和整个算法的时间复杂度。
注意选择你认为较好的输入和输出方法。
本题的输入为,和,输出为。
第2章线性表
2.1描述以下三个概念的区别:
头指针,头结点,首元结点(第一个元素结点)。
2.2填空题。
(1)在顺序表中插入或删除一个元素,需要平均移动元素,具体移动的元素个数与有关。
(2)顺序表中逻辑上相邻的元素的物理位置紧邻。
单链表中逻辑上相邻的元素的物理位置紧邻。
(3)在单链表中,除了首元结点外,任一结点的存储位置由指示。
(4)在单链表中设置头结点的作用是。
2.3在什么情况下用顺序表比链表好?
2.4对以下单链表分别执行下列各程序段,并画出结果示意图。
2.5画出执行下列各行语句后各指针及链表的示意图。
L=(LinkList)malloc(sizeof(LNode));
P=L;
i<
=4;
i++){
P->
next=(LinkList)malloc(sizeof(LNode));
P=P->
next;
P->
data=i*2-1;
next=NULL;
for(i=4;
i>
=1;
i--)Ins_LinkList(L,i+1,i*2);
=3;
i++)Del_LinkList(L,i);
2.6已知L是无表头结点的单链表,且P结点既不是首元结点,也不是尾元结点,试从下列提供的答案中选择合适的语句序列。
a.在P结点后插入S结点的语句序列是__________________。
b.在P结点前插入S结点的语句序列是__________________。
c.在表首插入S结点的语句序列是__________________。
d.在表尾插入S结点的语句序列是__________________。
(1)P->
next=S;
(2)P->
next=P->
next->
(3)P->
next=S->
(4)S->
(5)S->
next=L;
(6)S->
(7)Q=P;
(8)while(P->
next!
=Q)P=P->
(9)while(P->
=NULL)P=P->
(10)P=Q;
(11)P=L;
(12)L=S;
(13)L=P;
2.7已知L是带表头结点的非空单链表,且P结点既不是首元结点,也不是尾元结点,试从下列提供的答案中选择合适的语句序列。
a.删除P结点的直接后继结点的语句序列是____________________。
b.删除P结点的直接前驱结点的语句序列是____________________。
c.删除P结点的语句序列是____________________。
d.删除首元结点的语句序列是____________________。
e.删除尾元结点的语句序列是____________________。
(1)P=P->
next=P;
(4)P=P->
(5)while(P!
(6)while(Q->
=NULL){P=Q;
Q=Q->
(7)while(P->
(10)Q=P;
(11)Q=P->
(12)P=L;
(13)L=L->
(14)free(Q);
2.8已知P结点是某双向链表的中间结点,试从下列提供的答案中选择合适的语句序列。
a.在P结点后插入S结点的语句序列是_______________________。
b.在P结点前插入S结点的语句序列是_______________________。
c.删除P结点的直接后继结点的语句序列是_______________________。
d.删除P结点的直接前驱结点的语句序列是_______________________。
e.删除P结点的语句序列是_______________________。
priou=P->
priou->
priou;
(4)P->
priou=S;
priou=P;
(7)S->
(8)S->
(9)P->
(10)P->
(11)P->
(12)P->
(13)P->
(14)P->
(15)Q=P->
(16)Q=P->
(17)free(P);
(18)free(Q);
2.9简述以下算法的功能。
(1)StatusA(LinkedListL){//L是无表头结点的单链表
if(L&
L->
next){
Q=L;
L=L->
while(P->
next)P=P->
P->
next=Q;
Q->
}
returnOK;
(2)voidBB(LNode*s,LNode*q){
p=s;
while(p->
=q)p=p->
p->
next=s;
voidAA(LNode*pa,LNode*pb){
//pa和pb分别指向单循环链表中的两个结点
BB(pa,pb);
BB(pb,pa);
2.10指