劍指Offer 面試題七 用兩個棧實現佇列

2021-07-11 23:15:23 字數 1886 閱讀 7391

templateclass cqueue

; ~cqueue(void);

t deletehead();

void print();

private:

stackstack1;

stackstack2;

};

stack1只相當於乙個轉換器,新增元素時經過stack1將元素統統存入stack2中,也就是說stack2中存入元素,stack1始終未空。缺點:每增加一次元素就需要將stack2中的元素移動到stack1中,再儲存元素,最後將stack1中的元素移動到stack2中。

源**如下:

#include#includeusing std::cout;

using std::endl;

using std::stack;

templateclass cqueue

; ~cqueue(void);

t deletehead();

void print();

private:

stackstack1;

stackstack2;

}; stack1.push(node);

while (!stack1.empty()) }

templatet cqueue::deletehead()

templatevoid cqueue::print()

stacktemp = stack2;

while (!temp.empty()) }

int main()

執行結果:

1  2  3  4  5

12 3 4 5

23 4 5

34 545

5the queue is empty

請按任意鍵繼續. . .

stack1只存放被新增的元素,stack2只用來刪除元素,只有在刪除元素且stack2中的元素不足時才將stack1中的元素移動到stack2中,使得效率大大提高!

源**:

#include#includeusing std::cout;

using std::endl;

using std::stack;

templateclass cqueue2

; ~cqueue2(void);

t deletehead();

void print();

private:

stackstack1;

stackstack2;

};templatet cqueue2::deletehead()

} else

throw std::exception("the queue is empty!");

} t value = stack2.top();

stack2.pop();

return value;

}templatevoid cqueue2::print()

} //將stack1中的元素全部移動到stack2中以便列印

while (!stack1.empty())

stackstack = stack2;

while (!stack.empty()) }

int main()

執行結果:

1  2  3  4  5

12 3 4 5

23 4 5

34 545

5the queue is empty!

請按任意鍵繼續. . .

《劍指offer》面試題七 用兩個棧實現佇列

原題位址 題目描述 用兩個棧來實現乙個佇列,完成佇列的push和pop操作。佇列中的元素為int型別。這裡用兩個陣列來模擬兩個棧。由於棧的特點是先進後出,佇列的特點是先進先出,所以這裡要用兩個棧來實現,乙個棧先進後出,兩個棧的話就可以先進先出了。其中乙個棧 稱呼a棧吧 專門用來完成push操作。只要...

劍指Offer 面試題9用兩個棧實現佇列

思路 stack1存放著逆序的剩餘佇列,stack2存放著正序的佇列。pop的時候,當stack2為空,表示序列都在stack1中,則從stack1中迴圈pop後push到stack2,再從stack2中pop出隊首 stack2不為空則直接pop。push的時候,當stack2不為空,把資料從st...

劍指offer 面試題9 用兩個棧實現佇列

棧後進先出,佇列先進先出。1.當stack2不為空時,stack2中的棧頂元素是最先進入佇列的元素,可以彈出。2.當stack2為空時,把stack1中的元素逐個彈入並壓入stack2中,先入stack1的元素這時在stack2頂部,這時彈出stack2就完成了佇列 書上的圖更便於理解 class ...