資料結構題集答案 C語言版 嚴蔚敏 吳偉民著

2022-10-31 05:09:04 字數 4126 閱讀 5858

解:資料是對客觀事物的符號表示。在電腦科學中是指所有能輸入到計算機中並被電腦程式處理的符號的總稱。

資料元素是資料的基本單位,在電腦程式中通常作為乙個整體進行考慮和處理。

資料物件是性質相同的資料元素的集合,是資料的乙個子集。

資料結構是相互之間存在一種或多種特定關係的資料元素的集合。

儲存結構是資料結構在計算機中的表示。

資料型別是乙個值的集合和定義在這個值集上的一組操作的總稱。

抽象資料型別是指乙個數學模型以及定義在該模型上的一組操作。是對一般資料型別的擴充套件。

1.2 試描述資料結構和抽象資料型別的概念與程式語言中資料型別概念的區別。

解:抽象資料型別包含一般資料型別的概念,但含義比一般資料型別更廣、更抽象。一般資料型別由具體語言系統內部定義,直接提供給程式設計者定義使用者資料,因此稱它們為預定義資料型別。

抽象資料型別通常由程式設計者定義,包括定義它所使用的資料和在這些資料上所進行的操作。在定義抽象資料型別中的資料部分和操作部分時,要求只定義到資料的邏輯結構和操作說明,不考慮資料的儲存結構和操作的具體實現,這樣抽象層次更高,更能為其他使用者提供良好的使用介面。

1.3 設有資料結構(d,r),其中

,, 試按圖論中圖的畫法慣例畫出其邏輯結構圖。

解:1.4 試仿照三元組的抽象資料型別分別寫出抽象資料型別複數和有理數的定義(有理數是其分子、分母均為自然數且分母不為零的分數)。

解:adt complex

資料關係:r={}

基本操作:

initcomplex(&c,re,im)

操作結果:構造乙個複數c,其實部和虛部分別為re和im

destroycmoplex(&c)

操作結果:銷毀複數c

get(c,k,&e)

操作結果:用e返回複數c的第k元的值

put(&c,k,e)

操作結果:改變複數c的第k元的值為e

isascending(c)

操作結果:如果複數c的兩個元素按公升序排列,則返回1,否則返回0

isdescending(c)

操作結果:如果複數c的兩個元素按降序排列,則返回1,否則返回0

max(c,&e)

操作結果:用e返回複數c的兩個元素中值較大的乙個

min(c,&e)

操作結果:用e返回複數c的兩個元素中值較小的乙個

}adt complex

adt rationalnumber

資料關係:r={}

基本操作:

initrationalnumber(&r,s,m)

操作結果:構造乙個有理數r,其分子和分母分別為s和m

destroyrationalnumber(&r)

操作結果:銷毀有理數r

get(r,k,&e)

操作結果:用e返回有理數r的第k元的值

put(&r,k,e)

操作結果:改變有理數r的第k元的值為e

isascending(r)

操作結果:若有理數r的兩個元素按公升序排列,則返回1,否則返回0

isdescending(r)

操作結果:若有理數r的兩個元素按降序排列,則返回1,否則返回0

max(r,&e)

操作結果:用e返回有理數r的兩個元素中值較大的乙個

min(r,&e)

操作結果:用e返回有理數r的兩個元素中值較小的乙個

}adt rationalnumber

1.5 試畫出與下列程式段等價的框圖。

(1) product=1; i=1;

while(i<=n)

(2) i=0;

do while((i!=n) && (a[i]!=x));

(3) switch

1.6 在程式設計中,常用下列三種不同的出錯處理方式:

(1) 用exit語句終止執行並報告錯誤;

(2) 以函式的返回值區別正確返回或錯誤返回;

(3) 設定乙個整型變數的函式引數以區別正確返回或某種錯誤返回。

試討論這三種方法各自的優缺點。

解:(1)exit常用於異常錯誤處理,它可以強行中斷程式的執行,返回作業系統。

(2)以函式的返回值判斷正確與否常用於子程式的測試,便於實現程式的區域性控制。

(3)用整型函式進行錯誤處理的優點是可以給出錯誤型別,便於迅速確定錯誤。

1.7 在程式設計中,可採用下列三種方法實現輸出和輸入:

(1) 通過scanf和printf語句;

(2) 通過函式的參數顯式傳遞;

(3) 通過全域性變數隱式傳遞。

