習題集解析部分
第1章 緒論
——《數據結構題集》-嚴蔚敏.吳偉民版
源碼使用說明 鏈接☛☛☛ 《數據結構-C語言版》(嚴蔚敏,吳偉民版)課本源碼+習題集解析使用說明
課本源碼合輯 鏈接☛☛☛ 《數據結構》課本源碼合輯
習題集全解析 鏈接☛☛☛ 《數據結構題集》習題解析合輯
相關測試數據下載 鏈接☛ 數據包
本習題文檔的存放目錄:數據結構\▼配套習題解析\▼01 緒論
文檔中源碼的存放目錄:數據結構\▼配套習題解析\▼01 緒論\▼習題測試文檔-01
源碼測試數據存放目錄:數據結構\▼配套習題解析\▼01 緒論\▼習題測試文檔-01\Data
一、基礎知識題
1.1❶簡述下列術語:數據、數據元素、數據對象、數據結構、存儲結構、數據類型和抽象數據類型。
1.2❷試描述數據結構和抽象數據類型的概念與程序設計語言中數據類型概念的區別。
1.3❷設有數據結構(D,R),其中
D={d1,d2,d3,d4},R={r},r={(d1,d2),(d2,d3),(d3,d4)}。
試按圖論中圖的畫法慣例畫出其邏輯結構圖。
1.4❷試仿照三元組的抽象數據類型分別寫出抽象數據類型復數和有理數的定義(有理數是其分子、分母均為自然數且分母不為零的分數)。
1.5❷試畫出與下列程序段等價的框圖。
(1)product = 1;
i = 1;
while(i<=n)
{
product *= i;
i++;
}
(2)i=0;
do
{
i++;
}while((i!=n) && (a[i]!=x));
(3)switch
{
case x<y: z=y-x;
break;
case x==y: z=abs(x*y);
break;
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;
while(i <= n-1)
{
@ k += 10 * i;
i++;
}
(2)i = 1; k = 0;
do
{
@ k += 10 * i;
i++;
}while(i <= n-1);
(3)i = 1; k = 0;
while(i <= n-1)
{
i++;
@ k += 10 * i;
}
(4)k = 0;
for(i=1; i<=n; i++)
{
for(j=i; j<=n; j++)
@ k++;
}
(5)for(i=1; i<=n; i++)
for(j=1; j<=i; j++)
for(k=1; k<=j; k++)
@ x += 1;
(6)i = 1; j = 0;
while(i+j <= n)
{
@ if(i>j)
j++;
else
i++;
}
(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--;
}
else
x++ ;
}
1.9❸假設n為2的乘冪,並且n>2,試求下列算法的時間復雜度及變量count的值(以n的函數形式表示)。
int Time (int n)
{
count = 0;
x = 2;
while(x<n/2)
{
x *= 2;
count++;
}
return (count)
}//Time
1.10❷ 按增長率由小至大的順序排列下列各函數:
2100,(3/2)n,(2/3)n,(4/3)n,nn,n3/2,n2/3,√n,n!,n,log2n,n/log2n,log22n,log2(log2n),nlog2n,nlog2n
1.11❸ 已知有實現同一功能的兩個算法,其時間復雜度分別為O(2n)和O(n10),假設現實計算機可連續運算的時間為107秒(100多天),又每秒可執行基本操作(根據這些操作來估算算法時間復雜度)105次。試問在此條件下,這兩個算法可解問題的規模(即n值的范圍)各為多少?哪個算法更適宜?請說明理由。
1.12❸ 設有以下三個函數:
f(n)=21n4+n2+1000,g(n)=15n4+500n2,h(n)=5000n3.5+nlogn
請判斷以下斷言正確與否:
(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值,比較兩函數n2和50nlog2n的增長趨勢,並確定n在什么范圍內時n2的值大於50nlog2n。
1.14❸ 判斷下列各對函數f(n)和g(n),當n→∞時,哪個函數增長更快?
1.15❸ 試用數學歸納法證明:
二、算法設計題
1.16❷ 試寫一算法,自大到小依次輸出順序讀入的三個整數X,Y和Z的值。
1.17❸ 已知k階斐波那契序列的定義為
f0=0, f1=0, …, fk-2=0, fk-1=1;
fn=fn-1+fn-2+…+fn-k, n=k,k+1,…
試編寫求k階斐波那契序列的第m項值的函數算法,k和m均以值調用的形式在函數參數表中出現。
1.18❸ 假設有A、B、C、D、E五個高等院校進行田徑對抗賽,各院校的單項成績均已存入計算機,並構成一張表,表中每一行的形式為
項目名稱 | 性別 | 校名 | 成績 | 得分 |
編寫算法,處理上述表格,以統計各院校的男、女總分和團體總分,並輸出。
1.19❹ 試編寫算法,計算i!*2i的值並存入數組a[0..arrsize-1]的第i-1個分量中(i=1,2,…,n)。假設計算機中允許的整數最大值為maxint,則當n>arrsize或對某個k(1≤k≤n)使k!*2k>maxint時,應按出錯處理。注意選擇你認為較好的出錯處理方法。
1.20❹ 試編寫算法求一元多項式的值Pn(x),並確定算法中每一語句的執行次數和整個算法的時間復雜度。注意選擇你認為較好的輸入和輸出方法。本題的輸入為ai(i=0,1,…,n),x0和n,輸出為Pn(x0)。