Implementación de pila de código fuente c
#¿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.