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

Edad Media

La Edad Media es el período de la historia comprendido entre la caída del  Imperio Romano  de  Occidente , en 476 d. C., y la llegada de los españoles a  América , en 1492.  Este periodo histórico se encuentra entre la Edad Antigua y la Edad Moderna . Esta periodización corresponde a los estudios sobre la historia de Occidente, centrados en el desarrollo de la cultura occidental europea.  Tradicionalmente, se consideró que la Edad Media fue una época de opresión religiosa  y restricción de la cultura, las ciencias y el conocimiento. Sin embargo, diferentes estudios académicos actuales matizan esta visión y proponen una explicación más profunda y compleja sobre el periodo. Durante la Edad Media,  el poder de los Estados europeos se vio debilitado a favor de señores feudales , grandes terratenientes que se ocupaban de la seguridad de sus tierras. La organización política, económica y social giró en torno a los feud...

México prehispánico: Periodos y etapas antes de la conquista

La historia de México no se puede comprender sin tener en cuenta los hechos acaecidos antes de la llegada de los españoles. En esta ocasión nos centraremos en el México prehispánico, los periodos y las culturas o poblaciones más importantes desarrolladas en este tiempo. Periodos del México prehispánico. A diferencia de otros lugares del mundo, como el actual continente asiático, donde hubo un desarrollo de los metales desde su extracción hasta su tratamiento en fraguas, en América esto no se dio de manera sistemática. Los periodos que abordaremos son: Etapa lítica: 30.000 y 2.500 aC Arquiolitico: 30.000 y 9.500 aC Cenolítico inferior y superior: 9.500 y 7.500 a.C Cenolítico superior: 7.000 y 5.000 a.C Protoneolítico Por lo que encontramos que la manera de establecer los periodos de la Historia de México prehispánica es puramente lítica y dentro de él se divide en varios sub periodos que veremos a continuación. Etapa lítica Etapa lítica Fase que se desarrolla entre el 30.000 y 2.500 aC,...

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...