使用標準庫的棧和佇列時,先包含相關的標頭檔案
#include
#include
定義棧如下:
stack stk;
定義佇列如下:
queue q;
棧提供了如下的操作
s.empty() 如果棧為空返回true,否則返回false
s.size() 返回棧中元素的個數
s.pop() 刪除棧頂元素但不返回其值
s.top() 返回棧頂的元素,但不刪除該元素
s.push() 在棧頂壓入新元素佇列提供了下面的操作
q.empty() 如果隊列為空返回true,否則返回false
q.size() 返回佇列中元素的個數
q.pop() 刪除佇列首元素但不返回其值
q.front() 返回隊首元素的值,但不刪除該元素
q.push() 在隊尾壓入新元素
q.back() 返回佇列尾元素的值,但不刪除該元素它是乙個容器的改編,它實現了乙個先進後出的資料結構(filo)
使用該容器時需要包含#include標頭檔案;
定義stack物件的示例**如下:
stacks1;
stacks2;
stack的基本操作有:
1.入棧:如s.push(x);
2.出棧:如 s.pop().注意:出棧操作只是刪除棧頂的元素,並不返回該元素。
3.訪問棧頂:如s.top();
4.判斷棧空:如s.empty().當棧空時返回true。
5.訪問棧中的元素個數,如s.size();
下面舉乙個簡單的例子:
#include
#include
using namespace std;
int main(void)
cout《棧是限定僅在表尾進行插入或刪除操作的線性表,因此表尾端成為棧頂,相應的,表頭端成為棧底,不含有任何元素的棧稱為空棧。
棧的修改遵循後進先出的原則,因此棧又稱為後進先出的線性表,簡稱lifo結構。
棧一般採用陣列作為其儲存結構,這樣做可以避免使用指標,簡化程式,當然陣列需要預先宣告靜態資料區的大小,但這不是問題,因為即便是頻繁進出入棧操作,任何時刻棧元素的實際個數也不會很多,為棧預留乙個足夠大但又不占用太多空間並不是很困難,如果不能做到這一點,那麼節省記憶體的方法就是使用鍊錶儲存棧。
線性表實現棧的基本操作#include
#include
using namespace std;
typedef struct stacknode//定義鏈式棧的結構體
stacknode,*stack;
//初始化乙個鏈式棧(返回乙個鏈式棧的頭節點)
stack initstack()
//入棧
void push(stack stack,int newdata)
//找到最後乙個節點
stacknode *lastnode=stack;
while(lastnode->next)
lastnode->next=(stacknode*)malloc(sizeof(stacknode*));
lastnode->next->data=newdata;
lastnode->next->next=null;
printf("入棧成功!\n");
} //出棧
int pop(stack stack)
//找到最後乙個節點的錢乙個節點
//tempnode:最後乙個節點的前乙個節點
stacknode *tempnode=stack;
while(tempnode->next->next)
int data=tempnode->next->data;
free(tempnode->next);
tempnode->next=null;
return data;
} int main()
c++ queue(佇列)
queue模版類的定義在標頭檔案中。
queue與stack模版非常類似,queue模版也需要定義兩個模版引數,乙個是元素型別,乙個是容器型別,元素型別是必要的,容器型別是可選的,預設為dqueue型別。
定義queue物件的示例**如下:
queueq1;
queueq2;
queue的基本操作有:
1.入隊:如q.push(x):將x元素接到佇列的末端;
2.出隊:如q.pop() 彈出佇列的第乙個元素,並不會返回元素的值;
3,訪問隊首元素:如q.front()
4,訪問隊尾元素,如q.back();
5,訪問隊中的元素個數,如q.size();
二.優先佇列
在標頭檔案中,還定義了乙個非常有用的模版類priority_queue(優先佇列),優先佇列與佇列的差別在於優先佇列不是按照入隊的順序出隊,而是按照佇列中元素的優先權順序出隊(預設為大者優先,也可以通過指定運算元來指定自己的優先順序)預設是乙個大根堆。
priority_queue模版類有三個模版引數,元素型別,容器型別,比較運算元。其中後兩個都可以省略,預設容器為vector,預設運算元為less,即小的往前排,大的往後排(出隊時序列尾的元素出隊)。
定義priority_queue物件的示例**如下:
priority_queueq1;
priority_queue >q2;
priority_queue,greater >q3;//定義小的先出隊
priority_queue的基本操作均與queue相同
初學者在使用priority_queue時,最困難的可能就是如何定義比較運算元了。如果是基本資料型別,或已定義了比較運算子的類,可以直接用stl的less運算元和greater運算元——預設為使用less運算元,即小的往前排,大的先出隊。如果要定義自己的比較運算元,方法有多種,這裡介紹其中的一種:過載比較運算子。優先佇列試圖將兩個元素x和y代入比較運算子(對less運算元,呼叫xy),若結果為真,則x排在y前面,y將先於x出隊,反之,則將y排在x前面,x將先出隊。
看下面這個簡單的示例:
#include
#include
#include
using namespace std;
class t
};
bool operatorq;
q.push(t(4,4,3));
q.push(t(2,2,5));
q.push(t(1,5,4));
q.push(t(3,3,6));
while(!q.empty())
{ t t=q.top();
q.pop();
cout<
C 棧和佇列的使用
要使用標準庫的棧和佇列,首先得新增標頭檔案 include include using namespace std 定義棧 stackcurstack 定義佇列 queuecurqueue 棧的操作 curstack.empty 如果棧為空返回true,否則返回false curstack.size...
棧和佇列的使用 C
棧和佇列,都是線性結構。棧是後進先出 佇列是先進後出 include includestacks queueq 1.s.empty 如果棧s為空,返回true,否則返回false 2.s.size 返回棧的長度 3.s.pop 棧頂元素出棧 4.s.push x 把x入棧 5.s.top 返回棧頂元...
C 棧和佇列的使用
要使用標準庫的棧和佇列,首先得新增標頭檔案 include include 定義棧 stackcurstack 定義佇列 queuecurqueue 棧的操作 curstack.empty 如果棧為空返回true,否則返回false curstack.size 返回棧內元素的大小 curstack....