数据结构——C语言描述习题及答案

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

四、试编写算法求一元多项式 Pn(x)=a0+a1x+a2x2+a3x3+…anxn 的值 Pn(x0),并确定算 法中的每一语句的执行次数和整个算法的时间复杂度,要求时间复杂度尽可能的小,规定算 法中不能使用求幂函数。注意:本题中的输入 ai(i=0,1,…,n), x 和 n,输出为 Pn(x0).通常算 法的输入和输出可采用下列两种方式之一:
素个数与__插入或删除的位置__有关。 (2) 在顺序表中,逻辑上相邻的元素,其物理位置______相邻。在单链表中,逻
辑上相邻的元素,其物理位置______相邻。 (3) 在带头结点的非空单链表中,头结点的存储位置由______指示,首元素结点
的存储位置由______指示,除首元素结点外,其它任一元素结点的存储位置 由__其直接前趋的 next 域__指示。 2.3 已知 L 是无表头结点的单链表,且 P 结点既不是首元素结点,也不是尾元素结点。按要 求从下列语句中选择合适的语句序列。
{s=s+a[i]*p;
/*执行次数:n 次*/
p=p*Байду номын сангаас;}
return(p);
}
算法的时间复杂度:T(n)=O(n)
第 2 章 线性表
习题
2.1 描述以下三个概念的区别:头指针,头结点,首元素结点。 2.2 填空: (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+12)/2 i=2 时: 1+2 = (1+2)×2/2 = (2+22)/2 i=3 时: 1+2+3 = (1+3)×3/2 = (3+32)/2 … i=n 时: 1+2+3+……+n = (1+n)×n/2 = (n+n2)/2
(1) 通过参数表中的参数显式传递; (2) 通过全局变量隐式传递。 试讨论这两种方法的优缺点,并在本题算法中以你认为较好的一种方式实现输入和输出。 [提示]:float PolyValue(float a[ ], float x, int n) {……} 核心语句: p=1; (x 的零次幂) s=0;
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;}
f(n) = [ (1+2+3+……+n) + (12 + 22 + 32 + …… + n2 ) ] / 2 =[ (1+n)n/2 + n(n+1)(2n+1)/6 ] / 2
.
资料.
.. .
.
..
.
=n(n+1)(n+2)/6 =n3/6+n2/2+n/3
区分语句频度和算法复杂度: O(f(n)) = O(n3)
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 的语句频度
性强,移置性强。
缺点:形参须与实参对应,且返回值数量有限。
(2)通过全局变量隐式传递
优点:减少实参与形参的个数,从而减少存空间以及传递数据时的时间消耗
缺点:函数通用性降低,移植性差
算法如下:通过全局变量隐式传递参数
PolyValue()
{ int i,n;
float x,a[],p;
printf(“\nn=”);
.
资料.
.. .
.
..
.
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; (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
.
资料.
.. .
.
..
.
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++)
.
资料.
.. .
.
..
.
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
1.4 试编写算法,求 pn(x)=a0+a1x+a2x2+…….+anxn 的值 pn(x0),并确定算法中每一语句的 执行次数和整个算法的时间复杂度,要求时间复杂度尽可能小,规定算法中不能使用求幂函
.
..
.
第1章 绪 论
习题
一、问答题 1. 什么是数据结构? 2. 四类基本数据结构的名称与含义。 3. 算法的定义与特性。 4. 算法的时间复杂度。 5. 数据类型的概念。 6. 线性结构与非线性结构的差别。 7. 面向对象程序设计语言的特点。 8. 在面向对象程序设计中,类的作用是什么? 9. 参数传递的主要方式及特点。 10. 抽象数据类型的概念。 二、判断题 1. 线性结构只能用顺序结构来存放,非线性结构只能用非顺序结构来存放。 2. 算法就是程序。 3. 在高级语言(如 C、或 PASCAL)中,指针类型是原子类型。 三、计算下列程序段中 X=X+1 的语句频度
数。注意:本题中的输入为 ai(i=0,1,…n)、x 和 n,输出为 Pn(x0)。 算法的输入和输出采用下 列方法(1)通过参数表中的参数显式传递(2)通过全局变量隐式传递。讨论两种方法的
优缺点,并在算法中以你认为较好的一种实现输入输出。
【解答】
(1)通过参数表中的参数显式传递
优点:当没有调用函数时,不占用存,调用结束后形参被释放,实参维持,函数通用
相关文档
最新文档