链式栈的基础操作

链式栈的基础操作

环境及程序说明

/*
	环境:Dev C++   TDM-GCC 4.9.2 64-bit Profiling 
	-输出大小: 1.85755443572998 MiB
	- 编译时间: 1.90s
	链式栈操作 
	包括链式栈的类定义(使用模板)
		栈的构造与析构
		栈的压栈与弹栈
		访问栈顶元素
		栈的清空 
	 
*/

头文件

#include<iostream>
using namespace std;

链式栈的结点类定义

template <class T>
class LStack;
//对链式栈类的声明

template <class T>
class SLNode{
	friend class LStack<T>;
	//因为此处声明友元类,且该类为模板类,所以需要在之前对该类进行声明
	private:
		T data;
		SLNode<T> *next;	
}; 

链式栈类的定义

template <class T>
class LStack{
	private:
		SLNode<T> *top;						//栈顶指针指向表头
	public:
		LStack();							//构造函数 
		~LStack();							//析构函数
		void Clear();						//栈的清空 
		bool Pop(T &item);					//弹栈,成功返回True
		bool Push(const T &item);			//压栈,成功返回True
		bool Peek(T item);					//访问栈顶元素 
};

函数

template <class T>
LStack<T>::LStack()
{
	top = NULL;
}

template <class T>
LStack<T>::~LStack()
{
	Clear();
}

template <class T>
void LStack<T>::Clear()
{
	T item;
	while(top)
	{
		this->Pop(item);
	}
}

template <class T>
bool LStack<T>::Pop(T & item)
{
	SLNode<T> *q;
	if(top == NULL)
	{
		cout<<"栈空无法弹出"<<endl;
		return false;
	}
	item = top->data;
	q = top->next;
	delete top;
	top = q;
	return true;
}

template <class T>
bool LStack<T>::Push(const T &item)
{
	SLNode<T> * s = new SLNode<T>;
	s->data = item;
	s->next = top;
	top = s;
	return true;
}

template <class T>
bool LStack<T>::Peek(T item)
{
	if(top == NULL)
	{
		cout<<"栈空"<<endl;
		return false;
	}
	item = top->data;
	return true;
}

主函数调试代码

int main(int argc,char **argv)
{
	int item,op;
	bool flag = false;
	LStack<int>A;
	while(1)
	{
		cout<<"请输入操作数"<<endl<<"0 压栈 1 弹栈 2 访问栈顶元素 3 清空栈"<<endl;
		cin>>op;
		if(op == -1)
			break;
		switch(op)
		{
			case 0:
				{
					cout<<"请输入压栈元素"<<endl;
					cin>>item;
					A.Push(item);
					break;
				}
			case 1:
				{
					flag = A.Pop(item);
					if(flag)
						cout<<"已弹出栈顶元素"<<item<<endl;
					break;
				}
			case 2:
				{
					flag = A.Peek(item);
					if(flag)
						cout<<"栈顶元素为"<<item<<endl;
					break;
				}
			case 3:
				{
					A.Clear();
					cout<<"已清空"<<endl;
					break;
				}
			default:
				{
					cout<<"操作数错误"<<endl;
					break;
				}
		}
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值