1. 程式人生 > >C++ STL 棧和隊列

C++ STL 棧和隊列

true mage 它的 esp blog 增加 nbsp last ref

(轉載)原文地址

一.解釋:

1.棧

  棧是一種特殊的線性表。其特殊性在於限定插入和刪除數據元素的操作只能在線性表的一端進行。如下所示:

  技術分享圖片

  結論:後進先出(Last In First Out),簡稱為LIFO線性表。

  舉個例子:你在洗碗把洗好的碗編號為1、2、、、n依次摞起來,1號在最下面,向上編號依次增加,然後再從上到下把碗放好,這樣的話,先被洗的碗,就後被放好。

2.隊列

  隊列(Queue)也是一種運算受限的線性表,它的運算限制與棧不同,是兩頭都有限制,插入只能在表的一端進行(只進不出),而刪除只能在表的另一端進行(只出不進),允許刪除的一端稱為隊尾(rear),允許插入的一端稱為隊頭 (Front),如圖所示:

技術分享圖片

結論:隊列的操作原則是先進先出的,所以隊列又稱作FIFO表(First In First Out)

舉個例子:超市付賬的時候排隊,先來的先排在最前面,後來的後排在隊伍最後面,付賬時排在隊伍前面的先付賬,排在後面的後付賬。

二.用法

1.頭文件

#include<queue>// 隊列 
#include<stack>//

2.定義方式

stack<int>  s;//參數也是數據類型,這是棧的定義方式
queue<int>  q; //參數是數據類型,這是隊列的定義方式

3.常用操作

棧:
s.empty()
//如果棧為空返回true,否則返回false s.size()//返回棧中元素的個數 s.pop()//刪除棧頂元素但不返回其值 s.top()//返回棧頂的元素,但不刪除該元素 s.push(X)//在棧頂壓入新元素 ,參數X為要壓入的元素
隊列:
q.empty()// 如果隊列為空返回true,否則返回false  
q.size() // 返回隊列中元素的個數  
q.pop()  //刪除隊列首元素但不返回其值  
q.front()  // 返回隊首元素的值,但不刪除該元素  
q.push(X) //在隊尾壓入新元素 ,X為要壓入的元素
q.back() //返回隊列尾元素的值,但不刪除該元素

三、例子

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <queue>
#include <stack>
#include <vector>
using namespace std;
int main()
{
    queue<int> q;
    stack<char> s;
    q.push(1);
    cout << q.enpty() << endl;
    q.push(2);
    cout << q.front() << endl;
    q.pop();
    cout << q.front() << endl;
    q.pop();
    cout << q.empty() <<endl;
    s.push(a);
    cout << s.top() <<endl;
    s.push(b);
    cout << s.top();
    s,pop();
    cout << s.top();
}

C++ STL 棧和隊列