有序線性表是最基本的可搜尋容器,其提供除了可搜尋容器的操作,還有自己的一些基本操作。那麼什麼是可搜尋容器呢,可搜尋容器定義如下:
class searchablecontainer : public virtual container
;
也就是說,具有ismember(判斷是否含有某物件)、insert(插入某物件)、withdraw(刪除某物件)和find(查詢某物件)這四個基本操作的抽象容器就是可搜尋容器。
那麼什麼是有序線性表呢?定義如下:
class position : public iterator
;class list : public virtual searchablecontainer
;class orderedlist : public virtual list
;
我們看到有序線性表orderedlist除了具備可搜尋容器的基本特性,同時還具有以下操作:
virtual object& operator :訪問表中某一給定位置上的物件。
virtual position& findposition:查詢物件在表中的位置。
virtual void withdraw (position):刪除表中某一給定位置上的物件。
virtual void insertafter:把乙個物件插在某一給定物件位置之後。
virtual void insertbefore:把乙個物件插在某一給定物件位置之前。
有序線性表的陣列表示法:
class listasarray : public virtual orderedlist
;listasarray::listasarray (unsigned int size) :
array (size)
{}void listasarray::insert (object& object)
object& listasarray::operator (unsigned int offset) const
bool listasarray::ismember (object const& object) const
object& listasarray::find (object const& object) const
void listasarray::withdraw (object& object)
class listasarray::pos : public position
;position& listasarray::findposition (object const& object) const
object& listasarray::operator (position const& arg) const
void listasarray::insertafter (
position const& arg, object& object)
void listasarray::withdraw (position const& arg)
有序表也可以通過鍊錶來實現,有興趣的可以自己去研究一下,不再贅述。
排序表是另一種很有用的可搜尋容器,它跟有序線性表的區別在於,不提供前插和後插的操作,當插入元素後,表中所有的元素應保持有序狀態,來看實現:
class sortedlist : public virtual list
;
這可能是全文中最簡單的乙個抽象類實現了,其就是乙個廣義表。來看排序表的陣列表示法:
class sortedlistasarray :
public virtual sortedlist, public virtual listasarray
;void sortedlistasarray::insert (object& object)
array [i] = &object;
++count;
}unsigned int sortedlistasarray::findoffset (
object const& object) const
return count;
}object& sortedlistasarray::find (object const& object) const
position& sortedlistasarray::findposition (
object const& object) const
void sortedlistasarray::withdraw (object& object)
同樣,我們也不再贅述鍊錶的實現方案了。
5 基本資料結構 集合
集合 set 是乙個無序的不重複元素序列。可以使用大括號或者set 函式建立集合,注意 建立乙個空集合必須用set 而不是,因為是用來建立乙個空字典。1.建立空集合1.set test 2.set 2.集合操作 print basket a set abracadabra print a b set...
基本資料結構 順序表
順序表,陣列就是典型的順序表,順序表便於查詢元素,單移動 刪除時間開銷比較大,好了廢話少說,直接上 對照原始碼看吧 ifndef seqlist h define seqlist h include include using std cin using std cout using std cer...
基本資料結構 鍊錶
鍊錶 鍊錶與陣列的區別是鍊錶中的元素順序是有各物件中的指標決定的,相鄰元素之間在物理記憶體上不一定相鄰。採用鍊錶可以靈活地表示動態集合。鍊錶有單鏈表和雙鏈表及迴圈鍊錶。書中著重介紹了雙鏈表的概念及操作,雙鏈表l的每乙個元素是乙個物件,每個物件包含乙個關鍵字和兩個指標 next和prev。鍊錶的操作包...