estructura de datos en c
Download
Skip this Video
Download Presentation
Estructura de Datos En C++

Loading in 2 Seconds...

play fullscreen
1 / 23

Estructura de Datos En C++ - PowerPoint PPT Presentation


  • 105 Views
  • Uploaded on

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.

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about ' Estructura de Datos En C++' - navid


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

slide22

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