栈的基本操作

在C++的容器适配器中直接有栈类型,也属于模板类,头文件为 <stack>

在严蔚敏版数据结构中,给栈分配了初始容量,且在入栈操作时加入了容量判断,若当前容量已满则再扩大容量空间。其中设定了两个指针,一个栈顶指针,一个栈底指针。栈顶指针用于返回出栈元素,始终指向栈顶元素的上方,栈底指针用于扩大容量和与栈顶指针相比较判空等操作。

以下为简单的栈操作,栈的模板类的表现形式:

#include <iostream>
using namespace std;

//创建栈模板类
template<class T>
class Stack
{
public:
	Stack(unsigned int size = 100); // 预设定栈容量
	~Stack();
	void push(T);		        // 入栈操作
	T top();			// 提取栈顶元素
	void pop();			// 栈容量缩小,与上一步一般同步出现称为出栈操作
        bool empty();
private:
	unsigned int size;		// 栈总容量
	unsigned int size_now;	        // 栈当前容量,如有判空操作直接判断当前容量大小
	T *data;		        // 使用数组形式开辟存储空间
};
// 模板类构造
template<class T>
Stack<T>::Stack(unsigned int size)
{
	this->size = size;
	data = new T[size];		// 开辟一定大小的空间
	size_now = 0;			// 在没有入栈操作时,当前容量为0
}
// 析构,释放
template<class T>
Stack<T>::~Stack()
{
	delete[]data;
}
// 入栈操作
template<class T>
void Stack<T>::push(T value)
{
	data[size_now++] = value;        // 每入栈一个元素,当前容量+1
}
// 返回栈顶元素
template<class T>
T Stack<T>::top()
{
	return data[size_now - 1];
}
// 栈容量 -1
template<class T>
void Stack<T>::pop()
{
	size_now--;
}
// 判空
template<class T>
bool Stack<T>::empty()
{
	if (size_now == 0)
	    return true;
	else
	    return false;
}
/*
出栈操作可直接写成如下:
template<class T>
T Stack<T>::pop()
{
	return data[--size_now];
*/

int main()
{
	Stack<int> s;
	for (int i = 0; i < 5; i++)
		s.push(i);
	for (int i = 0; i < 5; i++)
	{
		cout << s.top() << " ";
		s.pop();
	}
	cout << endl;
	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值