Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Profesores
Arreglos ordenados Bsqueda binaria Pilas Mtodos de implementacin de pilas Colas Mtodos de implementacin de colas Multilistas
Arreglos Ordenados
Arreglos Ordenados
Permiten mejorar la performance de bsqueda.
La desventaja es que se incrementa el tiempo de insercin. Los algoritmos de insercin y bsqueda son diferentes a los del arreglo no ordenado, sin embargo la eliminacin de un elemento es igual.
Duplicados Permitidos
Se recorre el arreglo para buscar la posicin correcta en donde se insertara el nuevo elemento. Se libera esta posicin moviendo todos los elementos a la derecha. Si no hay espacio suficiente se aumenta la capacidad del arreglo. Finalmente se escribe el elemento en la posicin correcta.
Duplicados Permitidos
Requiere bsqueda entre los N elementos (considerando que se deben encontrar todos los valores).
10 20 30 40 50 60 70 80 90 99
Si buscamos el nmero
45
5
6 7
34
32 33
Muy Alto
Muy Bajo Correcto
32 - 33
33 - 33
Tiempo de Ejecucin
O(N) O(log N) O(1) O(N) O(N) O(N)
Pilas
Pilas
Son estructuras utilizadas muy a menudo como herramientas de programacin de tipo LIFO (Last inFirst out).
Permiten el acceso solo a un elemento a la vez: el ltimo elemento insertado.
Pilas - Operaciones
Bsicamente poseen tres operaciones primarias:
push (dato) inserta el dato en el tope de la pila pop () remueve el dato del tope de la pila peek () Permite visualizar el dato del tope de la pila.
Pilas - Eficiencia
Push? Pop? Peek? Create?
10 50 46 80 23 11 13
push(45)
0 1 2
push(78)
3 4 5 6 7 8 9 10 11 12 13 14
10 50 46 80 23 11 13 45 78
pop
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
10 50 46 80 23 11 13 45
push(45) Pila
push(78)
78
45
50
46
80
23
11
13
pop Pila 45 50 46 80 23 11 13
Editores de texto
Los cambios efectuados se almacenan en una pila Usualmente implementada como arreglo Usuario puede deshacer los cambios mediante la operacin undo, la cual extraer el estado del texto antes del ltimo cambio realizado.
Ejemplo
#include <stdio.h> #include <stack> using namespace std; int main() { stack<int> pila; pila.push(20); if (!pila.empty()) {
printf(El numero en la pila es %d, pila.top()); pila.pop();
Colas
Colas
Son estructuras utilizadas muy a menudo como herramientas de programacin de tipo FIFO (First inFirst out).
Simulan una cola de personas en el cine. Las colas son herramientas de programacin como las pilas.
Colas - Operaciones
Bsicamente poseen tres operaciones primarias:
encolar (dato) inserta el dato al final de la cola desencolar() remueve el dato al inicio de la cola peek () Permite visualizar el dato al inicio de la cola.
Pilas - Eficiencia
Encolar? Desencolar? Peek? Create?
La desventaja de implementar una cola mediante un arreglo es que esta ltima es de tamao fijo, mientras que la cola es de tamao dinmico. Otra complicacin, es el mtodo desencolar, que para mantenerse de orden 1, no debe mover todos los elementos hacia la izquierda, y el mtodo encolar debe considerar siempre todo el espacio disponible.
10 50 46 80 23 11 13
encolar(45)
0 1 2
encolar(78)
3 4 5 6 7 8 9 10 11 12 13 14
10 50 46 80 23 11 13 45 78
desencolar
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
13 45 78 46 85 39 24 12 16
encolar(45) Cola 50
encolar(78)
46
80
23
11
13
45
78
desencolar
Cola 46 80 23 11 13 45 78
Ejemplo
#include <stdio.h> #include <queue> using namespace std; int main() { queue<int> cola; cola.push(20); cola.push(40); if (!cola.empty()) {
printf(Extremos son %d y %d, cola.front(), cola.back()); cola.pop();
} return 0; }
Multilistas
Multilista
Una multilista es simplemente una lista (puede ser simple o doble) que tiene como dato otra lista (puede ser simple o doble).
El concepto de multilista se aplica por lo general con listas, pero es posible mezclar vectores con listas para crear una multilista.
Lista de Cursos
Supongamos que necesitamos almacenar una lista con los cursos de la UPC.
Cada curso contiene la siguiente informacin:
Cdigo del curso Nombre del curso
Para resolver el problema nos conviene utilizar una clase que almacene estos dos valores:
class CCurso { char Codigo[8]; char Nombre[40]; };
Codigo Nombre
Codigo Nombre
Codigo Nombre
Next
Next
Next
Lista de Alumnos
Supongamos que necesitamos almacenar una lista con los alumnos de la UPC.
Cada alumno contiene la siguiente informacin:
Cdigo TIU Nombre Completo
Para resolver el problema nos conviene utilizar una clase que almacene estos dos valores:
class CAlumno { long TIU; char NomCompleto[120]; };
TIU NomCompleto
TIU NomCompleto
TIU NomCompleto
Next
Next
Next
Cursos y Alumnos
Cursos
begin
Codigo Nombre
Codigo Nombre
Codigo Nombre
Next
Next
Next
Alumnos
begin
TIU
NomCompleto
TIU
NomCompleto
TIU
NomCompleto
Next
Next
Next
Multilista
Cursos
begin
Next
Next
Next
Ejercicios
Referencias
Cormen, Thomas H. and Others
Introduction to Algorithms, Second Edition. 2001.
Lafore, Robert
Data Structures and Algorithms in Java, Second Edition. 2003.
Shaffer, Clifford A.
Class Notes, Data Structures and File Processing, Department of Computer Science, Virginia Tech. Fall 2004.