Queue_使用栈来实现队列功能

之前同事给我讲的那个逆序输出数组的问题时,我还想过使用栈的先进后出特性来实现,但是稍微再想想还是不要了,根据数组本身就可以实现,使用栈就显得很多余了。栈先进后出的特性,要是稍加利用,也是可以实现先进先出的队列的效果。

Idea 

使用两个栈来实现先进先出的存储特性

使用栈暂存再取出的话,就是先进后出,顺序就颠倒过来,那如果再用一个栈来转存一下,不又是把颠倒的顺序载颠倒了一会,最后的结果就是和一开始输入的顺序一致了.以上步骤完成后就实现了先进先出的队列的功能

代码实现

先声明个customizedQueue类,然后使用inQueue()函数来实现将数据输入到inStack的功能 ,outQueue()函数来实现从outStack输出的功能,,chang()就是将数据从inStack转移到outStack中的功能:

主要如下所示

#include <iostream>
#include <stack>
using namespace std;

class customizedQueue {
private:
    stack<int> outStack;
    stack<int> inStack;
public:
    void inQueue(const int& a);
    void change();
    int outQueue();
};
/*
 *使用栈来实现一个队列
 *  队列的特点:
 *  先进先出
 */
#include "customizedQueue.h"

// 将需要翻转的元素先暂存在输入栈中
void customizedQueue::inQueue(const int& a) {
    inStack.push(a);
}
// 将输入存储栈中的元素全部转移到输出栈中
void customizedQueue::change() {
    cout << " change " << endl;
    int tmp;
    if (inStack.empty()) {
        exit(1);
    }
    while (inStack.size() > 0) {
        tmp = inStack.top();
        inStack.pop();
        outStack.push(tmp);
    }
}
// 将输出栈中的元素取出
int customizedQueue::outQueue() {
    if (outStack.empty()) {
        exit(1);
    }
    // cout << "size=" << outStack.size() << endl;
    int get = outStack.top();
    outStack.pop();
    return get;
}

int main() {
    customizedQueue* queue = new customizedQueue();
    int arr[] = {10, 7, 82, 9, 13, 5, 2, 34, 54, 3, 26, 6, 37, 6, 48, 11};
    int length = sizeof(arr) / sizeof(arr[0]);
    cout << " push " << endl;
    for (int i = 0; i < length; i++) {
        queue->inQueue(arr[i]);
    }
    queue->change();
    int result[length];
    for (int i = 0; i < length; i++) {
        cout << " pop " << endl;
        result[i] = queue->outQueue();
    }

    for (int i = 0; i < length; i++) {
        cout << result[i] << " ";
    }
    cout << " over" << endl;
    delete queue;
    return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值