? ? ? ? 各位親愛的讀者,大家好!今天博主給大家帶來的內容是C語言數據結構與算法當中抽象數據類型、算法及其分析的相關知識。
一.抽象數據類型
? ? ? ? 抽象數據類型:指的是用戶進行軟件系統設計時從問題的數據模型中抽象出來的邏輯數據結構和邏輯數據結構上的運算。而不考慮計算機的具體存儲結構和運算的具體實現算法。
? ? ? ? 一個抽象數據類型可以用一個三元組(D,R,P)來表示,其中D是數據對象,R是D上的關系集,P是D中數據運算的基本運算集,基本描述格式如下:
ADT抽象數據類型名
{數據對象:數據對象的聲明;
?數據關系:數據關系的聲明;
?基本運算:基本運算的聲明;
}
?其中,基本運算的聲明格式為:
基本運算名(參數表):運算功能描述;
基本運算有兩種參數:值參數只為運算提供輸入值,引用參數以&打頭,除了可以提供輸入值外,還將返回運算結果。
抽象數據類型有兩個重要特征:數據抽象和數據封裝。
數據抽象:指用ADT描述程序處理的數據的特征、其所能完成的功能以及它和外部用戶的接口(即外界使用它的方法)。
數據封裝:指將程序的外部特征和其內部實現細節分離,并且對外部用戶隱藏其內部實現細節。?
抽象數據類型由數據的邏輯結構和運算定義兩部分組成,需要通過基本數據類型來實現。
二.算法及其描述
1.算法的定義
? ? ? ? 算法是對特定問題求解步驟的一種描述,它是指令的有限序列。應具有以下5個重要的特性
有窮性,確定性,可行性,有輸入,有輸出?
?注意:算法和程序是有區別的,程序是指使用某種計算機語言對一個算法的具體實現,即具體怎么做,而算法側重于對解決問題的方法描述,即要做什么。
2.算法設計的目標
? ? ? ? 算法設計應該滿足以下幾個目標:
正確性,可使用性,可讀性,健壯性,高效率與低存儲量需求
?其中健壯性要求算法具有很好的容錯性,即提供異常處理,能夠對不合理的數據進行檢查,不經常出現中斷或者死機現象。
3.算法的描述
? ? ? ? 在使用C/C++來描述算法的時候,一般格式如下
返回值? 算法對應的函數名(形參列表)
{
? ? ? ? 臨時變量的定義
? ? ? ? 實現由輸入參數到輸出參數的操作
? ? ? ? .......
}
其中花括號內的部分被稱為函數體?
設計算法的一般步驟如下:
(1)分析算法的功能
(2)確定算法有哪些輸入,將這些輸入設計成輸入型參數;確定算法有哪些輸出,將這些輸出設計為輸出型參數
(3)設計函數體,完成從輸入到輸出的操作過程
?而在設計輸出型參數的時候,我們會常常用到一種引用運算符“&”,當引用建立時,程序用另一個已定義的變量(目標變量)的名字對其初始化,此時引用變量作為目標變量的別名使用,對引用變量的改動實際上是對目標變量的改動,我們可以用以下代碼來進行理解
void swap(int &x,int &y)
{int tmp=x;x=y;y=tmp;
}
int &x=a;
int &y=b;//執行上述語句后,形參與實參的匹配如下
int &x=a;//x為a的引用
int &y=b;//y為b的引用
這樣子,a與x共享存儲空間,b與y共享存儲空間,因此執行函數后a和b的值都發生了交換。
學以致用,我們可以用這種辦法來設計一個算法,求一元二次方程的根
int solution(double a,double b,double c,double &x1,double &x2)
{double d;d=b*b-4*a*c;if(d>0){x1=(-b+sqrt(d))/(2*a);x2=(-b-sqrt(d))/(2*a);return 2;}else if(d==0){x1=(-b)/(2*a);return 1;}elsereturn 0;
}
三.今日總結
? ? ? ? 在今天的學習中,博主給大家帶來了C語言數據結構與算法中的抽象數據類型與算法描述的相關知識,在下一次的學習中,博主將會給大家帶來算法分析的相關知識,在這里感謝大家的關注與支持!歡迎在評論區分享屬于你的看法與見解,博主看到后會第一時間回復!