基礎知識:
stack 模板類的定義在標頭檔案中。
stack 模板類需要兩個模板引數,乙個是元素型別,乙個容器型別,但只有元素型別是必要
的,在不指定容器型別時,預設的容器型別為deque。
定義stack 物件的示例**如下:
stacks1;
stacks2;
stack 的基本操作有:
入棧,如例:s.push(x);
出棧,如例:s.pop();注意,出棧操作只是刪除棧頂元素,並不返回該元素。
訪問棧頂,如例:s.top()
判斷棧空,如例:s.empty(),當棧空時,返回true。
訪問棧中的元素個數,如例:s.size()。
queue 模板類的定義在標頭檔案中。
與stack 模板類很相似,queue 模板類也需要兩個模板引數,乙個是元素型別,乙個容器類
型,元素型別是必要的,容器型別是可選的,預設為deque 型別。
定義queue 物件的示例**如下:
queueq1;
queueq2;
queue 的基本操作有:
入隊,如例:q.push(x); 將x 接到佇列的末端。
出隊,如例:q.pop(); 彈出佇列的第乙個元素,注意,並不會返回被彈出元素的值。
訪問隊首元素,如例:q.front(),即最早被壓入佇列的元素。
訪問隊尾元素,如例:q.back(),即最後被壓入佇列的元素。
判斷佇列空,如例:q.empty(),當佇列空時,返回true。
訪問佇列中的元素個數,如例:q.size()
實現**:
class solution
int pop()
}int tmp = stack2.top();
stack2.pop();
return tmp;
}private:
stackstack1;
stackstack2;
};
《分析》:
入隊:將元素進展a
出隊:判斷棧b是否為空,如果為空,則將棧a中所有元素pop,並push進展b,棧b出棧;
如果不為空,棧b直接出棧
拓展:
用兩個佇列實現乙個棧的功能?要求給出演算法和思路!
《分析》:
入棧:將元素進佇列a
出棧:判斷佇列a中元素的個數是否為1,如果等於1,則出佇列,否則將佇列a中的元素 以此出佇列並放入佇列b,直到佇列a中的元素留下乙個,然後佇列a出佇列,再把 佇列b中的元素出佇列以此放入佇列a中。
兩個棧實現佇列 兩個佇列實現棧
1.兩個棧實現佇列 大致思路 入佇列時,將元素入棧s1,出佇列時,將s2中的元素出棧即可,如果s2為空,那麼將s1中 s1.size 1 個元素出棧,加入到s2中,然後將s1中最後乙個元素出棧,即完成了出佇列的操作 include using namespace std include includ...
兩個棧實現佇列,兩個佇列實現棧
include include include using namespace std 使用兩個棧實現佇列,實現了push,pop,front操作 其中棧s2是輔助棧,push直接在s1中插入 pop從s2中出棧,如果s2是空的,將s1倒進s2,然後再出棧,這樣減少了倒棧次數,比較高效。front就...
兩個棧實現佇列 兩個佇列實現棧
一 題目描述 用兩個棧來實現乙個佇列,完成佇列的push和pop操作。佇列中的元素為int型別。二 1 自己 基本思路 乙個棧用於壓縮,乙個專門用於彈出。因為棧是先進後出,所有的元素入棧再出棧,再入棧就可以將順序調整過來。但是沒有想到優化。class solution int pop int tem...