抽象數據類型的表示與實現
(1)預定義常扯及類型:
//函數結果狀態代碼
#define OK 1
#define ERROR 0
#define OVERFLOW -2
//Status 是函數返回值類型, 其值是函數結果狀態代碼。
typedef int Status;
(2)數據結構的表示(存儲結構)用類型定義(typedef)描述;數據元素類型約定為ElemType, 由用戶在使用該數據類型時自行定義。
(3)基本操作的算法都用如下格式的函數來描述:
函數類型函數名(函數參數表)
{
//算法說明
語句序列
}//函數名
當函數返回值為函數結果狀態代碼時, 函數定義為 Status 類型。為了便千描述算法,除了值 調用方式外,增加了C+ +語言引用調用的參數傳遞方式。 在形參表中, 以 "&"打頭的參數即為 引用參數。傳遞引用給函數與傳遞指針的效果是一樣的, 形參變化實參也發生變化,但引用使用 起來比指針更加方便、 高效。
(4)內存的動態分配與釋放。
使用 new 和 delete 動態分配和釋放內存空間:
分配空間 指針變扯=new 數據類型;
釋放空間 delete 指針變扯;
下面以復數為例, 給出一個完整的抽象數據類型的定義、 表示和實現。
ADT Complex {
數據對象:D={el, e2 I el, e2ER,R 是實數集}
數據關系: S={<el,e2>1el 是復數的實部, e2 是復數的虛部}
基本操作:
Creat (&C, x, y)
操作結果:構造復數C, 其實部和虛部分別被賦以參數x和y的值。
初始條件:復數C已存在。
操作結果:返回復數C的實部值。
GetReal(C)
初始條件:復數C已存在。
操作結果:返回復數c的虛部值。
Add( Cl,C2)
初始條件:Cl, C2 是復數。
操作結果:返回兩個復數 Cl和 C2 的和。
Sub(Cl,C2)
初始條件:Cl, C2 是復數。
操作結果:返回兩個復數 Cl 和 C2 的差。
} ADT Complex
用C語言寫出復數的存儲表示和相應操作
(2) 表示部分:
typedef struct{
float Realpart; //實部
float Imagepart; //虛部
}Complex;
(3) 實現部分:
void Create(&Complex C, float x, float y)
{//構造一個復數
C.Realpart=x;
C.Imagepart=y;
}
float GetReal(Complex C)
{
//取復數C=x+yi的實部
return C.Realpart;
}
float Getimag (Complex C)
{
//取復數C=x+yi的虛部
return C.Imagepart;
}
Complex Add(Complex Cl, Complex C2)
{
//求兩個復數Cl和C2的和sum
Complex sum;
sum.Realpart=Cl.Realpart+C2.Realpart;
sum.Imagepart=Cl.Imagepart+C2.Imagepart;
return sum;
}
Complex Sub(Complex Cl, Complex C2)
{
//求兩個復數Cl和C2的差difference
Complex difference;
difference.Realpart=Cl.Realpart-C2.Realpart;
difference.Imagepart=Cl.Imagepart-C2.Imagepart;
return difference;