基本資料結構(5) 有序表

2021-06-06 03:43:50 字數 2396 閱讀 7177

有序線性表是最基本的可搜尋容器,其提供除了可搜尋容器的操作,還有自己的一些基本操作。那麼什麼是可搜尋容器呢,可搜尋容器定義如下:

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。鍊錶的操作包...