Ir al contenido principal

PILA EN DEV C

 


/*_____________________________________________PILA


La pila (o stack) es una estructura de datos lineal y dinámica, en la cual el elemento

obtenido a través de la operación ELIMINAR está predefinido, debido a que implementa

la política Last-In, First-Out (LIFO), esto es, el último elemento que se agregó es el primer

que se elimina


Para poder diseñar un algoritmo que defina el comportamiento de una pila se deben

considerar 3 casos para ambas operaciones (push y pop):

? Estructura vacía (caso extremo).

? Estructura llena (caso extremo).

? Estructura con elemento(s) (caso base).*/


// Directivas

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

//Creamos una estructura     */

struct stackNode{

char data[2]; // Miembros de la estructura

struct stackNode *nextPtr; // Strcut autoreferenciada

};

typedef struct stackNode STACKNODE; // Damos un sobre nombre a la estrcutura

typedef STACKNODE *STACKNODEPTR; // Creamos un sobre nombre con apuntador


// Prototipo de las funciones utilizas


void push(STACKNODEPTR*,char info[2]); // push para poner un elemento 

char *pop(STACKNODEPTR *); // pop para extraer un elemento 

int isEmpty(STACKNODEPTR); // IsEmpty verifica si la pila esta vacia 

void printStack(STACKNODEPTR); // Funcion para imprimir

void instructions(void); // Funcion para imprimir las funciones


// Funcion principal

int main (){

STACKNODEPTR stackPtr = NULL; //stackptr apunta a NULL

int choice;

char value[2];

instructions();

printf(" ?"); //El usuario seleciona la opcion 

scanf("%d",&choice);

while(choice != 3)                              // Entra en un while para evaluar si es 3 u otro numero dentro del rango de las isntrucciones

{

switch (choice) //Selecciona el caso que el usuario requiere

{

//CASO  1 

case 1:                                  

printf("Dame un numero para agregarlo a la pila");

scanf("%s",&value); //Gurda el valor que dio el usuario

push(&stackPtr, value); // agrega un elemento a la pila

printStack(stackPtr);     // Imprime lo que tiene la pila 

break;

//CASO  2

case 2:

if(!isEmpty(stackPtr))                        // Evalua si la pila esta vacia

printf("El dato de la cima fue extraido con exito \n", pop(&stackPtr));     //Saca el ultimo valor que ingreso 

printStack(stackPtr);    // Imprime la pila

break; //Damos por terminado el caso

default:

printf("Dato invalido. \n\n"); //Imprime que es una opcion invalida

instructions(); //Reimpirme el menu

break;

}

printf("?"); //Vuevlve a preguntar

scanf("%d",&choice); //guarda la nueva opcion 

}

return 0; //Retorna 0 

}


// FUNCION INSTRUCCIONES

void instructions(void) //No devuelve nada

{

printf("Ingresa la opcion marcada \n 1. PUSH: Agregar datos \n 2.POP:Sacar datos\n 3.Salir ");

}


// FUNCION INGRESAR DATOS A LA PILA

void push(STACKNODEPTR *topPtr, char info[2]) //apunta a la cima

{

STACKNODEPTR newPtr; //apunta al siguente elemento 

newPtr = malloc(sizeof(STACKNODE)); //Reserva memoria en newptr

if(newPtr!=NULL) //Entra a la funcion siempre y cuando newptr sea diferente de NULL

{

strcpy(newPtr->data,info); // Hace una copía de la informacion que tiene info en data mientras que newPtr esta apuntando a data

newPtr->nextPtr=*topPtr; // newPtr apunta a nexPtr tiene la informacion que guarda el apuntador topPtr

*topPtr=newPtr; //El apuntador topPtr contiene la informacion de newPtr

}

else

printf("%s %s not inserted. No memory available. \n",info[0],info[1]); // Imprime mensaje en caso de que no haya memoria

}


// FUNCION SACAR DATOS DE LA PILA

char *pop(STACKNODEPTR *topPtr)

{

STACKNODEPTR tempPtr;     // Define una variable de tipo apuntador y estructura

char *popValue; // Defiene un apuntador tipo char 

tempPtr= *topPtr; // tempPtr contiene el contenido del apuntador topPtr

popValue=(*topPtr)->data; //Saca el valor ultimo valor que ingresa el usuario que esta almacenado en topPtr el cual apunta a data

*topPtr=(*topPtr)->nextPtr;  // El apuntador topPtr contiene la info que tiene topPtr el cual apunta a nexPtr

free(tempPtr); // limpia al apuntador temPtr

return popValue;

}


