栈的c++模板实现
在我们软件开发中,经常要用到栈这个重要的数据结构,栈是一种先进后出的线性结构,以前见过很多人在网上写的例子,都是基于基本数据类型的,而在我们的实际开发中,大部分都是基于特定的类型,我们不可能为每一种数据写一个版本,那样太累了,可扩展性也不好,所以就必须要用模板来实现。
下面是实现的代码,有写的不好和不完善的地方,大家一起讨论:
#pragma once#include <stdlib.h>template<class ETYPE>class Stack{public:Stack(void);~Stack(void);int push(const ETYPE& e);//将元素压入栈int pop(ETYPE &e);//将栈顶元素出栈int isEmpty() const//判断栈是否为空{return top == -1;}int isFull() const//判断栈是否满{return top == size-1;}ETYPE operator [] (int index);int Size() const{return top + 1;}ETYPE* getData() const;//获得数据private:int size;//元素个数int top;//栈顶指针ETYPE *stackPtr;//指向栈顶元素的指针};//定义部分template<class ETYPE>Stack<ETYPE>::Stack(void){size = 100;top = -1;stackPtr = new ETYPE[size]; }template<class ETYPE>Stack<ETYPE>::~Stack(void){delete [] stackPtr;}template<class ETYPE>int Stack<ETYPE>::push(const ETYPE &e){//如果栈已经满,则追加空间if (isFull()){stackPtr = (ETYPE *)realloc(stackPtr,(size+10)*sizeof(ETYPE));stackPtr[++top] = e;size += 10;//容量也加10return 1;}else{stackPtr[++top] = e;return 1;}return 0;}template<class ETYPE>int Stack<ETYPE>::pop(ETYPE &e){if (!isEmpty()){e = stackPtr[top--];return 1;}return 0;}template <class ETYPE>ETYPE Stack<ETYPE>::operator[](int index){return stackPtr[index];}template <class ETYPE>ETYPE* Stack<ETYPE>::getData() const{return stackPtr;}
这样我以后就可以每次都用这个代码了 不用改过来改过去