一、栈和队列的区别
1.栈先进后出
2.队列先进先出
二、栈的向量实现代码
用到的vector函数:
clear、reserve、push_back、empty、back、pop_back
#include <vector>
template<class T,int capacity = 30>
class Stack{
private: vector<T> pool;
public:
Stack(){ pool.reserve(capacity);}
void clear(){pool.clear()}
void isEmpty(){return pool.empty();}
T pop(){
T el = pool.back();
pool.pop_back();
return el;
}
T& topEl(){
return pool.back(); //返回的是指针??
}
void push(const&T el){
pool.push_back(el)
}
}
三、队列的数组实现代码
队列有两端,一端加入新元素、一端、取出元素
template<class T,int size=100>
class ArrayQueue{
private:
int first,last; //last表示队列的最后一位,first代表队列第一位
T storage[size]; //size 代表数组长度
public:
ArrayQueue(){first = last = -1;}
void enqueue(T);
T dequeue();
bool isFull(){ //工具函数,用于加入元素
return first == 0 && last == size-1 || first == last+1;
}
bool isEmpty(){ //工具函数用于删除元素
return first == -1;
}
};
//插入元素
template<class T,int size>
void ArrayQueue<T,size>::enqueue(T el){
if(!isFull()){
if(last == size - 1 || last == -1) //加入第一个元素
{
stroage[0] = el;
last = 0;
if(first == -1) //first和last置零
first = 0;
}
else strage[last++] = el; //部不是第一个元素则last后移
else
cout << "Queue is full!" << endl;
}
}
删除队列中的元素
template<class T,int size>
T ArrayQueue<T,size>::dequeue(){
T tmp;
tmp = stroage[first];
if (first == last) //重新设值
first = last == -1;
else if (first == size - 1 ) //删除到最后一个,此时first
first = 0;
else first++;
return tmp;
}