Estructuras PILAS, LISTAS Y COLAS -...

21
Estructuras PILA - COLA - LISTA

Transcript of Estructuras PILAS, LISTAS Y COLAS -...

Page 1: Estructuras PILAS, LISTAS Y COLAS - aed.wikispaces.comaed.wikispaces.com/file/view/PILAS_LISTAS_Y_COLAS.pdf · Colas Una cola es una estructura de datos de acceso restrictivo a sus

Estructuras

PILA - COLA - LISTA

Page 2: Estructuras PILAS, LISTAS Y COLAS - aed.wikispaces.comaed.wikispaces.com/file/view/PILAS_LISTAS_Y_COLAS.pdf · Colas Una cola es una estructura de datos de acceso restrictivo a sus

Una pila es una estructura de datos de acceso restrictivo a sus elementos. Es una estructura de tipo LIFO (Last In First Out), es decir, último en entrar, primero en salir.

Operaciones APILAR

DESAPILAR

5

4

3

2

1

PILAS

Page 3: Estructuras PILAS, LISTAS Y COLAS - aed.wikispaces.comaed.wikispaces.com/file/view/PILAS_LISTAS_Y_COLAS.pdf · Colas Una cola es una estructura de datos de acceso restrictivo a sus

Pilas - codificaciónDeclaración

struct tpila {

int cima;

int elementos[MAX_PILA];

} pila;

void crear( )

{

pila.cima = -1;

}

Procedimiento de creación

Page 4: Estructuras PILAS, LISTAS Y COLAS - aed.wikispaces.comaed.wikispaces.com/file/view/PILAS_LISTAS_Y_COLAS.pdf · Colas Una cola es una estructura de datos de acceso restrictivo a sus

Pilas - codificación

Función que devuelve 1 si la pila esta vacía

int vacia()

{

int r=0;

if (pila.cima ==-1) r=1;

return r;

}

int llena ()

{

int r=0;

if (pila.cima ==5) r=1;

return r;

}

Función que devuelve 1 si la pila esta llena

Page 5: Estructuras PILAS, LISTAS Y COLAS - aed.wikispaces.comaed.wikispaces.com/file/view/PILAS_LISTAS_Y_COLAS.pdf · Colas Una cola es una estructura de datos de acceso restrictivo a sus

Pilas – codificación

Procedimiento de apilado

void apilar (int elem)

{

pila.elemento [++pila.cima] = elem;

return;

}

int desapilar ()

{

int ele;

ele= pila.elemento [pila.cima];

pila.elemento [pila.cima]=0;

-- pila.cima;

return ele;

}

Procedimiento de desapilado

Page 6: Estructuras PILAS, LISTAS Y COLAS - aed.wikispaces.comaed.wikispaces.com/file/view/PILAS_LISTAS_Y_COLAS.pdf · Colas Una cola es una estructura de datos de acceso restrictivo a sus

/* programa tipo de pila */

#include <stdio.h>

#include <conio.h>

void crear();

int vacia();

int llena();

void mostrar();

void apilar (int elem);

int desapilar ();

struct tpila {

int cima;

int elemento[5];

} pila;

void main ()

