一、棧和佇列
棧和佇列是非常常見的資料結構,都是限制訪問點的線性結構,在計算機領域中被廣泛應用,比如作業系統會給每個執行緒建立乙個棧用來儲存函式呼叫時各個函式的引數、返回位址及臨時變數等。棧的特點是後進先出,即最後被壓入棧的元素會第乙個被彈出,棧與遞迴聯絡緊密。佇列的特點是先入先出,只允許在表的一端進行插入,在另一端刪除元素,佇列主要應用於圖的遍歷。
雖然棧和佇列是特點針鋒相對的兩個資料結構,但它們之間卻相互聯絡。
二、用兩個棧實現佇列
首先建立兩個棧stack1,stack2。我們通過下圖來直觀理解如何實現佇列的插入和刪除操作。
我們可以總結出刪除乙個元素的步驟:當stack2中不為空時,在stack2中的棧頂元素是最先進入佇列的元素,可以彈出。如果stack2中為空時,我們把stack1中的元素逐個彈出並壓入stack2。由於先進入佇列的元素被壓到stack1的底端,經過彈出和壓入之後就處於stack2的頂端了,又可以直接彈出。
插入元素:直接壓入到stack1。
三、用兩個佇列實現棧
首先建立兩個佇列queue1,queue2。我們同樣通過下圖來直觀理解如何實現棧的插入和刪除操作。
我們可以總結出插入和刪除元素的步驟:
1)如果queue1和queue2都為空,插入元素到queue1,此時棧為空,無法刪除元素
2)如果queue1和queue2都不為空,插入元素到queue1,刪除操作:queue1中元素壓入到queue2,queue1中所剩最後乙個元素彈出即可;
3)如果queue1為空,queue2不空,插入元素到queue1,刪除操作:queue2中元素壓入到queue1,queue2中所剩最後乙個元素彈出即可;
4)如果queue1不空,queue2為空,插入元素到queue1,刪除操作:queue1中元素壓入到queue2,queue1中所剩最後乙個元素彈出即可。
四、**實現
兩個棧實現佇列
#pragma once
#include "sqstack.h"
class cqueue
;#include "stdafx.h"
#include "queue.h"
#include "sqstack.h"
#includeusing namespace std;
cqueue::cqueue(void)
cqueue::~cqueue(void)
cqueue::cqueue(int size)
int cqueue::deletehead()
} if(stack2.getsize() == 0)
sqstack::~sqstack(void)
sqstack::sqstack(int size)
void sqstack::push(int e)
int sqstack::pop()
b = c.deletehead();
cin>>a;
b = c.deletehead();
b = c.deletehead();
b = c.deletehead();
cout兩個佇列實現棧
#pragma once
class cqueue
;#include "stdafx.h"
#include "queue.h"
#includeusing namespace std;
#define maxqsize 10
cqueue::cqueue(void)
cqueue::~cqueue(void)
void cqueue::initcqueue()
int cqueue::queuelength()
void cqueue::enqueue(int e)
sqstack::~sqstack(void)
sqstack::sqstack(int size)
void sqstack::push(int e)
int sqstack::pop()
{ int a;
if(cqueue1.queuelength() == 0 && cqueue2.queuelength() == 0)
{ cout<
int main()
{ int r;
sqstack s(10);
s.push(1);
s.push(2);
r = s.pop();
cout<
有關集合佇列和棧的轉換
這幾天剛好學習了集合collection等子介面,下面是有關的乙個面試題解決方案 cpp view plain copy include include include using namespace std 兩個佇列模擬乙個堆疊 佇列a b 入棧 將元素依次壓入到非空的佇列,第乙個元素壓倒對列a ...
棧和佇列 單調佇列 單調棧
講解部落格鏈結 一 單調棧 1 什麼是單調棧?單調棧是指乙個棧內部元素具有嚴格單調性 單調遞增,單調遞減 的一種資料結構。2 單調棧的兩個性質 滿足從棧頂到棧底具有嚴格的單調性 滿足後進先出的特徵,越靠近棧底的元素越早的進棧。3 元素進棧的過程 對於當前進棧元素x 如果x 棧頂元素,x 進棧。否則 ...
棧和佇列 佇列
佇列 又一種特殊的線性表 佇列 queue 是只允許在一端進行插入,而在另一端進行刪除的運算受限的線性表 允許刪除的一端稱為隊頭 front 允許插入的一端稱為隊尾 rear 當佇列中沒有元素時稱為空佇列。佇列的修改是依先進先出的原則進行的。新來的成員總是加入隊尾 即不允許 加塞 每次離開的成員總是...