简单栈实现

2022/4/2 23:21:26

本文主要是介绍简单栈实现,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

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;
}




这篇关于简单栈实现的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程