{

int elem, op,i;

clrscr();

crear();

printf("pila creada\n");

do {

printf ("\n\n1.Apilar\n 2. Desapilar\n 3. Salir\n");

scanf("%d",&op);

switch (op) {

case 1: printf ("Ingrese un numero");

scanf("%d",&elem);

if(llena()!=1) {

apilar(elem);

}

else printf("\nLa pila esta llena, imposible

apilar mas elementos.\n");

break;

case 2: if(vacia()!=1){

elem = desapilar();

printf("\n elemento desapilado %d",elem);

}

else printf("\nLa pila esta vacia, imposible desapilar

elementos\n");

break;

case 3: break;

}

mostrar();

}while (op!=3);

getch();

return;

}

Programa de ejemplo

Page 7: Estructuras PILAS, LISTAS Y COLAS - aed.wikispaces.comaed.wikispaces.com/file/view/PILAS_LISTAS_Y_COLAS.pdf · Colas Una cola es una estructura de datos de acceso restrictivo a sus

Pilas – Función Mostrar

Procedimiento de mostrar dentro de un ciclo.void mostrar()

{

int ele, vec[5],i=-1,c;

printf("\nPila:\n");

do

{

ele= pila.elemento [pila.cima];

pila.elemento [pila.cima]=0;

-- pila.cima;

printf("- %d -",ele);

i++;

vec[i]= ele;

}while(vacia()!=1);

for(c=i;c>=0;c--)

{

apilar(vec[c]);

}

return;

Page 8: Estructuras PILAS, LISTAS Y COLAS - aed.wikispaces.comaed.wikispaces.com/file/view/PILAS_LISTAS_Y_COLAS.pdf · Colas Una cola es una estructura de datos de acceso restrictivo a sus

ColasUna cola es una estructura de datos de acceso restrictivo a sus elementos

Es una estructra de tipo FIFO (First In First Out), es decir: primero en entrar, primero

en salir.

Operaciones ENCOLAR

DESENCOLAR

1

2

3

4

5

Se encola 3 números 3,1,4

Se desencola un número (3)

Se encola un número (7)

Page 9: Estructuras PILAS, LISTAS Y COLAS - aed.wikispaces.comaed.wikispaces.com/file/view/PILAS_LISTAS_Y_COLAS.pdf · Colas Una cola es una estructura de datos de acceso restrictivo a sus

Colas - codificaciónDeclaración

struct tcola {

int elems;

int entrada, salida;

int elemento[max_cola];

} cola;

void crear()

{

cola.elems = 0;

cola.salida =cola.entrada = -1;

}

Procedimiento de creación

Page 10: Estructuras PILAS, LISTAS Y COLAS - aed.wikispaces.comaed.wikispaces.com/file/view/PILAS_LISTAS_Y_COLAS.pdf · Colas Una cola es una estructura de datos de acceso restrictivo a sus

Colas - codificación

Función que devuelve 1 si la cola esta vacía

int vacia()

{

int r=0;

if (cola.elems ==0) r=1;

return r;

}

int llena ()

{

int r=0;

if (cola.elems ==max_cola) r=1;

return r;

}

Función que devuelve 1 si la cola esta llena

Page 11: Estructuras PILAS, LISTAS Y COLAS - aed.wikispaces.comaed.wikispaces.com/file/view/PILAS_LISTAS_Y_COLAS.pdf · Colas Una cola es una estructura de datos de acceso restrictivo a sus

Colas – codificación

Procedimiento de encolar

void encolar (int elem)

{

cola.elems++;

cola.elemento[++cola.entrada] = elem;

if (cola.entrada ==(max_cola-1)) cola.entrada =-1;

return;

}

int desencolar ()

{

int ele;

cola.elems--;

ele= cola.elemento [cola.salida];

cola.elemento[cola.salida]=0;

cola.salida++;

if (cola.salida ==(max_cola)) cola.salida =0;

return ele;

}

Procedimiento de desencolar

Page 12: Estructuras PILAS, LISTAS Y COLAS - aed.wikispaces.comaed.wikispaces.com/file/view/PILAS_LISTAS_Y_COLAS.pdf · Colas Una cola es una estructura de datos de acceso restrictivo a sus

/* programa tipo de cola cricular */

#include <stdio.h>

#include <conio.h>

void crear();

int vacia();

int llena();

void encolar (int elem);

int desencolar ();

# define max_cola 5

struct tcola {

int elems;

int entrada, salida;

int elemento[max_cola];

} cola;

void main ()

{

int elem, op,i;

clrscr();

crear();

printf("cola creada\n");

do{

printf ("1.Encolar\n 2. Desencolar \n 3. Salir\n");

scanf("%d",&op);

switch (op) {

case 1: printf ("Ingrese un numero");

scanf("%d",&elem);

if (llena()!=1) encolar(elem);

else printf(“\nCola llena\n”);

break;

case 2: if (vacia()!=1) {elem = desencolar();

printf("\n elemento desapilado %d",elem);}

else printf(“\n Cola vacia\n”);

break;

case 3: break;

}

printf ("\n\nCOLA....\n");

for (i=0;i<max_cola;i++){

printf ("elemento [%d] = %d\n",i,cola.elemento[i]);

}

} while (op!=3);

getch();

return;

}

Programa de ejemplo

Page 13: Estructuras PILAS, LISTAS Y COLAS - aed.wikispaces.comaed.wikispaces.com/file/view/PILAS_LISTAS_Y_COLAS.pdf · Colas Una cola es una estructura de datos de acceso restrictivo a sus

Una lista es una estructura de datos secuencial. Una manera de clasificarlas es por la forma de acceder al siguiente elemento:-lista densa: la propia estructura determina cuál es el siguiente elemento de la lista. Ejemplo: un array.- lista enlazada: la posición del siguiente elemento de la estructura la determina el elemento actual. Es necesario almacenar al menos la posición de memoria del primer elemento. Además es dinámica, es decir, su tamaño cambia durante la ejecución del programa.

Operaciones INSERTAR

RECORRER

BORRAR

Listas

Page 14: Estructuras PILAS, LISTAS Y COLAS - aed.wikispaces.comaed.wikispaces.com/file/view/PILAS_LISTAS_Y_COLAS.pdf · Colas Una cola es una estructura de datos de acceso restrictivo a sus

Listas - codificaciónDeclaración

struct lista

{

int clave;

struct lista *sig;

} *L, *p,*actual, *anterior, *nuevo;

L = NULL;

Procedimiento de creación de lista vacía

Declaración autoreferencial

Page 15: Estructuras PILAS, LISTAS Y COLAS - aed.wikispaces.comaed.wikispaces.com/file/view/PILAS_LISTAS_Y_COLAS.pdf · Colas Una cola es una estructura de datos de acceso restrictivo a sus

Listas - codificación

Procedimiento para insertar información al comienzo

int main(void)

{

clrscr();

int i,suma;

L = NULL; /* Crea una lista vacia */

for (i = 4; i >= 1; i--)

{

/* Reserva memoria para un nodo */

p = (struct lista *) malloc(sizeof(struct lista));

scanf(“%d”,&p->clave); /* Introduce la informacion */

p->sig = L; /* reorganiza */

L = p;

getch();

}

...

Page 16: Estructuras PILAS, LISTAS Y COLAS - aed.wikispaces.comaed.wikispaces.com/file/view/PILAS_LISTAS_Y_COLAS.pdf · Colas Una cola es una estructura de datos de acceso restrictivo a sus

Listas - codificaciónFunción para recorrer una lista y calcular la suma de sus elementosvoid recorrer()

{

int suma;

p = L;

while (p != NULL) {

printf("%d, ", p->clave);

suma = suma + p->clave;

p = p->sig;

}

printf("\nsuma:%d",suma);

getch();

return;

}

Page 17: Estructuras PILAS, LISTAS Y COLAS - aed.wikispaces.comaed.wikispaces.com/file/view/PILAS_LISTAS_Y_COLAS.pdf · Colas Una cola es una estructura de datos de acceso restrictivo a sus

Listas - codificaciónFunción para insertar un elemento al final o en medio de la lista ordenada.

void insertar(int elem)

{

/* 1.- se busca su posicion */

anterior = actual = L;

while (actual != NULL && actual->clave < elem) {

anterior = actual;

actual = actual->sig;

}

/* 2.- se crea el nodo */

nuevo = (struct lista *) malloc(sizeof(struct lista));

nuevo->clave = elem;

/* 3.- Se enlaza */

if (anterior == NULL || anterior == actual) { /* inserta al principio */

nuevo->sig = anterior;

L = nuevo; /*importante: al insertar al principio actulizar la cabecera */

}

else { /* inserta entre medias o al final */

nuevo->sig = actual;

anterior->sig = nuevo;

}}

Page 18: Estructuras PILAS, LISTAS Y COLAS - aed.wikispaces.comaed.wikispaces.com/file/view/PILAS_LISTAS_Y_COLAS.pdf · Colas Una cola es una estructura de datos de acceso restrictivo a sus

Listas - codificaciónFunción para insertar un elemento. Otra forma de codificar...

void Insertar( int v) {

/* Crear un nodo nuevo */

nuevo = (struct lista *)malloc(sizeof(struct

lista));

Nuevo->clave = v;

/* Si la lista está vacía */

if(L==NULL || L->clave > v) {

/* Añadimos la lista a continuación del nuevo

nodo */

nuevo->siguiente = L;

/* Ahora, el comienzo de nuestra lista es en

nuevo nodo */

L = nuevo;

}

else {

/* Buscar el nodo de valor menor a v

*/

anterior = L;

/* Avanzamos hasta el último

elemento o hasta que el siguiente tenga

un valor mayor que v */

while(anterior->siguiente !=NULL

&& anterior->siguiente->valor <= v)

anterior = anterior->siguiente;

/* Insertamos el nuevo nodo después

del nodo anterior */

nuevo->siguiente = anterior-

>siguiente;

anterior->siguiente = nuevo;

}

}

Page 19: Estructuras PILAS, LISTAS Y COLAS - aed.wikispaces.comaed.wikispaces.com/file/view/PILAS_LISTAS_Y_COLAS.pdf · Colas Una cola es una estructura de datos de acceso restrictivo a sus

Listas - codificaciónFunción para borrar un elemento de la lista.void borrar( int elem)

{

/* 1.- busca su posición. Es casi igual que en la inserción, ojo al (<) */

anterior = actual = L;

while (actual != NULL && actual->clave < elem) {

anterior = actual;

actual = actual->sig;

}

/* 2.- Lo borra si existe */

if (actual != NULL && actual->clave == elem) {

if (anterior == actual) /* borrar el primero */

L = actual->sig;

else /* borrar en otro sitio */

anterior->sig = actual->sig;

free(actual);

}}

Page 20: Estructuras PILAS, LISTAS Y COLAS - aed.wikispaces.comaed.wikispaces.com/file/view/PILAS_LISTAS_Y_COLAS.pdf · Colas Una cola es una estructura de datos de acceso restrictivo a sus

#include <stdlib.h>

#include <stdio.h>

#include <conio.h>

void recorrer( );

void insertar(int elem);

void borrar( int elem);

struct lista

{

int clave;

struct lista *sig;

}*L, *p,*actual, *anterior, *nuevo;

Programa de ejemplo

int main(void)

{

clrscr();

int i,suma;

L = NULL; /* Crea una lista vacia */

for (i = 4; i >= 1; i--)

{

/* Reserva memoria para un nodo */

p = (struct lista *) malloc(sizeof(struct lista));

p->clave = i; /* Introduce la informacion */

p->sig = L; /* reorganiza */

L = p; /* los enlaces p->L->NULL*/

getch();

}

recorrer( );

insertar(5);

recorrer();

borrar (2);

recorrer ();

return 0;

}

Page 21: Estructuras PILAS, LISTAS Y COLAS - aed.wikispaces.comaed.wikispaces.com/file/view/PILAS_LISTAS_Y_COLAS.pdf · Colas Una cola es una estructura de datos de acceso restrictivo a sus