Estructura de datos en c
This presentation is the property of its rightful owner.
Sponsored Links
1 / 23

Estructura de Datos En C++ PowerPoint PPT Presentation


  • 78 Views
  • Uploaded on
  • Presentation posted in: General

Estructura de Datos En C++. Dr. Romeo S ánchez Nigenda . E-mail: romeo.sanchez @ gmail.com http: //yalma.fime.uanl.mx/~ romeo / Oficina: 1er. Piso del CIDET. Oficina con Dr. Oscar Chacón Horas de Tutoría: 10am-11am Martes y Jueves, 3:30pm-4:30pm Miércoles, 2:00pm-4:00pm Viernes.

Download Presentation

Estructura de Datos En C++

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


Estructura de datos en c

Estructura de Datos En C++

Dr. Romeo SánchezNigenda.

E-mail: [email protected]

http://yalma.fime.uanl.mx/~romeo/

Oficina: 1er. Piso del CIDET. Oficina con Dr. Oscar Chacón

Horas de Tutoría: 10am-11am Martes y Jueves,

3:30pm-4:30pm Miércoles, 2:00pm-4:00pm Viernes.

Website: http://yalma.fime.uanl.mx/~romeo/ED/2011/

Sesiones: 48


Objetivo general conocer y manejar las estructuras internas de informaci n

Objetivo General: Conocerá y manejará las estructuras internas de información

Temario:

  • Conceptos Básicos

  • La Pila

  • Colas

  • Recursión

  • Listas

  • Árboles

  • Ordenamiento

  • Búsqueda

  • Administración de Almacenamiento

    Total a calificar: 110 puntos.

40% Tareas

30% Examen Parcial

30% Examen Final

10% Participación


Material de apoyo

Material de apoyo:

Estructura de Datos con C y C++.

YedidyahLangsam, Moshe J. Augenstein, Aaron M. Tenenbaum, Brooklyn College

SegundaEdición, Prentice-Hall.

Algorithms. ThirdEdition.

Parts 1-4, Fundamentals Data StructuresSortingSearching

Robert Sedgewick.

Estructura de Datos.

Román Martínez, Elda Quiroga.

ThomsonLearning.

Cualquier libro de Estructura de Datos!

Software:

Compiladores GCC (GNU CompilerCollection)

IDEs (IntegratedDevelopmentEnvironment):

http://www.eclipse.org/downloads/

http://kdevelop.org/

http://www.bloodshed.net/devcpp.html


3 la cola queue

3. La Cola (Queue)

  • Objetivo: El alumno conocerá la estructura denominada la Cola o Fila, representación y aplicaciones.

  • Temario:

    • Representación de Colas

    • Operaciones con Colas

    • Colas circulares

    • Doble cola

    • Aplicaciones de colas


La cola queue

La Cola (Queue)

  • Conjunto de elementos del que pueden suprimirse elementos de un extremo (la parte delantera de la cola, front), y pueden agregarse elementos en el otro extremo (la parte posterior de la cola (rear)).

Agrega

Elimina

Front

Rear

  • Primer elemento insertado es el primero en suprimirse (estructura FIFO, first in firstout).

  • De manera genérica la cola necesita:

    • Un TAD para almacenar sus elementos

    • Un índice para indicar la posición del frente de la cola

    • Un índice para indicar la parte posterior de la cola


Colas operaciones

Colas: Operaciones

  • Insertar (insert(q,i)): Agrega elemento i en la parte posterior de la cola q

  • Remover (remove(q)): Suprime el elemento delantero de la cola q, checando que la cola no se encuentre vacía

  • Empty : (empty(q)) Retorna falso o verdadero dependiendo si la cola q está vacía o no, el número de elementos está dado por q.rear-q.front+1

Usandoarreglos

Insert(q,A)

Insert(q,B)

Insert(q,C)

Existe un problema, cuál es?

q.Elems

rear=front

rear

rear

front

rear

Init

q.Front=0

q.Rear =-1

rear

front

front

front

Vacía = True

Remove(q)

Remove(q)

If q.rear<q.front


Colas representaci n b sica

Colas: Representación Básica

#define SIZEQ 100

structColaBasica{

intfrente;

intcola;

intelementos[SIZEQ];

};

boolestaVacia(structColaBasica * C){

return (C->cola < C->frente);

}

frente

cola

inicio


Colas representaci n b sica1

Colas: Representación Básica

boolmueveCola(structColaBasica * C){

if(C->frente>0){

int j = 0;

for(inti=C->frente;i<=C->cola;i++){

C->elementos[j++] = C->elementos[i];

}

C->frente = 0;

C->cola=j-1;

returntrue;

}

returnfalse;

}

Cola

Frente

Cola

Frente


Colas representaci n b sica2

Colas: Representación Básica

void insert(structColaBasica * C, intelem){

boolhayEspacio = true;

if(C->cola+1 > SIZEQ-1){

hayEspacio = mueveCola(C);

}

if(hayEspacio){

C->elementos[++C->cola]=elem;

}else{

cout<<"Elemento no se pudoinsertar!"<<endl;

}

}

Cola

Cola

Frente

Frente


Colas representaci n b sica3

Colas: Representación Básica

int remove(structColaBasica * C){

if(!estaVacia(C)){

return (C->elementos[C->frente++]);

}else{

cout<<"Error cola vacia!"<<endl;

exit(1);

}

}

Cola

Cola

Frente

Frente


Colas circulares usando arreglos

