estructuras - aed.wikispaces.compilas,+listas+y... · pilas – codificación procedimiento de...

21
Estructuras PILA - COLA - LISTA

Upload: dangkien

Post on 01-Feb-2018

247 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Estructuras - aed.wikispaces.comPILAS,+LISTAS+Y... · Pilas – codificación Procedimiento de apilado void apilar (int elem) { ... Colas Una cola es una estructura de datos de acceso

Estructuras

PILA - COLA - LISTA

Page 2: Estructuras - aed.wikispaces.comPILAS,+LISTAS+Y... · Pilas – codificación Procedimiento de apilado void apilar (int elem) { ... Colas Una cola es una estructura de datos de acceso

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 - aed.wikispaces.comPILAS,+LISTAS+Y... · Pilas – codificación Procedimiento de apilado void apilar (int elem) { ... Colas Una cola es una estructura de datos de acceso

Pilas - codificación Declaración

struct tpila {

int cima;

int elementos[MAX_PILA];

} pila;

void crear( )

{

pila.cima = -1;

}

Procedimiento de creación

Page 4: Estructuras - aed.wikispaces.comPILAS,+LISTAS+Y... · Pilas – codificación Procedimiento de apilado void apilar (int elem) { ... Colas Una cola es una estructura de datos de acceso

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 == (MAX_PILA-1)) r=1;

return r;

}

Función que devuelve 1 si la pila esta llena

Page 5: Estructuras - aed.wikispaces.comPILAS,+LISTAS+Y... · Pilas – codificación Procedimiento de apilado void apilar (int elem) { ... Colas Una cola es una estructura de datos de acceso

Pilas – codificación Procedimiento de apilado

void apilar (int elem)

{

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

}

int desapilar ()

{

int ele;

ele= pila.elementos [pila.cima];

pila.elementos [pila.cima]=0;

-- pila.cima;

return ele;

}

Procedimiento de desapilado

Page 6: Estructuras - aed.wikispaces.comPILAS,+LISTAS+Y... · Pilas – codificación Procedimiento de apilado void apilar (int elem) { ... Colas Una cola es una estructura de datos de acceso

Pilas – codificación

Procedimiento de mostrar una pila.

void mostrar()

{

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

while (vacia()!=1){

ele= desapilar();

i++;

vec[i]=ele;

printf(“\t %d\t”,ele);

}

for(c=i;c>=0;c--)apilar(vec[c]);

}

Page 7: Estructuras - aed.wikispaces.comPILAS,+LISTAS+Y... · Pilas – codificación Procedimiento de apilado void apilar (int elem) { ... Colas Una cola es una estructura de datos de acceso

/* programa tipo de pila */

#include <stdio.h>

#include <conio.h>

void crear();

int vacia();

int llena();

void apilar (int elem);

int desapilar ();

void vostrar();

struct tpila {

int cima;

int elemento[5];

} pila;

int main ()

{

int elem, op,i;

crear();

printf("pila creada\n");

do{

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

scanf("%d",&op);

switch (op) {

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

scanf("%d",&elem);

apilar(elem);

break;

case 2: elem = desapilar();

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

break;

case 3: break;

}

if (vacia()) printf ("\n pila vacia");

if (llena()) printf ("\n pila llena");

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

mostrar();

} while (op!=3);

}

Programa de ejemplo

Page 8: Estructuras - aed.wikispaces.comPILAS,+LISTAS+Y... · Pilas – codificación Procedimiento de apilado void apilar (int elem) { ... Colas Una cola es una estructura de datos de acceso

Colas Una 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 - aed.wikispaces.comPILAS,+LISTAS+Y... · Pilas – codificación Procedimiento de apilado void apilar (int elem) { ... Colas Una cola es una estructura de datos de acceso

Colas - codificación Declaración

struct tcola {

int elems;

int entrada, salida;

int elemento[max_cola];

} cola;

void crear()

{

cola.elems = 0;

cola.salida =cola.entrada = 0;

}

Procedimiento de creación

Page 10: Estructuras - aed.wikispaces.comPILAS,+LISTAS+Y... · Pilas – codificación Procedimiento de apilado void apilar (int elem) { ... Colas Una cola es una estructura de datos de acceso

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 - aed.wikispaces.comPILAS,+LISTAS+Y... · Pilas – codificación Procedimiento de apilado void apilar (int elem) { ... Colas Una cola es una estructura de datos de acceso

Colas – codificación Procedimiento de encolar void encolar (int elem)

{

cola.elems++;

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

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

}

int desencolar ()

{

int ele;

if (vacia()!=1){ cola.elems--;

ele= cola.elemento [cola.salida];

cola.elemento[cola.salida]=0;

cola.salida++;

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

else printf(“no hay elementos”);

return ele;

}

Procedimiento de desencolar

Page 12: Estructuras - aed.wikispaces.comPILAS,+LISTAS+Y... · Pilas – codificación Procedimiento de apilado void apilar (int elem) { ... Colas Una cola es una estructura de datos de acceso

/* 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;

int main ()

{

int elem, op,i;

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);

encolar(elem);

break;

case 2: elem = desencolar();

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

break;

case 3: break;

}

if (vacia()) printf ("\n cola vacia");

if (llena()) printf ("\n cola llena");

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

mostrar();

} while (op!=3);

}

Programa de ejemplo

Page 13: Estructuras - aed.wikispaces.comPILAS,+LISTAS+Y... · Pilas – codificación Procedimiento de apilado void apilar (int elem) { ... Colas Una cola es una estructura de datos de acceso

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 - aed.wikispaces.comPILAS,+LISTAS+Y... · Pilas – codificación Procedimiento de apilado void apilar (int elem) { ... Colas Una cola es una estructura de datos de acceso

Listas - codificación Declaració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 - aed.wikispaces.comPILAS,+LISTAS+Y... · Pilas – codificación Procedimiento de apilado void apilar (int elem) { ... Colas Una cola es una estructura de datos de acceso

Listas - codificación Procedimiento para insertar información al comienzo

int main( )

{

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;

}

...

}

Page 16: Estructuras - aed.wikispaces.comPILAS,+LISTAS+Y... · Pilas – codificación Procedimiento de apilado void apilar (int elem) { ... Colas Una cola es una estructura de datos de acceso

Listas - codificación Función para recorrer una lista y calcular la suma de sus elementos void recorrer()

{

int suma;

p = L;

while (p != NULL) {

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

suma = suma + p->clave;

p = p->sig;

}

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

}

Page 17: Estructuras - aed.wikispaces.comPILAS,+LISTAS+Y... · Pilas – codificación Procedimiento de apilado void apilar (int elem) { ... Colas Una cola es una estructura de datos de acceso

Listas - codificación Funció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 actualizar la cabecera */ }

else { /* inserta entre medias o al final */ nuevo->sig = actual;

anterior->sig = nuevo;

}}

Page 18: Estructuras - aed.wikispaces.comPILAS,+LISTAS+Y... · Pilas – codificación Procedimiento de apilado void apilar (int elem) { ... Colas Una cola es una estructura de datos de acceso

Listas - codificación Funció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 - aed.wikispaces.comPILAS,+LISTAS+Y... · Pilas – codificación Procedimiento de apilado void apilar (int elem) { ... Colas Una cola es una estructura de datos de acceso

Listas - codificación Funció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 - aed.wikispaces.comPILAS,+LISTAS+Y... · Pilas – codificación Procedimiento de apilado void apilar (int elem) { ... Colas Una cola es una estructura de datos de acceso

#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( )

{

int i,suma;

L = NULL; /* Crea una lista vacía */

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

{

/* Reserva memoria para un nodo */

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

p->clave = i; /* Introduce la información */

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

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

}

recorrer( );

insertar(5);

recorrer();

borrar (2);

recorrer ();

}

Page 21: Estructuras - aed.wikispaces.comPILAS,+LISTAS+Y... · Pilas – codificación Procedimiento de apilado void apilar (int elem) { ... Colas Una cola es una estructura de datos de acceso