Sunteți pe pagina 1din 10

Capítulo 1: ESTRUCTURAS DE DATOS DINÁMICAS (continuación)

Pila
Es una colección de datos que se caracteriza por manejar los datos de forma LIFO

 LIFO – Last In First Out


 último elemento en entrar, es el primero en salir
 solo se puede agregar y quitar elementos por uno de los extremos TOPE/INICIO/FRENTE
 las pilas no son estructuras de datos, para su representación e implementación se
pueden utilizar
o arreglos
o listas

Tope /
Inicio
Aplicaciones en la programación

 deshacer en Word
 retroceder en los navegadores

Operaciones básicas con listas

 Insertar -> apilar( ) / push( )


 Eliminar -> desapilar( ) / pop( )
 Recorrido
 Consultar un elemento especifico

Estado

 Pila vacía
 Pila llena -> solo en el caso de un arreglo para pila
 Cuantos elementos hay en la pila
#include <stdlib.h>

#include <stdio.h>

typedef struct _nodo {

int valor;

struct _nodo *siguiente;

} tipoNodo;

typedef tipoNodo *pNodo; //para el nodo con el dato

typedef tipoNodo *Pila; //para el inicio

/* Funciones con pilas: */

void Push(Pila *l, int v);

int Pop(Pila *l);

int main()

Pila pila = NULL;

Push(&pila,20);

Push(&pila,10);

Push(&pila,40);

Push(&pila,30);

Push(&pila,90);

printf("%d\n",Pop(&pila));
printf("%d\n",Pop(&pila));

printf("%d\n",Pop(&pila));

printf("%d\n",Pop(&pila));

printf("%d\n",Pop(&pila));

system("PAUSE");

return 0;

void Push(Pila *pila, int v)

pNodo nuevo;

/* Crear un nodo nuevo */

nuevo = (pNodo)malloc(sizeof(tipoNodo));

nuevo->valor = v;

if(*pila == NULL)

nuevo->siguiente = NULL;

else

/* Añadimos nodo en la pila antes nodo anterior */

nuevo->siguiente = *pila;

/* Ahora, el comienzo de nuestra pila es en nuevo nodo */

*pila = nuevo;

}
int Pop(Pila *pila)

pNodo nodo; /* variable auxiliar para manipular nodo */

int v; /* variable auxiliar para retorno */

/* Nodo apunta al primer elemento de la pila */

nodo = *pila;

if(!nodo) return 0; /* Si no hay nodos en la pila retornamos 0 */

else{

/* Asignamos a pila toda la pila menos el primer elemento */

*pila = nodo->siguiente;

/* Guardamos el valor de retorno */

v = nodo->valor;

/* Borrar el nodo */

free(nodo);

return v;

}
Cola
Es una colección de datos que se caracteriza por manejar los datos de forma FIFO

 FIFO – First In First Out


 Primero en entrar es el primero en salir
 Solo se agrega elementos al final de la cola
 Solo se quita elementos por el inicio de la cola
 las colas no son estructuras de datos, para su representación e implementación se
pueden utilizar
o arreglos
o listas

ENTRADA SALIDA
Aplicaciones en la programación

 cola de impresión en el sistema operativo


 cola de transacciones en sistemas TPS

Operaciones básicas con listas

 Insertar -> encolar( )


 Eliminar -> desencolar( )
 Recorrido
 Consultar un elemento especifico

Estado

 Cola vacía
 Cola llena -> solo en el caso de un arreglo para cola
 Cuantos elementos hay en la cola
#include <stdlib.h>

#include <stdio.h>

typedef struct _nodo {

int valor;

struct _nodo *siguiente;

} tipoNodo;

typedef tipoNodo *pNodo;

typedef tipoNodo *Cola;

/* Funciones con colas: */

void insertar(Cola *cola,int v);

int sacar(Cola *cola);

int main()

pNodo cola = NULL;

insertar(&cola, 20);

insertar(&cola, 10);

insertar(&cola, 40);

insertar(&cola, 30);

insertar(&cola, 90);

printf("Elemento: %d\n", sacar(&cola));

printf("Elemento: %d\n", sacar(&cola));

printf("Elemento: %d\n", sacar(&cola));

printf("Elemento: %d\n", sacar(&cola));

printf("Elemento: %d\n", sacar(&cola));


system("PAUSE");

return 0;

void insertar(Cola *cola,int v)

pNodo nuevo;

pNodo aux;

/* Crear un nodo nuevo */

nuevo = (pNodo)malloc(sizeof(tipoNodo));

nuevo->valor = v;

if(*cola == NULL){

/* Este será el último nodo, no debe tener siguiente */

*cola=nuevo;

nuevo->siguiente = NULL;

else{

aux = *cola;

while(aux->siguiente!=NULL)

aux = aux -> siguiente;

aux->siguiente=nuevo;

aux=nuevo;

aux->siguiente=NULL;

}
int sacar(Cola *cola)

pNodo nodo; /* variable auxiliar para manipular nodo */

int v; /* variable auxiliar para retorno */

/* Nodo apunta al primer elemento de la pila */

nodo = *cola;

if(nodo == NULL)

return 0; /* Si no hay nodos en la pila retornamos 0 */

else{

*cola = nodo -> siguiente;

v = nodo->valor;

free(nodo);

return v;