정의 스택
스택 동작은 후자의 데이터 구조의 상세 아웃이 허용되지 않는 스택 동작의 아래쪽으로 알려진 동작의 종료를 허용하는, 스택의 상단 불리는 일단 삽입과 삭제 만 정의하고, 제한된 선형 테이블이다.
순차 저장 구조 :
도 1을 참조하면, 저장 공간 (연속 본원 물리적으로 연속보다는 논리적 연속 지칭) 연속이어야 소자가 차지하는
제 2 엘리먼트의 위치는 논리적 인 순서로 저장 공간에 위치한
그것이라고 볼 수있는 상기 간결한 구조 스택으로부터.
스택의 간단한 구현
#include <iostream>
#include <stdlib.h>
using namespace std;
#define Max_size 100
typedef struct sta
{
int top; //栈顶元素
int data[Max_size];
int size; //栈的大小
}stack;
stack InitStack() //栈的初始化
{
stack s;
s.size = Max_size;
s.top = -1;
return s;
}
//判断栈是否为空
bool StackEmpty(stack s)
{
if (s.top == -1)
{
return true;
}
else
return false;
}
//判断栈是否已满
bool StackFull(stack s)
{
if (s.top == Max_size - 1)
{
return true;
}
else
{
return false;
}
}
void push(stack &s, int data) //入栈
{
if (StackFull(s) == true)
{
cout << "栈已满,不可入栈" << endl;
}
s.top++;
s.data[s.top] = data;
}
void pop(stack& s) //出栈
{
if (StackEmpty(s) == true)
{
cout << "空栈!!!无法出栈" << endl;
}
else
{
int x = s.data[s.top];
cout << "出栈元素为:" << x << endl;
s.top--;
}
}
//遍历栈中的元素
void display(stack s)
{
while (s.top != -1)
{
cout << s.data[s.top] << " ";
s.top--;
}
cout << endl;
}
int main()
{
stack p;
p = InitStack();
cout << "入栈元素为:" << endl;
push(p, 1);
push(p, 2);
push(p, 3);
push(p, 4);
display(p);
pop(p);
display(p);
system("pause");
return 0;
}
응용 프로그램의 스택
스택은 많은 응용 프로그램이 있습니다 예를 들어, 일치하는 괄호, 역 폴란드 표기법
여기를 주로 이야기 : 역 폴란드 표기법을
- 기본 개념 :
공간 - 시간의 문자열, 직접 복귀 0합니다.
버리지 않으면, 모든 숫자는 스택, 스택 문자 사업자, 두 가지 요소를 직접 밖으로의 스택, 계산의 상단을 발생하고 스택에 결과를 저장, 문자를 얻기 위해 계속 등등되지 않습니다. - 다음과 같이 코드입니다 :
class Solution
{
public:
int evalRPN(vector<string>& tokens)
{
if(tokens.size()==0)
return 0;
stack<int> tmp;
for(int i=0;i<tokens.size();i++)
{
if(tokens[i].size()>1||(tokens[i].size()==1
&&tokens[i]>="0"&&tokens[i]<="9"))
{
tmp.push(atoi(tokens[i].c_str()));
}
else
{
int a=tmp.top();
tmp.pop();
int b=tmp.top();
tmp.pop();
int res;
if(tokens[i]=="+")
res=a+b;
else if(tokens[i]=="-")
res=b-a;
else if(tokens[i]=="*")
res=a*b;
else if(tokens[i]=="/")
res=b/a;
tmp.push(res);
}
}
return tmp.top();
}
};