C++ STL容器:栈(stack)

目录

    • 栈的定义
    • 栈的结构
    • 栈的基本操作
    • 栈的定义方式和函数调用
    • 经典例题
      • 数组模拟
      • S T L STL STL 容器 s t a c k stack stack 做法

栈的定义

先进后出的线性表

栈是一个 S T L STL STL 中的容器(严格意义上来讲,不算容器,它是一个容器适配器),在 s t d std std 命名空间中,它限制插入和删除都在一个位置上(栈顶上),底层是 d e q u e deque deque(双端队列)。

F I L O FILO FILO,先进后出)

栈的结构

C++ STL容器:栈(stack)_第1张图片
图片不是很完美,请见谅。

最下面的元素叫栈底元素

栈的基本操作

p u s h ( x ) push(x) push(x):将元素 x x x 压入栈顶。
p o p ( ) pop() pop():将栈顶元素弹出。
e m p t y ( ) empty() empty():判断栈是否为空,为空返回 t r u e true true,否则返回 f a l s e false false
s i z e ( ) size() size():返回栈的大小。
t o p ( ) top() top():返回栈顶元素,不弹出

栈的定义方式和函数调用

std::stack<_Tp> Stack_Name;
//_Tp表示定义类型,Stack_Name处是该栈的名称。

/**
* 如果前面写了using namespace std 或 using std::stack,
* 可以不写 "std::"
*/
_Tp x;
Stack_Name.push(x);//压入元素
Stack_Name.pop();//弹出栈顶元素
_Tp w=Stack_Name.top();//返回栈顶元素
bool Emp=Stack_Name.empty();//判断栈是否为空
size_type size=Stack_Name.size();//返回栈的大小
//size_type 可以理解为 unsigned int

经典例题

逆波兰式 \mathbf {\color {#99FF33} 逆波兰式{}} 逆波兰式

L e e t c o d e Leetcode Leetcode

Y A C S YACS YACS

题目略有不同,此处以 Y A C S \mathbf {YACS} YACS 题目为准,即需要 m o d    10 \mod 10 mod10

附上代码:

数组模拟

#include//万能头文件
using namespace std;
int top,tmp;
char x;
int a[100001];//数组模拟
int main()
{
	top=0;
	while(cin>>x)
	{
		if(x==' ') continue;
		if(x<'0'||x>'9')
			if(x=='+')
			{
				tmp=a[top-1]+a[top];
				tmp%=10;
				if(tmp<0) tmp+=10;
				top--;
				a[top]=tmp;
			}
			else if(x=='-')
			{
				tmp=a[top-1]-a[top];
				tmp%=10;
				if(tmp<0) tmp+=10;
				top--;
				a[top]=tmp;
			}
			else
			{
				tmp=a[top-1]*a[top];
				tmp%=10;
				if(tmp<0) tmp+=10;
				top--;
				a[top]=tmp;
			}
		else
		{
			top++;
			a[top]=x-48;
		}
	}
	cout<<a[top];
	return 0;
}

S T L STL STL 容器 s t a c k stack stack 做法

#include 
using namespace std;
stack<int> S; 
char ch;
int main()
{
	while(cin>>ch)
	{
		if(ch<'0'||ch>'9')
		{
			int tmp;
			switch(ch)
			{
				case '+':tmp=S.top()%10;S.pop();tmp=(S.top()%10+tmp)%10;S.pop();break;
				case '-':tmp=S.top()%10;S.pop();tmp=(S.top()%10-tmp)%10;S.pop();break;
				default:tmp=S.top()%10;S.pop();tmp=(S.top()%10*tmp)%10;S.pop();break;
			}
			S.push(tmp);
		}
		else
			S.push(ch-48);
	}
	printf("%d",abs(S.top()));
	return 0;
}

你可能感兴趣的:(C++,数据结构,STL,c++,leetcode,算法)