使用两个栈实现一个队列,实现添加方法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;
}