这两天学习了队列和栈(当然还有哈希表,不过暂且不表),由于队列与栈的类似性故放在一块讲。
队列和栈与链表不一样在于其强调的不是存储单元间的关系而是存储后数据流动的一种形式,队列和栈恰好相互对应,一个是先进先出,一个是先进后出。一张图便能轻易掌握这两种数据结构的特点。说白了栈就像个桶,而队列就像个带开关的漏斗。
废话不多说,直接上代码,以栈为例,通过栈1.0版来看栈的建立以及一些基本操作。队列则可举一反三得到。
#include<iostream>
#include<cassert> //提供assert
using namespace std;
template<class Type> class Stack{
private:
Type* data;
int size,top_index;
public:
Stack(int input_length){
data = new Type[input_length];
size = input_length;
top_index=-1;
}
~Stack(){ delete[] data;}
bool insert(const Type &value){
if(top_index<size-1){
data[++top_index]=value;
return true;
}
else{ return false;}
}
bool pop(){
if(isempty()){ return false;}
else{
top_index--;
return true;
}
bool isempty(){
if(top_index<0){
return true;
}
else { return false;}
}
Type top(){
assert(top_index>=0);
return data[top_index];
}
};
其中在学习的时候多出模板类的定义,这样在选择入栈的数据类型时也较Typedef更为方便。
代码依旧很简单,初级也很容易看懂,里面以数组为载体定义了出栈入栈判断是否为空以及得栈顶元素的基本功能,实现方式可能还有大的改善空间,不过也基本够用了…
继续 ps:如有不对的地方望广大高手批评指点。。。