Implementación de la pila de estructura de datos

Implementación de la pila de estructura de datos - usando arreglos

Ps: es mejor implementar la pila con clases, que pueden administrar múltiples estructuras de datos al mismo tiempo. Pero para mí, que acabo de ponerme en contacto, solo mire los números y siga el proceso en el libro. Haré todo lo posible para explicar claramente las características de la pila, y lo agregaré más tarde cuando tenga una comprensión más profunda.

Citación

La notación polaca inversa es un método para describir un programa (cálculo) escribiendo el operador después del operando. Por ejemplo, la fórmula (1+2)*(5+4) que normalmente describimos en notación infija es 1 2 + 5 4 - * después de cambiarse a notación polaca inversa. En comparación con la notación infija, la notación polaca inversa tiene la ventaja de que no se requieren paréntesis.
Ingrese el resultado del cálculo de la fórmula ingresada en notación polaca inversa.

ingresar Introduzca 1 cálculo en una línea. Los símbolos adyacentes (operandos u operadores) están separados por un carácter de espacio
producción Resultados del cálculo de salida en una línea
límite 2 ≤ El número total de operandos en la fórmula ≤ 100 2\leq El número total de operandos en la fórmula\leq1002El número total de operandos en la expresión.1 0 0 ,1 ≤ El número total de operadores en la fórmula ≤ 99 1\leqEl número total de operadores en la fórmula\leq991número total de operadores en la expresión9 9 operadores solo contienen "+" "-" "∗ * ”, el operando es1 0 6 10^61 0Un entero positivo por debajo de 6 . − 1 ∗ 1 0 9 ≤ valor durante el cálculo ≤ 1 0 9 -1*10^9\leqvalor durante el cálculo\leq10^911 09valor durante el cálculo _ _1 09
ejemplo de entrada 1 2 + 3 4 - *
ejemplo de salida -3

Implementado en C++

#include<iostream>
#include<string>
#include<stdlib.h>
#define MAX 1000

using namespace std;

int a[MAX], top;


int pop();
void push(int x);

int main()
{
    
    
	int a, b;
	top = 0;
	char s[100];
	while (cin >> s)
	{
    
    
		if (s[0] == '+')
		{
    
    
			a = pop();
			b = pop();
			push(a + b);
		}
		else if (s[0] == '-')
		{
    
    
			b = pop();
			a = pop();
			push(a - b);
		}
		else if (s[0] == '*')
		{
    
    
			a = pop();
			b = pop();
			push(a * b);
		}
		else
		{
    
    
			push(atoi(s));
			//atoi函数将字符串形式的数字转化为整形数字
		}
	}
	printf("%d\n", pop());
	return 0;
}

void push(int x)
{
    
    
	S[++top] = x;
}

int pop()
{
    
    
	top--;
	return S[top + 1];
}

análisis del problema

El programa implementa la pila con una matriz, y los datos se almacenan en la matriz de caracteres S. Cada ciclo empuja los datos a la "pila" S, y la parte superior se usa como el puntero superior de la pila, lo que indica dónde se agregó el último elemento. se almacena en S. En cada ciclo, si se encuentra un número de tipo carácter, se convertirá en un número de tipo entero, y top+1 se desplazará hacia atrás y colocará el número en la pila. Si se encuentra un operador, top-1 devolverá el número detrás de él Tome dos elementos de la pila para realizar la operación. El número que queda en la pila final es el resultado.
El elemento enviado por push(x) se inserta en la pila después de top+1, y pop() devuelve el elemento al que apunta top y luego resta 1.

Esta es solo una implementación simple de una pila con una matriz. Una pila relativamente completa implementada con una matriz debe incluir las siguientes funciones.

//使用数组实现栈的伪代码
	initialize()   //initialize函数用来清空栈
		top = 0;
	isEmpty()     //isEmpty函数用来检查top是否为0,判断栈中是否有元素
		return top == 0;
	isFull()      //isFull函数用判断栈中是否已满
		return top >= MAX - 1;
	push(x)       
	/*push函数将top+1后将top所指位置加入元素,
	  并且每次判断栈是否已满*/
		if(isFull())
			错误(上溢);
		top++;
		S[top] = x;

	pop()
	/*pop函数返回top所指的元素,再将top-1
	  并且每次判断栈是否为空*/
		if(isEmpty())
			错误(下溢)
		top--;
		return S[top+1]

En general, las estructuras de datos se implementan principalmente en forma de estructuras o clases, y la implementación en forma de clases puede administrar múltiples estructuras de datos al mismo tiempo, lo cual es conveniente para que los programas llamen datos.

Supongo que te gusta

Origin blog.csdn.net/qq_32577169/article/details/90085438
Recomendado
Clasificación