Red de conocimiento informático - Conocimiento de la instalación - Implementación de pila de código fuente c

Implementación de pila de código fuente c

#¿Incluir? & ltstdio.h & gt

#¿Contiene? & ltconio.h & gt

¿#Contiene? & ltstdlib.h & gt

#¿Definición? tipo de elemento? int/*? ¿Tipo de datos del elemento de pila de enlace? */

#¿Definición? ¿SNODE_SIZE? tamaño de? (estructura?sNodo)/*? ¿Cuál es el tamaño del espacio del nodo de la pila de enlaces? */

#¿Definición? ¿estado? int/*? ¿Variables de estado? */

#¿Definición? ¿rebosar? -1 /*?¿Código de estado de desbordamiento de memoria? */

#¿Definición? ¿error? 0 /*?Código de estado de error? */

#¿Definición? ¿Bueno? 1 /*?Código de estado correcto? */

/*?¿Estructura de almacenamiento del nodo de pila de enlaces? */

typedef? estructura? ¿Snod? {

elemType? datos;

estructura? ¿Snod? *Siguiente;

}? * sNodePtr

/*? ¿Estructura de almacenamiento de pila de cadena? */

typedef? estructura? enlacePila? {

sNodoPtr? arriba;? /*?Puntero superior de la pila? */

}?linkStack

/*?Inicialización? */

/*?Resultado de la operación: ¿Construir una pila de enlaces vacía utilizando el nodo principal? */

¿Anulado? ¿InitStack? (¿enlaceStack?*S)? {

s->arriba? =?(sNodoPtr)? ¿Mallock? (SNODE_SIZE);? /*? ¿Generar un nodo principal y el puntero superior de la pila apunta a este nodo principal? */

¿Y si? (!s->arriba)? /*?¿Error en la asignación de memoria? */

¿Salir? (desbordamiento);

s->arriba->¿Siguiente? =?NULL

}

/*?Destrucción? */

/*?Condición inicial: la pila de enlaces ya existe. Resultado de la operación: ¿Destruir la pila de cadenas S? */

¿Anulado? ¿Destruir pila? (¿enlaceStack?*S)? {

sNodoPtr? pag,? q;

p? =?s->arriba;? /*?p apunta al nodo principal de S? */

¿Cuándo? (pag)? {

q? =?p->;Siguiente;? /*?q apunta al siguiente nodo de p? */

¿Gratis? (pag);? /*?Reciclar el nodo al que apunta P? */

p? =?q;? /*?p pasar al siguiente nodo? */

}?/*?¿Hasta que no haya ningún siguiente nodo? */

}

/*? ¿Determinar si la pila de enlaces está vacía? */

/*?Condición inicial: la pila de enlaces ya existe.

Resultado de la operación: si s es una pila de cadena vacía, devuelve VERDADERO; de lo contrario, devuelve FALSO. */

¿Estado? ¿La pila está vacía? (¿enlaceStack?*S)? {

¿Volver? s->arriba->¿Siguiente? ==?NULL

}

/*?Ponlo en la pila*/

/*?Resultado de la operación: Inserta un nuevo elemento e en la parte superior de la pila s? */

¿Estado? ¿empujar? (linkStack?*S,?elemType?e)? {

sNodoPtr? p;

p? =?(sNodoPtr)? ¿Mallock? (SNODE_SIZE);? /*?¿Crear nuevo nodo? */

¿Y si? (!pag)? /*?¿Error en la asignación de memoria? */

¿Salir? (desbordamiento);

p->;¿Datos? =?e;

p->;¿Siguiente? =?s->arriba->siguiente;? /*?¿Vincular el nuevo nodo a la parte superior de la pila original? */

s->arriba->¿Siguiente? =?pag;? /*?¿La parte superior de la pila apunta al nuevo nodo? */

}

/*?Fuera de la pila*/

/*?Resultado de la operación: eliminar el elemento superior de s y devolver su valor con e ? */

¿Estado? ¿Música pop? (linkStack?*S,?elemType?*e)? {

sNodoPtr? p;

¿Y si? (stackIsEmpty?(S))

¿Regresión? Error;

p? =?s->arriba->siguiente;? /*?p apunta al primer nodo de la pila de cadenas? */

*e? =?p->;datos;? /*?Obtener los datos? */

s->arriba->¿Siguiente? =?p->;Siguiente;

¿Gratis? (pag);? /*?¿Eliminar este nodo? */

¿Y si? (S->arriba?==?p)? /*?¿La pila está vacía? */

s->arriba->¿Siguiente? =?NULL

¿Devolver? OK;

}

int? ¿principal? (anulado)? {

¿pila de enlaces? s;

elemType? e;

int? n;

¿initStack? (&s);

escanear? (" %d ", &n);

/*Dividir por la base y tomar el resto*/

¿Cuándo? (NORTE)? {

¿Empujar? (&s,?n % 2);

n? /=?2;

}

¿Cuándo? (!stackIsEmpty?(& amperios))? {

¿Música pop? (&s,?&e);

printf? (" %d ", e);

}

destruirPila? (&s);

¿captar? ();? /*?Persistencia de la pantalla? */

¿Volver? 0;

}Si tienes alguna pregunta, haz clic en el avatar para contactarme.