C 中的棧和佇列用法的簡介

2021-08-28 07:36:12 字數 3323 閱讀 2640

使用標準庫的棧和佇列時,先包含相關的標頭檔案

#include

#include

定義棧如下:

stackstk;

定義佇列如下:

queueq;

棧提供了如下的操作

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#includeusing namespace std;

int main(void)

cout<<"棧內的元素的個數為:"《棧是限定僅在表尾進行插入或刪除操作的線性表,因此表尾端成為棧頂,相應的,表頭端成為棧底,不含有任何元素的棧稱為空棧。

棧的修改遵循後進先出的原則,因此棧又稱為後進先出的線性表,簡稱lifo結構。

棧一般採用陣列作為其儲存結構,這樣做可以避免使用指標,簡化程式,當然陣列需要預先宣告靜態資料區的大小,但這不是問題,因為即便是頻繁進出入棧操作,任何時刻棧元素的實際個數也不會很多,為棧預留乙個足夠大但又不占用太多空間並不是很困難,如果不能做到這一點,那麼節省記憶體的方法就是使用鍊錶儲存棧。

線性表實現棧的基本操作

#include#includeusing 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#includeusing namespace std;

class t

};bool operator<(const t&t1,const t&t2)

那麼得到的輸出結果將會按照z的順序從小到大出隊。

C 中棧和佇列用法詳解

1.c 棧用法詳解 堆疊是乙個容器的改編,棧是限定僅在表尾進行插入或刪除操作的線性表,因此表尾端成為棧頂,相應的,表頭端成為棧底,不含有任何元素的棧稱為空棧。它實現了乙個先進後出的資料結構 filo 棧一般採用陣列作為其儲存結構,這樣做可以避免使用指標,簡化程式,當然陣列需要預先宣告靜態資料區的大小...

C 佇列 棧的基本用法

使用標準庫的棧和佇列時,先包含相關的標頭檔案 include include 定義棧如下 stackstk 定義佇列如下 queueq 棧提供了如下的操作 cpp view plain copy s.empty 如果棧為空返回 true 否則返回 false s.size 返回棧中元素的個數 s.p...

C 和 js中的棧 佇列

c queue.dequeue 從佇列中刪除第乙個元素並返回它 js array.shift 從陣列中刪除第乙個元素並返回它 1 static void main string args 2 10 queue.enqueue i 在隊裡結尾加上乙個元素11 12console.writeline 1...