数据结构(Java版)习题解答
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
A
I N D E X
练习题答案
第一章练习题答案(a) n+(n–1)+(n–2)+…+2+1
=
2)1
(+ n n (b) n+(n–1)+(n–2)+…+2+1
=
2
)1
(+
n
n
f(n)≦c.g(n) →f(n)=O(g(n))
(a) f(n)=100n+9
c=101, g(n)=n, n0=10
得知f(n)=O(n)
(b) f(n)=1000n2+100n–8
c=2000, g(n)= n2, n0=1
得知f(n)=O(n2)
(c) f(n)=5*2n+9 n2+2
c=10, n0=5
得知f(n)=O(2n)
f(n)≧c g(n) →f(n)=Ω(g(n)) (a) f(n)=3n+1
c=2, n0=1, g(n)=n
得知f(n)=Ω(n)(b) f(n)=100n2+4n+5
c=10, n0=1, g(n)= n2
得知f(n)=Ω(n2)
(c) f(n)=8*2n+8n+16
c=8, n0=1, g(n)= 2n
得知f(n)=Ω(n2)
c1.g(n)≦f(n)≦c2.g(n) →f(n)= Θ(g(n))
(a) f(n)=3n+2
c1=3, c2=6, n0=1
得知f(n) = Θ (n)
(b) f(n)=9n2+4n+2
c1=9, c2=16, n0=1
得知f(n) = Θ (n2)
(c) f(n)=8n4+5n3+5
c1=8, c2=20, n0=1
得知f(n) = Θ (n4)
A-2
练习题解答
第二章练习题答案
1. 分别以行为主和以列为主说明之。
(a) 以行为主
A(i, j)=l0+(i–1)*u2*d+(j–1)*d
(b) 以列为主
A(i, j)=l0+(j–1)*u1*d+(i–1)*d
2. 以列为主
A(i, j)=l0+(j–12)*md+(i–l1)d
m=u1–l1+1=5–(–3)+1=9
m=u2–l2+1=2–(–4)+1=7
A(1, 1) =100+(1–(–4))*9+(1–(–3))
=100+45+4=149
3. 分别以行为主和以列为主的说明。
由于数组为A(1:u1, 1:u2, 1:u3),因此p = u1-l1+1, q = u2- l2+1, r = u3- l3+1 所以p = u1-1+1 = u1, q = u2-1+1 = u2, r = u3-1+1 = u3
(a) 以行为主
A(i, j, k)=l0 + (i–1)*u2*u3*d + (j–1)*u3*d +(k-1)
(b) 以列为主
A(i, j, k)=l0 + (k–1)*u1*u2*d + (j–1)*u1*d + (i-1)*d
4. 以列为主:A(i, j, k)=l0 + (k–l3)*pqd + (j–l2)*pd + (i-l1)*d
p = 5-(-3) + 1 = 9, q = 2-(-4)+1 = 7, r = 5-1+1 = 5
A(2, 1, 2) = 100 + (2-1)*9*7*1 + (1-(-4))*9*1 + (2-(-3))*1
= 100 + 63 + 45 + 5 = 253
A-3
5. 以行为主:
A(i1, i2, i3, …, i n) = l0 +(i1–1)u2u3…u n
+(i2–1)u3u4…u n
+(i3–1)u4u5…u n
…
+(i n–1)
以列为主:
A(i1, i2, i3, …, i n)=l0+(i n–1)u1u2…u n-1
+(i n-1–1)u1u2…u n-2
+(i3–1)u4u5…u n
…
+(i2–1)*n1
+(i1–1)
2.2节练习题答案
1.
(a) 由上图知ptr+2为a[2]元素的地址,所以*(ptr+2)和a[2]表示的结果
是一样的,其值为2。
A-4
练习题解答
(b) a为指针常数,但ptr为指针变量,所以ptr可以用于递增或递减的
运算符,如ptr++,或ptr––,但a就不能使用此运算符,因为常数
不可以当做LVALUE。
2. // file name: binary_search.java
import java.io.*;
public class binary_search
{
static int[] A= {-9999,2,4,6,8,10,12,14,16,18,20};
static int count=0;
public static int binary_search(int key)
{
int i=1;
int j=10;
int k;
count=0;
do{
count++;
k = (i+j)/2;
if(A[k] == key)
break;
else if(A[k] < key)
i = k+1;
else
j = k-1;
}while(i<=j);
return count;
}
public static void main (String args[]) // 主函数
{
binary_search myApp = new binary_search();
System.out.println("Search 1, " + myApp.binary_search(1) +" times");
System.out.println("Search 3, "+ myApp.binary_search(3) + " times");
System.out.println("Search 13, "+ myApp.binary_search(13) + " times");
A-5