Preguntas sobre programación de estructuras de datos (lenguaje c)
Porque su pregunta no termina hasta que el símbolo de entrada no coincide con el elemento en la parte superior de la pila.
Por lo tanto, puede ocurrir un desbordamiento cuando se usa una pila secuencial, así que aquí uso Pila de cadena para resolver este problema
El código es el siguiente:
#include
#include
#define len sizeof(stack)
typedef struct node
{
char c;
struct node* siguiente ;
}stack,*link;
link push(link s,char c); //Empujar en la pila
link pop(link s); //Pila de salida
int main ()
{
int flag=1; //Iniciado en 1, lo que indica que los símbolos de entrada coinciden
char c,top;
link s=NULL //Vaciar la pila
while(1)
{
<; p> scanf("%c",&c);cambiar(c)
{
caso '[':
case ' {':
case '(':
s=push(s,c);
break;
case '] ':
case '}':
case ')':
top=s->c //Obtener la parte superior de la pila y compararlo con c p>
if((top=='['&&c==']')||(top=='{'&&c=='}')||(top== '('&&c==' )')) //Determina si el elemento superior de la pila es el mismo que c
s=pop(s);
else p>
flag=0; // No quiero De la misma manera, cambiar el valor de la bandera flag
break;
}
if(!flag) //Si el flag no es verdadero, significa que los símbolos no coinciden y muestran información relevante y salimos, de lo contrario continúa escribiendo
{
printf(" ¡El símbolo no coincide!\n");
break;
}
}
devuelve 0;
}
enlace push(enlace s,char c)
{
enlace p;
p=(enlace)malloc (len);
//La operación de inserción práctica es sin el nodo principal. Cree una lista enlazada individualmente utilizando el método de inserción principal
p->c=c;
p->next=s;
s=p; //Actualizar la parte superior de la pila
return s; //Volver a la parte superior de la nueva pila
}
enlace emergente(enlace s)
{
enlace p;
p=s; parte superior de la pila original
s=s->next; //Actualizar la parte superior de la pila
free (p); //Eliminar la parte superior de la pila original
p>devolver s;
}