两个栈实现一个队列

使用两个栈实现一个队列,实现添加方法appendData,实现删除对头元素方法deleteData,实现查看对头元素headData方法

思路:栈是现金后出的数据结构,队列是先进先出的数据结构。可以使用第一个栈存入数据实现appendData。需要删除或者查看队头元素时,如果第二个栈为空,把第一个栈的数据存放到第二个栈里面,返回第二个栈的栈顶元素就可以了。如果第二个栈不为空,直接返回第二个栈的栈顶元素。

stack.hpp头文件

​#ifndef StackQueue_hpp
#define StackQueue_hpp

#include <stdio.h>
#include <iostream>
#include <stack>


#endif /* StackQueue_hpp */


class StackQueue {
    private:
        std::stack<int> stack1;
        std::stack<int> stack2;
    public:
        //查看第一个元素
        int headData();
        //向队尾添加元素
        void appendData(int number);
        //删除队头元素
        void deleteData();
};

stack.cpp文件

#include "StackQueue.hpp"

//向队尾添加元素
void StackQueue::appendData(int number){
    stack1.push(number);
}

//删除队头元素
void StackQueue::deleteData(){
    if (stack2.size() <= 0) {
        while (stack1.size() > 0) {
            int num = stack1.top();
            stack1.pop();
            stack2.push(num);
        }
    }
    
    if (stack2.size() == 0) {
        std::cout<<"queue is empty"<<std::endl;
        return;
    }
    
    stack2.pop();
}

//查看第一个元素
int StackQueue::headData(){
    if (stack2.size() <= 0) {
        while (stack1.size() > 0) {
            int num = stack1.top();
            stack1.pop();
            stack2.push(num);
        }
    }
    if (stack2.size() == 0) {
        std::cout<<"queue is empty"<<std::endl;
        return -1;
    }
    return stack2.top();
}

main函数

#include <iostream>
#include "StackQueue.hpp"


int main(int argc, const char * argv[]) {
    
    StackQueue queue;
    queue.appendData(1);
    queue.appendData(2);
    queue.appendData(3);
    queue.appendData(4);
    queue.appendData(5);
    
    queue.deleteData();
    std::cout<<queue.headData()<<std::endl;
    
    return 0;
}
上一篇:C++ priority_queue 容器


下一篇:LinbDesk --- 新的extjs4.2 desktop demo : 技术交流Q群:336584192