c++中 stack的简单实现

#include<iostream>
#define Maxsize 100//栈最大长度
using namespace std;
template<class numtype>//模板类
class stack
{
public:
	int size()//元素个数
	{
		return (top+1);
	}
	void push(int data);//出栈		
	numtype pop();//入栈
	stack()
	{
		top = -1;
	}
private:

	numtype Element[Maxsize];//元素储存于数组中
	int top;//栈顶标识
};
template<class numtype>
void stack<numtype>::push(int data)//入栈函数
{
	if (top == (Maxsize - 1))
	{
		cout << "堆栈已满";
	}
	else
	{
		Element[++top] = data;
	}
}
template<class numtype>
numtype stack<numtype>::pop()//出栈函数
{
	if (top == -1)
	{
		cout << "堆栈为空,无法出栈";

		return 0;
	}
	else
	{
		return(Element[top--]);
	} 
}
void main()
{
	stack<int> S;//定义 栈对象 其中:stack<元素数据类型> 对象名
	for (int i = 100; i < 150; i++)
	{
		S.push(i);
	}
	cout << endl <<"该堆栈有"<< S.size() << "个元素" << endl;
	for (int i = 0; i < 51; i++)
	{
		cout << S.pop()<< endl;
	}
	system("pause");

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
C++,`stack`是标准模板库(STL)的一个容器,它基于LIFO(后进先出)的原则,即最后一个进入的元素会最先被弹出。`stack`可以用来实现一些基于栈的算法,如括号匹配、逆波兰表达式求值等。 `stack`容器提供了以下几个常用的成员函数和操作: - `push()`:将元素压入栈顶。 - `pop()`:弹出栈顶元素。 - `top()`:返回栈顶元素。 - `empty()`:判断栈是否为空。 - `size()`:返回栈元素的个数。 以下是一个使用`stack`容器的简单示例,用于计算逆波兰表达式的值: ```c++ #include <iostream> #include <stack> #include <string> using namespace std; int evalRPN(vector<string>& tokens) { stack<int> s; int num1, num2; for (string token : tokens) { if (token == "+") { num1 = s.top(); s.pop(); num2 = s.top(); s.pop(); s.push(num2 + num1); } else if (token == "-") { num1 = s.top(); s.pop(); num2 = s.top(); s.pop(); s.push(num2 - num1); } else if (token == "*") { num1 = s.top(); s.pop(); num2 = s.top(); s.pop(); s.push(num2 * num1); } else if (token == "/") { num1 = s.top(); s.pop(); num2 = s.top(); s.pop(); s.push(num2 / num1); } else { s.push(stoi(token)); } } return s.top(); } int main() { vector<string> tokens = {"2", "1", "+", "3", "*"}; int result = evalRPN(tokens); cout << "The result is: " << result << endl; return 0; } ``` 输出结果为: ``` The result is: 9 ``` 这里使用了`stack`容器来存储逆波兰表达式的数字和运算符,当遇到数字时,将其转换为整数并压入栈;当遇到运算符时,弹出栈顶的两个元素进行计算,将结果压入栈。最后栈只剩下一个元素,即为逆波兰表达式的值。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值