在資料結構中,有些簡單的線性結構是非常常用的,比如說堆疊可以用於實現函式的呼叫,佇列可以處理一些需要排隊的問題,下面就簡單介紹一下這兩種資料結構。
一:堆疊
堆疊是一種特殊的資料結構,特點是filo(first in, last out),而且處理的元素也只可以在棧頂這一端。下面給出堆疊常用介面,例如進棧出棧,檢視棧頂元素等。
#ifndef stack_h
#define stack_h
#include#includeusing namespace std;
templateclass stack
~stack()
//進棧操作
bool push(const elem & e)
else
} //出棧操作
bool pop(elem & popvalue)
else
} //列印棧元素
void show() const
cout << endl;
} //返回棧頂元素的值
elem gettopvalue()
else
} //判斷棧是否為空
bool isempty() const
//判斷棧是否已滿
bool isfull() const
};#endif
棧還有基於鍊錶的實現,此處不再具體給出,具體的實現方法和基於陣列的棧實現方法大同小異。
二:佇列
還有一種特殊的資料結構叫做佇列,現實生活中也經常有這種情況,佇列的特點fifo(first in, first out),而且只可以在隊尾插入元素,元素只可以在隊首出來。佇列有些比較常用的操作,比如進隊出隊,佇列的首尾元素叫法也不一樣(隊首是front,隊尾是rear)。基於陣列的佇列主要採取迴圈佇列的實現方法,下面簡單介紹迴圈佇列的實現過程。
迴圈佇列如下
下面是迴圈佇列基於陣列的實現
#include#includeusing namespace std;
templateclass queue
~queue()
//在隊尾插入元素
bool enqueue(const elem & e)
else
} //在隊首執行出對操作,並把出隊元素值儲存在dequeuevalue
bool dequeue(elem & dequeuevalue)
else
} //判斷佇列是否為空
bool isempty() const
//判斷佇列是否已滿
bool isfull() const
//列印佇列
void show() const
cout << endl;
}};
三:總結線性表、棧與佇列的異同點:相同點:邏輯結構相同,都是線性的;都可以用順序儲存或鍊錶儲存;棧和佇列是兩種特殊的線性表,即受限的線性表(只是對插入、刪除運算加以限制)。
不同點:
① 運算規則不同,線性表為隨機訪問,而棧是只允許在一端進行插入和刪除運算,因而是後進先出表lifo;佇列是只允許在一端進行插入、另一端進行刪除運算,因而是先進先出表fifo。
② 用途不同,線性表比較通用;堆疊用於函式呼叫、遞迴和簡化設計等;佇列用於離散事件模擬、多道作業處理和簡化設計等。
資料結構 堆疊和佇列
堆疊和佇列都是特殊的線性表,線性表 堆疊和佇列三者的資料元素以及資料元素之間的邏輯關係完全相同。差別 線性表的插入和刪除操作不受任何限制,而堆疊只能在棧頂插入和刪除,佇列只能在隊尾插入,在對頭刪除。順序表的鏈式表示 堆疊有兩端,插入元素和刪除元素的一端為棧頂,另一端為棧底。對於鏈式堆疊來說,顯然,吧...
資料結構 堆疊和佇列
主要是用於實現堆疊資料結構的儲存方式。先進後出 push pop 使用linkedlist模擬堆疊的資料結構儲存方式 class stacklist 進棧 public void add object o 彈棧 把元素刪除並返回。public object pop 獲取元素個數 public int...
資料結構基礎 堆疊佇列
棧主要講解 佇列主要講解 說明 所有原始碼均可以在idea上除錯。堆的實現 大小頂堆 原始碼和測試案例 查詢第k大的元素 堆排 原始碼和測試案例 優先佇列 棧的基本功能包括 入棧 push 出棧 pop 獲取棧頂元素 peek 獲取棧中實際容量 getrealsize 獲取棧中最大容量 getmax...