1. 程式人生 > >棧(順序儲存)C++模板實現

棧(順序儲存)C++模板實現

#include <iostream>
using namespace std;

template <typename T>
class stack{
	private:
		int top;  //棧頂指標
		int maxLen; //棧最大長度
		T *data;  //用陣列來建立棧
	public:
		stack(int top_ = -1 , int maxLen_ = 10):top(top_),maxLen(maxLen_){
			data = new T[maxLen];  //長度為maxLen的動態陣列
		}
		~stack(){
			delete [] data; //釋放動態陣列
		}
		void Push(T x); //將x推進棧
		void Pop(); //推出棧頂元素
		T getPeek(); //讀棧頂元素
		bool isEmpty(); //判斷棧是否為空
		bool isFull(); //判斷棧是否滿
		void printAll(); //列印整個棧
};

template <typename T>
void stack<T>::Push(T x){  //將x推進棧,實現部分
	if(isFull())
		return;
	top++;
	data[top] = x;
}

template <typename T>
void stack<T>::Pop(){  //推出棧頂元素,實現部分
	if(isEmpty())
		return;
	top--;
}

template <typename T>
T stack<T>::getPeek(){  //獲得棧頂元素,實現部分
	if(isEmpty())
		return;
	return data[top];
}

template <typename T>
bool stack<T>::isEmpty(){  //判斷棧是否為空,實現部分
	return top==-1;
}

template <typename T>
bool stack<T>::isFull(){  //判斷棧是否滿,實現部分
	return top==maxLen-1;
}

template <typename T>
void stack<T>::printAll(){ //列印棧內元素,實現部分
	if(isEmpty())
		return;
	for(int i = 0; i <=top ; i++){
		cout<<data[i]<<endl;
	}
}
void main(){
	stack<int> a; //建立元素型別為int的棧物件
	a.Push(1);  //將1推進棧
	a.Push(2);  //將2推進棧
	a.Push(3);  //將3推進棧
	a.Push(4);  //將4推進棧
	a.Push(5);  //將5推進棧
	a.Pop();    //彈出棧頂元素
	a.printAll(); //列印棧內元素
}