抽象數據類型的表示與實現


抽象數據類型的表示與實現

(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;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM