简单栈实现

using namespace std;

const int MAX_SIZE = 100;

template<class DataType>
class Stack {
private:
	DataType *data;
	int size;
	int top;
public:
	Stack();
	Stack(int len);
	~Stack();
	void push(DataType ch);
	DataType pop();
	DataType getTop();
	bool isEmpty();
	bool isFull();
	void setNull();
	class Full{};
	class Empty{};
};

template<class DataType>
Stack<DataType>::Stack() {
	data = new DataType[MAX_SIZE];
	size = MAX_SIZE;
	top = -1;
}

template<class DataType>
Stack<DataType>::Stack(int len) {
	data = new DataType[len];
	size = len;
	top = -1;
}

template<class DataType>
Stack<DataType>::~Stack() {
	delete [] data;
}

template<class DataType>
void Stack<DataType>::push(DataType ch) {
	if (isFull()) {
		throw Stack<DataType>::Full();
	} else {
		data[++top] = ch;
	}
}

template<class DataType>
DataType Stack<DataType>::pop() {
	if (isEmpty()) {
		throw Stack<DataType>::Empty();
	} else {
		return data[top--];
	}
}

template<class DataType>
DataType Stack<DataType>::getTop() {
	if (isEmpty()) {
		throw Stack<DataType>::Empty();
	} else {
		return data[top];
	}
}

template<class DataType>
bool Stack<DataType>::isEmpty() {
	return top == -1;
}

template<class DataType>
bool Stack<DataType>::isFull() {
	return top == size -1;
}

template<class DataType>
void Stack<DataType>::setNull() {
	top = -1;
}

int main()
{
	Stack<char> s(2);
    try {
		s.push('a');
		s.push('b');
		s.push('c');
	} catch (Stack<char>::Full) {
		cout << "Stack<char> Full !!" << endl;
	}
	
	Stack<double> s2(2);
    try {
		s2.push(99.99);
		s2.push(88.88);
		s2.push(77.77);
	} catch (Stack<double>::Full) {
		cout << "Stack<double> Full !!" << endl;
	}
	
    return 0;
}


posted on 2022-04-02 20:47  历史锅巴  阅读(38)  评论(0)    收藏  举报