没有合适的资源?快使用搜索试试~ 我知道了~
(完整word版)《数据结构-C语言描述》习题及答案-耿国华.doc
需积分: 6 1 下载量 75 浏览量
2022-11-16
09:05:48
上传
评论
收藏 550KB DOC 举报
温馨提示
试读
80页
(完整word版)《数据结构-C语言描述》习题及答案-耿国华.doc
资源推荐
资源详情
资源评论
(完整 word 版)《数据结构——C 语言描述》习题及答案 耿国华
第 1 章 绪 论
习 题
一、问答题
1. 什么是数据结构?
2. 四类基本数据结构的名称与含义。
3. 算法的定义与特性。
4. 算法的时间复杂度.
5. 数据类型的概念.
6. 线性结构与非线性结构的差别.
7. 面向对象程序设计语言的特点。
8. 在面向对象程序设计中,类的作用是什么?
9. 参数传递的主要方式及特点。
10. 抽象数据类型的概念。
二、判断题
1. 线性结构只能用顺序结构来存放,非线性结构只能用非顺序结构来存放。
2. 算法就是程序。
3. 在高级语言(如 C、或 PASCAL)中,指针类型是原子类型。
三、计算下列程序段中 X=X+1 的语句频度
for(i=1;i〈=n;i++)
for(j=1;j〈=i;j++)
for(k=1;k〈=j;k++)
x=x+1;
[提示]:
i=1 时: 1 = (1+1)×1/2 = (1+1
2
)/2
i=2 时: 1+2 = (1+2)×2/2 = (2+2
2
)/2
i=3 时: 1+2+3 = (1+3)×3/2 = (3+3
2
)/2
…
i=n 时: 1+2+3+……+n = (1+n)×n/2 = (n+n
2
)/2
f(n) = [ (1+2+3+……+n) + (1
2
+ 2
2
+ 3
2
+ …… + n
2
) ] / 2
=[ (1+n)n/2 + n(n+1)(2n+1)/6 ] / 2
=n(n+1)(n+2)/6
=n
3
/6+n
2
/2+n/3
(完整 word 版)《数据结构——C 语言描述》习题及答案 耿国华
区分语句频度和算法复杂度:
O(f(n)) = O(n
3
)
四、试编写算法求一元多项式 Pn(x)=a
0
+a
1
x+a
2
x
2
+a
3
x
3
+…a
n
x
n
的值 P
n
(x
0
),并确定算法中的每一语句的
执行次数和整个算法的时间复杂度,要求时间复杂度尽可能的小,规定算法中不能使用求幂函数。注意:本
题中的输入 a
i
(i=0,1,…,n), x 和 n,输出为 P
n
(x
0
).通常算法的输入和输出可采用下列两种方式之一:
(1) 通过参数表中的参数显式传递;
(2) 通过全局变量隐式传递。
试讨论这两种方法的优缺点,并在本题算法中以你认为较好的一种方式实现输入和输出。
[提示]:float PolyValue(float a[ ], float x, int n) {……}
核心语句:
p=1; (x 的零次幂)
s=0;
i 从 0 到 n 循环
s=s+a[i]*p;
p=p*x;
或:
p=x; (x 的一次幂)
s=a[0];
i 从 1 到 n 循环
s=s+a[i]*p;
p=p*x;
实习题
设计实现抽象数据类型“有理数”。基本操作包括有理数的加法、减法、乘法、除法,以及求有理数的
分子、分母。
第一章答案
1.3 计算下列程序中 x=x+1 的语句频度
for(i=1;i〈=n;i++)
for(j=1;j<=i;j++)
for(k=1;k〈=j;k++)
x=x+1;
【解答】x=x+1 的语句频度为:
T(n)=1+(1+2)+(1+2+3)+……+(1+2+……+n)=n(n+1)(n+2)/6
(完整 word 版)《数据结构——C 语言描述》习题及答案 耿国华
1。4 试编写算法,求 p
n
(x)=a
0
+a
1
x+a
2
x
2
+…….+a
n
x
n
的值 p
n
(x
0
),并确定算法中每一语句的执行次数和整个
算法的时间复杂度,要求时间复杂度尽可能小,规定算法中不能使用求幂函数。注意:本题中的输入为
a
i
(i=0,1,…n)、x 和 n,输出为 P
n
(x
0
)。 算法的输入和输出采用下列方法(1)通过参数表中的参数显式传
递(2)通过全局变量隐式传递.讨论两种方法的优缺点,并在算法中以你认为较好的一种实现输入输出。
【解答】
(1)通过参数表中的参数显式传递
优点:当没有调用函数时,不占用内存,调用结束后形参被释放,实参维持,函数通用性强,移置性强。
缺点:形参须与实参对应,且返回值数量有限。
(2)通过全局变量隐式传递
优点:减少实参与形参的个数,从而减少内存空间以及传递数据时的时间消耗
缺点:函数通用性降低,移植性差
算法如下:通过全局变量隐式传递参数
PolyValue()
{ int i,n;
float x,a[],p;
printf(“\nn=”);
scanf(“%f”,&n);
printf(“\nx=”);
scanf(“%f”,&x);
for(i=0;i〈n;i++)
scanf(“%f ”,&a[i]); /*执行次数:n 次 */
p=a[0];
for(i=1;i<=n;i++)
{ p=p+a[i]*x; /*执行次数:n 次*/
x=x*x;}
printf(“%f",p);
}
算法的时间复杂度:T(n)=O(n)
通过参数表中的参数显式传递
float PolyValue(float a[ ], float x, int n)
{
float p,s;
int i;
p=x;
s=a[0];
for(i=1;i〈=n;i++)
(完整 word 版)《数据结构——C 语言描述》习题及答案 耿国华
{s=s+a[i]*p; /*执行次数:n 次*/
p=p*x;}
return(p);
}
算法的时间复杂度:T(n)=O(n)
第 2 章 线性表
习 题
2.1 描述以下三个概念的区别:头指针,头结点,首元素结点.
2.2 填空:
(1) 在顺序表中插入或删除一个元素,需要平均移动__一半__元素,具体移动的元素个数与__插入
或删除的位置__有关。
(2) 在顺序表中,逻辑上相邻的元素,其物理位置______相邻。在单链表中,逻辑上相邻的元素,其
物理位置______相邻.
(3) 在带头结点的非空单链表中,头结点的存储位置由______指示,首元素结点的存储位置由__
____指示,除首元素结点外,其它任一元素结点的存储位置由__其直接前趋的 next 域__指示.
2.3 已知 L 是无表头结点的单链表,且 P 结点既不是首元素结点,也不是尾元素结点。按要求从下列语句中
选择合适的语句序列.
a. 在 P 结点后插入 S 结点的语句序列是:_(4)、(1)_。
b。 在 P 结点前插入 S 结点的语句序列是:(7)、(11)、(8)、(4)、(1)。
c。 在表首插入 S 结点的语句序列是:(5)、(12)。
d。 在表尾插入 S 结点的语句序列是:(11)、(9)、(1)、(6)。
供选择的语句有:
(1)P—>next=S;
(2)P->next= P-〉next—>next;
(3)P—〉next= S—>next;
(4)S—〉next= P-〉next;
(5)S—〉next= L;
(6)S—>next= NULL;
(7)Q= P;
(8)while(P-〉next!=Q) P=P—〉next;
(9)while(P->next!=NULL) P=P-〉next;
(10)P= Q;
(11)P= L;
(完整 word 版)《数据结构——C 语言描述》习题及答案 耿国华
(12)L= S;
(13)L= P;
2.4 已知线性表 L 递增有序。试写一算法,将 X 插入到 L 的适当位置上,以保持线性表 L 的有序性。
[提示]:void insert(SeqList *L; ElemType x)
〈 方法 1 〉
(1)找出应插入位置 i,(2)移位,(3)……
〈 方法 2 〉 参 P。 229
2.5 写一算法,从顺序表中删除自第 i 个元素开始的 k 个元素。
[提示]:注意检查 i 和 k 的合法性。 (集体搬迁,“新房"、“旧房”)
〈 方法 1 > 以待移动元素下标 m(“旧房号”)为中心,
计算应移入位置(“新房号"):
for ( m= i-1+k; m〈= L-〉last; m++)
L->elem[ m-k ] = L->elem[ m ];
< 方法 2 > 同时以待移动元素下标 m 和应移入位置 j 为中心:
< 方法 3 〉 以应移入位置 j 为中心,计算待移动元素下标:
2.6 已知线性表中的元素(整数)以值递增有序排列,并以单链表作存储结构.试写一高效算法,删除表中所
有大于 mink 且小于 maxk 的元素(若表中存在这样的元素),分析你的算法的时间复杂度(注意:mink 和 maxk
是给定的两个参变量,它们的值为任意的整数).
[提示]:注意检查 mink 和 maxk 的合法性:mink 〈 maxk
不要一个一个的删除(多次修改 next 域).
(1)找到第一个应删结点的前驱 pre
pre=L; p=L-〉next;
while (p!=NULL && p->data 〈= mink)
{ pre=p; p=p->next; }
(2)找到最后一个应删结点的后继 s,边找边释放应删结点
s=p;
while (s!=NULL && s->data < maxk)
{ t =s; s=s->next; free(t); }
(3)pre-〉next = s;
2.7 试分别以不同的存储结构实现线性表的就地逆置算法,即在原表的存储空间将线性表(a
1
, a
2
..., a
n
)
逆置为(a
n
, a
n—1
,。。。, a
1
).
(1)以一维数组作存储结构,设线性表存于 a(1:arrsize)的前 elenum 个分量中。
(2)以单链表作存储结构。
剩余79页未读,继续阅读
资源评论
yyyyyyhhh222
- 粉丝: 404
- 资源: 6万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功