[] Structure de données - piles et des piles d'applications (notation polonaise inversée)

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

Insérer ici l'image Description
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();
    }
};
Publié 33 articles originaux · louange gagné 13 · vues 1051

Je suppose que tu aimes

Origine blog.csdn.net/Vicky_Cr/article/details/104467455
conseillé
Classement