Colas Circulares usando Arreglos

  • Evitamos mover elementos is asumimosque la cola es circular, esdecir, que el primer elemento del arregloestá inmediatamente después del el último elemento.

  • Se puedereservar un elemento en el arregloparadeterminarsi la cola se encuentravacía o no.

Frente

N

Se reserva un arreglo con un espacio más

N=MAX +1

boolestaVacia(structColaCircularq){

returnq.frente % N == q.cola;

}

boolestaLlena(structColaCircularq){

returnq.cola + 1== q.frente;

}

MAX elementos

[1]

[0]

Cola

  • Utilizamos el tamaño de la cola paradeterminarcuandorestablecernuestrosapuntadores al índice 0, yasísimularque la Cola es circular!


Colas circulares usando arreglos ejemplo

Colas Circulares usando Arreglos: Ejemplo

Frente

Frente

Frente

Frente

Insert(q,A)

Insert(q,B)

Insert(q,C)

Insert(q,D)

Cola

Cola

Cola

Cola

Remove(q)

Remove(q)

Remove(q)

Remove(q)

Cola

Cola

Cola

Cola

Frente

Frente

Frente

Frente


Colas circulares usando arreglos remoci n

Colas Circulares usando Arreglos: Remoción

intremueveCola(ColaCircular * q) {

if(!estaVacia(q)) {

q->frente =q->frente%N;

returnq->elementos[q->frente++];

} else {

cout << "Error, Cola vacía" << endl;

return ERROR;

}

}

1

2,3

Frente

Remove(q)

Pasos básicos:

0) Verifica que no esté vacía

1) Determina la posición correcta de Frente

2) Guarda el elemento a retornar

3) Incrementa frente

Cola

Cola

3) Frente

1) Frente

2

Elementoremovido: A


Colas circulares usando arreglos inserci n

Colas Circulares usando Arreglos: Inserción

voidinsertaCola(ColaCircular* q, int x) {

if(!estaLlena(q)) {

q->elementos[q->cola++] = x;

q->cola = q->cola% N;

} else {

Cout << "Error, Cola llena" << endl;

return;

}

}

1, 2

3

2) Cola

Insert(q,F)

Cola

1) Cola

Pasos básicos:

0) Verifica que no esté llena

1) Inserta en la posición de cola

2) Incrementa el valor de cola

3) Determina la posición correcta de cola

Frente

Frente

b) Cola

3) Cola


Doble cola bicola

Doble Cola: Bicola

  • Cola bidimensional en la quelasinserciones y eliminaciones se puedenrealizar en cualquiera de los dos extremos de la cola.

    • Cola doble con entradarestringida: Aceptainserciones solo al final de la cola

    • Cola doble con salidarestringida: Aceptaeliminaciones solo al inicio de la cola

  • A diferencia de una cola sencilla, debehaber dos métodos para leer y dos para escribir para considerar el frente y la parte posterior

    • Podemos utilizar un contador para el número de elementos


Doble cola operaciones

Doble Cola: Operaciones

insertaAtras(q,A)

insertaAtras(q,B)

Cola

Cola

Cola

Frente

Frente

Frente

Inicio:

insertaFrente(q,E)

insertaFrente(q,C)

insertaFrente(q,D)

Numelems= MAX

Cola

Cola llena!

Cola

Frente

Frente

Frente


Doble cola operaciones1

Doble Cola: Operaciones

RemueveFrente(q)

Numelems= MAX

Cola

Cola

Copia

Frente

Frente

Frente

RemueveAtras(q)

Cola

Cola

Frente

Frente


Doble cola operaciones2

Doble Cola: Operaciones

structBicola {

intnelems;

intfrente;

intcola;

intelementos[MAXQUEUE];

};

int empty() { return items == 0; }

Bicola q;

q.nelems = 0;

q.frente = 0;

q.cola = 0;


Doble cola operaciones3

Doble Cola: Operaciones

insertaAtras(q,B)

void insertaAtras(Bicola * q, int x){

if (q->nelems == MAXQUEUE){

cout<<"Error, cola llena"; exit(1);

}

q->elementos[q->cola] = x;

q->nelems ++;

q->cola ++;

}

Cola

Cola

Frente

Frente

Frente


Doble cola operaciones4

Doble Cola: Operaciones

insertaFrente(q,C)

void insertaFrente(Bicola * q, int x){

if (q->nelems == MAXQUEUE){

cout<<"Error, cola llena"; exit(1);

}

mueveBicolaUp(q);

q->elementos[q->frente] = x;

q->nelems ++;

q->cola ++;

}

Cola

Cola

Frente

Frente


Doble cola operaciones5

Doble Cola: Operaciones

Numelems= MAX

RemueveFrente(q)

Cola

Cola

intremueveFrente(Bicola * q){

int d;

if ( empty() ) returnt_error;

q->nelems --;

q-> cola --;

d = q->elementos[q->frente];

mueveBicolaDown(q);

return d;

}

Frente

Frente

Frente


Estructura de datos en c

Doble Cola: Operaciones

RemueveAtras(q)

intremueveAtras(Bicola * q){

if ( empty() ) returnt_error;

q->nelems --;

return q->elementos[-- q->cola];

}

Cola

Cola

Frente

Frente


Aplicaciones de colas

Aplicaciones de Colas

  • En CienciasComputacionales, Investigación de Operaciones, y muchasotrasáreasdondedatos son almacenadospara ser procesadosposteriormente, ejecutandounafunción de buffer (e.g., inventarios, threads, simulación, manufactura, etc).


  • Login