1. 引言
本文主要講解棧和佇列的一些常見的面試題。
2.一些常見的面試題
2.1 題目:輸入兩個整數序列。其中乙個序列表示棧的push順序,判斷另乙個序列有沒有可能是對應的pop順序。為了簡單起見,我們假設push序列的任意兩個整數都是不相等的。
比如輸入的push序列是1、2、3、4、5,那麼4、5、3、2、1就有可能是乙個pop系列。因為可以有如下的push和pop序列:push 1,push 2,push 3,push 4,pop,push 5,pop,pop,pop,pop,這樣得到的pop序列就是4、5、3、2、1。但序列4、3、5、1、2就不可能是push序列1、2、3、4、5的pop序列。
//棧的push、pop序列
#include#include#includeconst int size=5; //定義長度
using namespace std;
bool decidepushpopsequence(
int* push_sequence ,
int* pop_sequence,
int length
) int top2 = stack.top();
stack.pop();
reversestack(stack);
stack.push(top);
reversestack(stack);
stack.push(top2);
}int main()
} /*
不依賴輔助棧,每次將最頂上的元素沉到擁有stack_size個元素的子棧棧底
*/
void reversestack(
std::stack& s, //當前考慮的子棧
int pop_size, //剩餘出棧元素個數
int stack_size, //子棧大小
int& top_element //棧頂元素
) //當前考慮的棧已經為空
if (pop_size == 0)
int top = s.top();
s.pop();
pop_size--;
reversestack(s,pop_size,stack_size,top_element);
//返回後,恢復棧中的元素
s.push(top);
} int main(void){
stackrev_stack;
for(int i=0;i
資料結構學習筆記 棧與佇列
二 佇列 總結參考文獻 棧和佇列的資料操作範圍僅限於邏輯上特定的某端,棧先進後出,佇列先進先出。操作介面 功能返回型別 size 報告棧的規模 intempty 判斷棧是否為空 bool push e 將e插至棧頂 void pop 刪除棧頂物件 ttop 引用棧頂物件 t include vect...
資料結構學習 棧和佇列
棧是限定僅在表尾進行插入和刪除操作的線性表。我們把插入和刪除的一段稱為棧頂,另一端稱為棧底,不含任何元素的棧稱為空棧。由於棧本身是乙個線性表,因此棧的儲存方式也有兩種,分別是順序儲存和鏈式儲存。既然棧是線性表的特列,那麼棧的順序儲存其實也是線性表順序儲存的簡化。我們稱為順序棧。1 兩棧的共享空間 此...
資料結構學習筆記 棧
它是一種運算受限的線性表。其限制是僅允許在表的一端進行插入和刪除運算。這一端被稱為棧頂,相對地,把另一端稱為棧底。向乙個棧插入新元素又稱作進棧 入棧或壓棧,它是把新元素放到棧頂元素的上面,使之成為新的棧頂元素 從乙個棧刪除元素又稱作出棧或退棧,它是把棧頂元素刪除掉,使其相鄰的元素成為新的棧頂元素。p...