如何通过两个栈实现数据结构模拟队列的实例?

2026-05-20 00:231阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计353个文字,预计阅读时间需要2分钟。

如何通过两个栈实现数据结构模拟队列的实例?

数据结构用两个栈实现一个队列的实例。栈是后进先出(LIFO),队列是先进先出(FIFO)。每次元素都push到st1中,pop的时候,如果st2为空,就将st1的栈顶元素弹出并push到st2的栈底。这样,st1的所有元素都会依次放入st2中,实现了队列的先进先出。

数据结构用两个栈实现一个队列的实例

如何通过两个栈实现数据结构模拟队列的实例?

栈是先进后出,队列是先进先出

每次元素都push在st1中,pop的时候如果st2为空,将st1的栈顶元素放在st2的栈底,这样st1的所有元素都放在st2中,st1的栈底就是st2的栈顶,pop st2的栈顶,这样就满足了队列的先进先出。

#include <iostream> using namespace std; #include <stack> #include <stdlib.h> template <class T> class SQueue { public: void Push(const T& value); T Pop(); private: stack<T> st1; stack<T> st2; }; template <class T> T SQueue<T>::Pop() { if (st2.size() <= 0) { if (st1.size() == 0) { exit(1); } while ((st1.size() > 0)) { T& top = st1.top(); st2.push(top); st1.pop(); } } T head = st2.top(); st2.pop(); return head; } template <class T> void SQueue<T>::Push(const T& value) { st1.push(value); } int main() { SQueue<int> sq; for (int i = 0; i < 10; ++i) { sq.Push(i); } for (int i = 0; i < 5; ++i) { cout << sq.Pop() << " "; } for (int i = 0; i < 5; ++i) //分两次验证 { cout << sq.Pop() << " "; } cout << endl; system("pause"); return 0; }

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

标签:实例

本文共计353个文字,预计阅读时间需要2分钟。

如何通过两个栈实现数据结构模拟队列的实例?

数据结构用两个栈实现一个队列的实例。栈是后进先出(LIFO),队列是先进先出(FIFO)。每次元素都push到st1中,pop的时候,如果st2为空,就将st1的栈顶元素弹出并push到st2的栈底。这样,st1的所有元素都会依次放入st2中,实现了队列的先进先出。

数据结构用两个栈实现一个队列的实例

如何通过两个栈实现数据结构模拟队列的实例?

栈是先进后出,队列是先进先出

每次元素都push在st1中,pop的时候如果st2为空,将st1的栈顶元素放在st2的栈底,这样st1的所有元素都放在st2中,st1的栈底就是st2的栈顶,pop st2的栈顶,这样就满足了队列的先进先出。

#include <iostream> using namespace std; #include <stack> #include <stdlib.h> template <class T> class SQueue { public: void Push(const T& value); T Pop(); private: stack<T> st1; stack<T> st2; }; template <class T> T SQueue<T>::Pop() { if (st2.size() <= 0) { if (st1.size() == 0) { exit(1); } while ((st1.size() > 0)) { T& top = st1.top(); st2.push(top); st1.pop(); } } T head = st2.top(); st2.pop(); return head; } template <class T> void SQueue<T>::Push(const T& value) { st1.push(value); } int main() { SQueue<int> sq; for (int i = 0; i < 10; ++i) { sq.Push(i); } for (int i = 0; i < 5; ++i) { cout << sq.Pop() << " "; } for (int i = 0; i < 5; ++i) //分两次验证 { cout << sq.Pop() << " "; } cout << endl; system("pause"); return 0; }

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

标签:实例