資料結構學習筆記 棧 佇列 (習題)

2021-06-03 20:54:41 字數 1389 閱讀 2769

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...