試討論這三種方法的優缺點。

解:(1)用scanf和printf直接進行輸入輸出的好處是形象、直觀,但缺點是需要對其進行格式控制,較為煩瑣,如果出現錯誤,則會引起整個系統的崩潰。

(2)通過函式的引數傳遞進行輸入輸出,便於實現資訊的隱蔽,減少出錯的可能。

(3)通過全域性變數的隱式傳遞進行輸入輸出最為方便,只需修改變數的值即可,但過多的全域性變數使程式的維護較為困難。

1.8 設n為正整數。試確定下列各程式段中前置以記號@的語句的頻度:

(1) i=1; k=0;

while(i<=n-1)

(2) i=1; k=0;

do while(i<=n-1);

(3) i=1; k=0;

while (i<=n-1)

(4) k=0;

for(i=1; i<=n; i++)

(5) for(i=1; i<=n; i++)

(6) i=1; j=0;

while(i+j<=n)

(7) x=n; y=0; // n是不小於1的常數

while(x>=(y+1)*(y+1))

(8) x=91; y=100;

while(y>0)

else x++;

}解:(1) n-1

(2) n-1

(3) n-1

(4) n+(n-1)+(n-2)+...+1=

(5) 1+(1+2)+(1+2+3)+...+(1+2+3+...+n)=

==(6) n

(7)向下取整

(8) 1100

1.9 假設n為2的乘冪,並且n>2,試求下列演算法的時間複雜度及變數count的值(以n的函式形式表示)。

int time(int n)

return count;

}解: count=

1.11 已知有實現同一功能的兩個演算法,其時間複雜度分別為和,假設現實計算機可連續運算的時間為秒(100多天),又每秒可執行基本操作(根據這些操作來估算演算法時間複雜度)次。試問在此條件下,這兩個演算法可解問題的規模(即n值的範圍)各為多少?

哪個演算法更適宜?請說明理由。

解: n=40

n=16

則對於同樣的迴圈次數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)對 (2)錯 (3)錯 (4)對 (5)錯

1.13 試設定若干n值,比較兩函式和的增長趨勢,並確定n在什麼範圍內,函式的值大於的值。

解:的增長趨勢快。但在n較小的時候,的值較大。

當n>438時,

1.14 判斷下列各對函式和,當時,哪個函式增長更快?

(1),

(2),

(3),

(4),

解:(1)g(n)快 (2)g(n)快 (3)f(n)快 (4) f(n)快

1.15 試用數學歸納法證明:

(1)(2)(3)(4)1.16 試寫一演算法,自大至小依次輸出順序讀入的三個整數x,y和z的值

解:int max3(int x,int y,int z)

1.17 已知k階斐波那契序列的定義為

試編寫求k階斐波那契序列的第m項值的函式演算法,k和m均以值呼叫的形式在函式引數表**現。

解:k>0為階數,n為數列的第n項

int fibonacci(int k,int n)

for(i=k+1;i

《資料結構》 C語言版 嚴蔚敏著資料結構實驗指導

資料結構 實驗指導及報告書 ver3.1,2011 學年第學期 姓名學號 班級指導教師 電腦科學與工程學院 2011 1 複習c語言中函式 陣列 指標 結構體與共用體等的概念。2 熟悉利用c語言進行程式設計的一般方法。說明以下c語言中的概念 1 函式 2 陣列 3 指標 4 結構體 5 共用體 1 ...

嚴蔚敏《資料結構c語言版習題集》答案第四章串

一定能摸到紅球嗎?說課稿 林銀花一 教材說明 課題 一定能摸到紅球嗎?本節內容的地位和作用 在現代社會中,人們面臨著更多的機會和選擇,常常需要在不確定情境中作出合理的決策,概率正是通過對不確定現象和事件發生的可能性的刻畫,來為人們更好的制定決策提供依據和建議.本節內容又是義務教育階段,唯一培養學生從...

資料結構講義 嚴蔚敏版

第0章複習提示 1 一 教材內容 1 二 複習提示 1 1.經典演算法 1 2.緒論 1 3.線性表 2 4.棧和佇列 2 5.串 2 6.樹和二叉樹 2 7.圖 3 8.查詢表 3 9.內部排序 3 第1章緒論 5 一 基礎知識 5 二 演算法 5 三 習題 6 第2章線性表 7 一 基礎知識和演...