實現--set
main.c 可以成功編譯,但是在編譯和執行程式之前,我們必須實現抽象資料型別和記憶體管理,如果乙個物件不儲存任何資訊,並且每乙個物件都至少屬於乙個set,那麼我們可以用乙個唯一的較小的正整數值來表示物件和每乙個set,而這些正整數值可以使用乙個陣列heap[ ]中的索引來表示。
如果乙個物件是set的成員,對應的陣列元素包含代表set的整數值。
sets和物件具有相同的展示,new( )不會在意type的型別描述,它將返回heap[ ]中值為0的元素,**如下:
#if ! defined many || many < 1#define many 10
#endif
static int heap [many];
void * new (const void * type, ...)
使用0來標記heap[ ]中的有效元素,結果,我們不能返回指向heap[0]的指標----假如是set,其成員可以獲得0索引。
new()可能越界,可以使用assert()來避免。
elete()必須小心null指標,乙個heap元素通過被設定為0從而被**:
void delete (void * _item)}
注:我們必須使用統一的方式來處理通用指標,於是我們使用在變數名前加下劃線字首的方法,只是用來初始化我們期待的型別並且名字接近的區域性變數。
乙個set有所包含的的物件表示:每乙個元素指向set,假如乙個元素包含many,就可以新增到set,否則,說明set中已經包含。
void * add (void * _set, const void * _element)其他的函式就簡單了,find( ) 僅僅用來判斷set中是否包含有下劃線字首的變數名元素:
void * find (const void * _set, const void * _element)contains( )將find( ) 得到的結果轉換為乙個真值:
int contains (const void * _set, const void * _element)drop( ) 依賴find( )函式來檢查要刪除的元素是否在set中,若是,則通過將相應的物件元素的值標記為many:
void * drop (void * _set, const void * _element)接著提供了乙個判斷兩個物件是否相等的函式differ( ):
int differ (const void * a, const void * b)完整的set.c源**如下:
#include #include #include "new.h"#include "set.h"
#include "object.h"
const void * set;
const void * object;
#if ! defined many || many < 1
#define many 10
#endif
static int heap [many];
void * new (const void * type, ...)
void delete (void * _item)
}void * add (void * _set, const void * _element)
void * find (const void * _set, const void * _element)
int contains (const void * _set, const void * _element)
void * drop (void * _set, const void * _element)
int differ (const void * a, const void * b)
物件導向程式設計 Java中的抽象資料型別
listiterator iter alist.listiterator alist.size while iter.hasprevious system.out.println iter.previous tostring 集合架構提供了對list介面的兩個實現 linkedlist 鍊錶 和ar...
c 抽象資料型別
include class shape virtual shape virtual long getarea error virtual long getperim virtual void draw class circle public shape circle long getarea lon...
抽象資料型別
本篇文章簡單的講解下表 棧 佇列。首先先了解一下什麼是抽象資料型別。它是這麼定義的 抽象資料型別 abstract data type,即adt 是帶有一組操作的一些物件的集合。那麼adt怎麼理解呢?首先你只需要記住表 集合 圖以及與他們各自的操作一起形成的物件都可以被看做抽象資料型別.這就跟整型 ...