la pile définie
opération pile est une table linéaire restreinte, ce dernier est hors de pointe de la structure de données est définie uniquement des insertions et des deletions, à une extrémité, dite supérieure de la pile pour permettre une fin de l'opération, dite de fond de l'opération de pile est interdite.
Structure de stockage séquentiel:
1, l'espace de stockage occupé par les éléments doit être continue (ici consécutif se réfère à un continu logique, plutôt que physiquement continu)
2, la position de l'élément est situé dans l'espace de stockage dans un ordre logique
De ce qui précède, on peut voir la pile de la structure concise.
la mise en œuvre simple de la pile
#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;
}
Pile d'applications
Stack a de nombreuses applications: par exemple, des supports correspondant, la notation polonaise inverse
ici parlent principalement: la notation polonaise inversée
- L'idée de base:
Si la chaîne de l' espace-temps, retour direct 0.
Sinon vide, tous les numéros pile, la pile ne sera pas les opérateurs rencontrent des personnages, deux éléments directement sur le dessus de la pile, calcule, puis stocke le résultat dans la pile, continuer à obtenir le caractère, et ainsi de suite. - Code est la suivante:
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();
}
};