线性栈的基础操作

线性栈的基础操作

环境及程序说明

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

线性栈类的定义以及函数声明

template <class T>
class Astack{
	private:
		int size;							//栈的大小 
		T* stackArray;						//存放栈元素的数组 
		int top;							//栈顶位置 
	public:
		Astack(int MasStackSize);			//栈的构造函数 ,确定栈的大小,申请栈的动态空间,栈顶位置置为-1 
		~Astack();							//栈的析构函数, 释放栈空间 
		bool Pop(T& item);					//弹栈操作,将弹出的值赋值给item ,成功返回True 
		bool Push(const T& item);			//压栈操作,将item压入栈 ,成功返回True  
		bool Peek(T& item);					//访问栈顶元素 ,将栈顶元素赋值给item,成功返回True  
		bool Isfull();						//判断栈满 ,栈满返回True
		bool Isempty();						//判断栈空 ,栈空返回True 
		void Clear();						//清空栈 
};

函数

template <class T>
Astack<T>::Astack(int MaxStackSize)
{
	size = MaxStackSize;
	stackArray = new T[size];
	top = -1;
}

template <class T>
Astack<T>::~Astack()
{
	delete [] stackArray;	
}

template <class T>
bool Astack<T>::Pop(T &item)
{
	if(top == -1)
	{
		cout<<"栈空无法弹出"<<endl;
		return false;
	}
	item = stackArray[top];
	top--;
	return true;
}

template <class T>
bool Astack<T>::Push(const T &item)
{
	if(top == size - 1)
	{
		cout<<"栈满无法压入"<<endl;
		return false;
	}
	top++;
	stackArray[top] = item;
	return true;
}

template <class T>
bool Astack<T>::Peek(T& item)
{
	if(top == -1)
	{
		cout<<"栈空"<<endl;
		return false;
	}
	item = stackArray[top];
	return true;
}

template <class T>
bool Astack<T>::Isfull()
{
	return top == size-1;
}

template <class T>
bool Astack<T>::Isempty()
{
	return top == -1;
}

template <class T>
void Astack<T>::Clear()
{
	top = -1;	
} 

主函数

int main(int argc,char **argv)
{
	int item,choose;
	bool flag;							//判断返回值 
	Astack <int> A(4);					//此处的int可以改为其他类型,如float、double,根据要求而定 
	while(1)
	{
		cout<<"请输入数字"<<endl<<"(0 压栈 1 弹栈 2 显示栈顶元素 3 栈满? 4 栈空? 5 清空栈内容)\n";
		cin>>choose;
		if(choose == -1)
			break;
		switch(choose)
		{
			case 0:
				{
					flag = false;
					cout<<"请输入压栈元素";
					cin>>item;
					flag = A.Push(item);
					cout<<"\n";
					if(flag)
						cout<<"压栈成功"<<endl;
					break;
				}
			case 1:
				{
					flag = false; 
					flag = A.Pop(item);
					if(flag)
						cout<<"弹栈成功,弹出元素为:"<<item<<endl;
					break;
				}
			case 2:
				{
					flag = false;
					flag = A.Peek(item);
					if(flag)
						cout<<"栈顶元素为:"<<item<<endl;
					break;
				}
			case 3:
				{
					if(A.Isfull())
						cout<<"栈满"<<endl;
					else
						cout<<"栈未满"<<endl;
					break;
				}
			case 4:
				{
					if(A.Isempty())
						cout<<"栈空"<<endl;
					else
						cout<<"栈未空"<<endl;
					break;
				}
			case 5:
				{
					A.Clear();
					cout<<"栈已清空"<<endl;
					break;
				}
			default:
				{
					cout<<"输入错误"<<endl;
					break;
				}
		}
	}
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值