棧
1.棧是一種線性存儲結構,元素遵循“先進後出”,並且只能在棧頂進行插入和刪除,
2、棧的相關概念:
(1)棧頂與棧底:允許元素插入與刪除的一端稱爲棧頂,另一端稱爲棧底
(2)壓棧:棧的插入操作,叫做進棧,也稱壓棧、入棧。
(3)彈棧:棧的刪除操作,也叫做出棧。
3、棧的常用操作爲:
(1)彈棧,通常命名爲pop
(2)壓棧,通常命名爲push
(3)求棧的大小
(4)判斷棧是否爲空
(5)獲取棧頂元素的值
s.empty(); //如果棧爲空則返回true, 否則返回false;
s.size(); //返回棧中元素的個數
s.top(); //返回棧頂元素, 但不刪除該元素
s.pop(); //彈出棧頂元素, 但不返回其值
s.push(); //將元素壓入棧頂
隊列
另一種線性存儲結構–隊列。他的元素遵循“先進先出”,隊首刪除,隊尾插入
隊列在數據結構中分爲普通隊列和環形隊列。首先說說普通隊列,就是一種類似隧道的數據結構,對於隊列裏的數據,是先入先出,這點和棧相反。但是普通隊列有些缺點,下面來說說普通隊列缺點。
普通隊列的數據從對頭開始離開的時候,後面一個內存空間會變爲新的隊頭,那麼對頭離開後剩下的內存空間就被剩下了,這就讓內存空間利用率不高。但是環形隊列就可以很好的解決這個問題,但是有點難哈。
環形隊列就是一個換,這個環裏可以分配內存空間,數據在環裏進行排隊,對頭刪了,又可以加上新的數據變爲隊偉,這樣內存的使用率就增加了
class Qu
{
public:
Qu(int QueueCapaticy);//構造函數來產生一個內存空間,用來存放隊列
void clearQu();//清楚隊列裏的數據
bool emptyQu() const;//判斷隊列是否爲空隊列
int QuLen();//返回值爲隊列長度
bool enterQu(int element);//數據進入隊列
bool deleteQu(int element);//刪除隊列裏的數據
bool fullQu();//判斷隊列是否滿狀態,滿了就不能插入數據了
void travelQu();//遍歷數列裏的數據
private:
int m_iQueueCapaticy;//隊列存儲內存空間大小
int m_iQueueLen;//記錄隊列長度
int m_iHead;//隊列頭
int m_iTail;//隊列尾
int* m_pQueue;//隊列指針
};