ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

简单栈实现

2022-04-02 21:02:48  阅读:165  来源: 互联网

标签:实现 top DataType template 简单 push data Stack


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


标签:实现,top,DataType,template,简单,push,data,Stack
来源: https://www.cnblogs.com/lsxj/p/16093915.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有