// FUNCION IMPRIME PILA

void printStack(STACKNODEPTR currentPtr)

{

if(currentPtr==NULL)               //Entra a una condicional 

printf("La pila esta vacia. \n\n"); // Imprime si la pila esta basia 

else{

printf("La pila es: \n");         // Imprime si la pila 

while(currentPtr!=NULL){     //Saca los valores de la pila 

printf("%s --> ",currentPtr->data); //Imprime la pila

currentPtr=currentPtr->nextPtr; // CurrentPtr va tomando el valor de nextPtr

}

printf("NULL\n\n");

}

}


//FUNCION PARA VERIFICAR SI ESTA VACIA LA PILA

int isEmpty(STACKNODEPTR currentPtr)

{

return currentPtr == NULL;

}





Comentarios

Entradas populares de este blog

Imperio bizantino

  ¿Qué fue el Imperio bizantino? El Imperio bizantino, también conocido como el Imperio romano de Oriente o Bizancio, fue una  división del Imperio romano que subsistió durante la Edad Media , y se ubicó en las costas orientales del mar Mediterráneo. Su capital era la ciudad de Constantinopla (actual Estambul, Turquía). Bizancio era un Estado cristiano multiétnico, de importante influencia cultural, económica y política en el mundo de la época.  Los bizantinos se consideraban herederos del Imperio romano , y se llamaban a sí mismos  romanos . Sin embargo, con el tiempo se distinguió del Imperio romano de Occidente, por sus características políticas, culturales y religiosas. El Imperio Bizantino existió entre 285 y 1453 d. C . y durante la Edad Media, constituyó una barrera contra el avance del Islam hacia Europa. La historia de Bizancio se interpreta a menudo como el símbolo del creciente abismo entre las culturas occidentales y orientales en...

Antigua Persia

Persia (aproximadamente en el actual Irán) es una de las regiones habitadas más antiguas del mundo. Los yacimientos arqueológicos del país demuestran que la población humana se remonta 100 000 años atrás, al Paleolítico, con asentamientos semipermanentes (probablemente grupos de caza) establecidos antes del 10 000 a.C. El antiguo reino de Elam, situado en esta zona, fue uno de los más avanzados de su época (su asentamiento más antiguo, el yacimiento arqueológico de Chogha Bonut, data alrededor del 7200 a.C.) antes de que  los sumerios  conquistaron primero algunas partes, para ser finalmente absorbido por los asirios y luego por los medos. Al Imperio medo (678-550 a.C.) le siguió una de las mayores entidades políticas y sociales del mundo antiguo, el Imperio persa aqueménida (550-330 a.C.), conquistado por  Alejandro Magno  y posteriormente sustituido por  el Imperio seléucida  (312-63 a.C.), Partia (247 a.C.-24 a.C.) y  el Imperio sasánida  (224-...

Aciertos UNAM COMIPEMS 2022

  Aciertos UNAM COMIPEMS 2022 ENP (Escuela Nacional Preparatoria) ENP 1 102 aciertos PLANTEL "GABINO BARREDA" ENP 2 110 aciertos PLANTEL "ERASMO CASTELLANOS QUINTO" ENP 3 105 aciertos PLANTEL "JUSTO SIERRA" ENP 4 97 aciertos PLANTEL "VIDAL CASTAÑEDA Y NÁJERA" ENP 5 105 aciertos PLANTEL "JOSÉ VASCONCELOS" ENP 6 111 aciertos PLANTEL "ANTONIO CASO" ENP 7 99 aciertos PLANTEL "EZEQUIEL A. CHÁVEZ" ENP 8 98 aciertos PLANTEL "MIGUEL E. SCHULZ" ENP 9 109 aciertos PLANTEL "PEDRO DE ALBA" CCH (Colegio de Ciencias y Humanidades) CCH AZCAPOTZALCO 91 aciertos CCH NAUCALPAN 88 aciertos CCH ORIENTE 95 aciertos CCH SUR 94 aciertos CCH VALLEJO 94 aciertos