剑指offer面试题 07附加题

本文介绍了一种使用两个队列来实现栈的基本操作的方法。通过C++代码演示了如何进行元素的压栈(push)、出栈(pop)及获取当前栈中元素数量的功能。该方法在不使用内置栈的情况下实现了栈的后进先出特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实现两个队列,完成栈的操作。


代码如下:

#include <iostream>
#include <queue>
#include <exception>
using namespace std;


template <typename T>class CStack
{
public :
CStack();
~CStack();


void push(const T&node);
T pop();
int getcount();
private:
int count;
queue<T> que1;
queue<T> que2;
};


template <typename T>
CStack<T>::CStack(){
count=0;


}


template <typename T>
CStack<T>::~CStack(){}


template <typename T>
int CStack<T>::getcount(){
return count;
}


template <typename T>
void CStack<T>::push(const T& node){
que1.push(node);
count++;
}


template <typename T>
T CStack<T>::pop(){
T result;
if(que1.size()==0){
if(que2.size()==0)
    throw new exception("stack is empty!");
while(que2.size()>1)
{
T temp=que2.front();
    que1.push(temp);
    que2.pop();
}
result=que2.front();
que2.pop();
}
else
{
while(que1.size()>1)
  {
    T temp=que1.front();
    que2.push(temp);
    que1.pop();
}
result=que1.front();
que1.pop();
}
count--;
return result;
}

void main(){
CStack<int> sta;
sta.push(3);
sta.push(5);
sta.push(7);
sta.push(8);




int temp;
 
while(sta.getcount()>0)
{
temp=sta.pop();
cout<<temp<<"\t"; 
}
}
 /*

        *输出结果:

        *8 7 5 3

        */

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值