Anda di halaman 1dari 7

Introduccin Para procesar informacin en un computador es necesario hacer una abstraccin de los datos que tomamos del mundo

real -abstraccin en el sentido de que se ignoran algunas propiedades de los objetos reales, es decir, se simplifican-. Se hace una seleccin de los datos ms representativos de la realidad a partir de los cuales pueda trabajar el computador para obtener unos resultados. Cualquier lenguaje suministra una serie de tipos de datos simples, como son los nmeros enteros, caracteres, nmeros reales. En realidad suministra un subconjunto de stos, pues la memoria del ordenador es finita. Los punteros (si los tiene) son tambin un tipo de datos. El tamao de todos los tipos de datos depende de la mquina y del compilador sobre los que se trabaja. En principio, conocer la representacin interna de estos tipos de datos no es necesaria para realizar un programa, pero s puede afectar en algunos casos al rendimiento.

Qu es una estructura de datos? Se trata de un conjunto de variables de un determinado tipo agrupadas y organizadas de alguna manera para representar un comportamiento. Lo que se pretende con las estructuras de datos es facilitar un esquema lgico para manipular los datos en funcin del problema que haya que tratar y el algoritmo para resolverlo. En algunos casos la dificultad para resolver un problema radica en escoger la estructura de datos adecuada. Y, en general, la eleccin del algoritmo y de las estructuras de datos que manipular estarn muy relacionadas. Segn su comportamiento durante la ejecucin del programa distinguimos estructuras de datos: - Estticas: su tamao en memoria es fijo. Ejemplo: arrays. - Dinmicas: su tamao en memoria es variable. Ejemplo: listas enlazadas con punteros, ficheros, etc. Las estructuras de datos que trataremos aqu son los arrays, las pilas y las colas, los rboles, y algunas variantes de estas estructuras. La tabla que se encuentra al comienzo de esta pgina agrupa todas las estructuras de datos que emplearn los algoritmos explicados en esta web.

Tipos Abstractos de Datos

Los tipos abstractos de datos (TAD) permiten describir una estructura de datos en funcin de las operaciones que pueden efectuar, dejando a un lado su implementacin. Los TAD mezclan estructuras de datos junto a una serie de operaciones de manipulacin. Incluyen una especificacin, que es lo que ver el usuario, y una implementacin (algoritmos de operaciones sobre las estructuras de datos y su representacin en un lenguaje de programacin), que el usuario no tiene necesariamente que conocer para manipular correctamente los tipos abstractos de datos. Se caracterizan por el encapsulamiento. Es como una caja negra que funciona simplemente conectndole unos cables. Esto permite aumentar la complejidad de los programas pero manteniendo una claridad suficiente que no desborde a los desarrolladores. Adems, en caso de que algo falle ser ms fcil determinar si lo que falla es la caja negra o son los cables. Por ltimo, indicar que un TAD puede definir a otro TAD. Por ejemplo, en prximos apartados se indicar como construir pilas, colas y rboles a partir de arrays y listas enlazadas. De hecho, las listas enlazadas tambin pueden construirse a partir de arrays y viceversa.

Como leer estos temas Se recomienda tratar en profundidad los temas de estructuras de datos antes de entrar de lleno en los algoritmos, si bien es muy recomendable al menos leer la introduccin a los algoritmos y algunos de los temas que suelen ser ms conocidos, tales como la ordenacin y la bsqueda. En primer lugar es fundamental el conocimiento de la recursividad, inherente a muchas estructuras de datos y algoritmos. Es este por tanto el primer tema que hay tratar. Posteriormente conviene estudiar los temas de arrays y listas enlazadas, puesto que son bsicos para implementar el resto de estructuras de datos. Los temas de pilas y colas son fundamentales, y mucho ms sencillas de entender y aplicar que los temas restantes. Como temas avanzados (y no por ello menos importantes, adems de que requieren el conocimiento de los temas anteriores) figuran los grafos, si bien en la seccin de estructuras de datos se estudiarn slo sus implementaciones y recorridos, los rboles y los montculos, una implementacin especial de rbol. De manera independiente puede leerse el tema de conjuntos. Asimismo, suele ocurrir que unos temas entran en el terreno de otros, y por lo tanto sern habituales las referencias a otros temas, ya sean a estructuras de datos y a algoritmos.

Nota: Adems de las estructuras de datos que se estudian aqu existe otra que es el fichero; dicha estructura no se estudiar en estas pginas. Slo se utilizarn ficheros en algunos casos -nicamente de tipo ASCII-, y exclusivamente para facilitar la introduccin de los datos que se requieren para resolver un problema y tambin para mostrar los datos producidos por el algoritmo que procesa esos datos.

Una de las aplicaciones ms interesantes y potentes de la memoria dinmica y de los punteros son, sin duda, las estructuras dinmicas de datos. Las estructuras bsicas disponibles en C y C++ (structs y arrays) tienen una importante limitacin: no pueden cambiar de tamao durante la ejecucin. Los arrays estn compuestos por un determinado nmero de elementos, nmero que se decide en la fase de diseo, antes de que el programa ejecutable sea creado. En muchas ocasiones se necesitan estructuras que puedan cambiar de tamao durante la ejecucin del programa. Por supuesto, podemos crear arrays dinmicos, pero una vez creados, tu tamao tambin ser fijo, y para hacer que crezcan o disminuyan de tamao, deberemos reconstruirlos desde el principio. Las estructuras dinmicas nos permiten crear estructuras de datos que se adapten a las necesidades reales a las que suelen enfrentarse nuestros programas. Pero no slo eso, como veremos, tambin nos permitirn crear estructuras de datos muy flexibles, ya sea en cuanto al orden, la estructura interna o las relaciones entre los elementos que las componen. Las estructuras de datos estn compuestas de otras pequeas estructuras a las que llamaremos nodos o elementos, que agrupan los datos con los que trabajar nuestro programa y adems uno o ms punteros autoreferenciales, es decir, punteros a objetos del mismo tipo nodo. Una estructura bsica de un nodo para crear listas de datos seria:
struct nodo \{ int dato; struct nodo *otronodo; };

El campo "otronodo" puede apuntar a un objeto del tipo nodo. De este modo, cada nodo puede usarse como un ladrillo para construir listas de datos, y cada uno mantendr ciertas relaciones con otros nodos. Para acceder a un nodo de la estructura slo necesitaremos un puntero a un nodo. Durante el presente curso usaremos grficos para mostrar la estructura de las estructuras de datos dinmicas. El nodo anterior se representar asi:

Nodo Las estructuras dinmicas son una implementacin de TDAs o TADs (Tipos Abstractos de Datos). En estos tipos el inters se centra ms en la estructura de los datos que en el tipo concreto de informacin que almacenan. Dependiendo del nmero de punteros y de las relaciones entre nodos, podemos distinguir varios tipos de estructuras dinmicas. Enumeraremos ahora slo de los tipos bsicos:

Listas abiertas: cada elemento slo dispone de un puntero, que apuntar al siguiente elemento de la lista o valdr NULL si es el ltimo elemento. Pilas: son un tipo especial de lista, conocidas como listas LIFO (Last In, First Out: el ltimo en entrar es el primero en salir). Los elementos se "amontonan" o apilan, de modo que slo el elemento que est encima de la pila puede ser ledo, y slo pueden aadirse elementos encima de la pila. Colas: otro tipo de listas, conocidas como listas FIFO (First In, First Out: El primero en entrar es el primero en salir). Los elementos se almacenan en fila, pero slo pueden aadirse por un extremo y leerse por el otro. Listas circulares: o listas cerradas, son parecidas a las listas abiertas, pero el ltimo elemento apunta al primero. De hecho, en las listas circulares no puede hablarse de "primero" ni de "ltimo". Cualquier nodo puede ser el nodo de entrada y salida. Listas doblemente enlazadas: cada elemento dispone de dos punteros, uno a punta al siguiente elemento y el otro al elemento anterior. Al contrario que las listas abiertas anteriores, estas listas pueden recorrerse en los dos sentidos. Arboles: cada elemento dispone de dos o ms punteros, pero las referencias nunca son a elementos anteriores, de modo que la estructura se ramifica y crece igual que un rbol. Arboles binarios: son rboles donde cada nodo slo puede apuntar a dos nodos. Arboles binarios de bsqueda (ABB): son rboles binarios ordenados. Desde cada nodo todos los nodos de una rama sern mayores, segn la norma que se haya seguido para ordenar el rbol, y los de la otra rama sern menores. Arboles AVL: son tambin rboles de bsqueda, pero su estructura est ms optimizada para reducir los tiempos de bsqueda. Arboles B: son estructuras ms complejas, aunque tambin se trata de rboles de bsqueda, estn mucho ms optimizados que los anteriores. Tablas HASH: son estructuras auxiliares para ordenar listas. Grafos: es el siguiente nivel de complejidad, podemos considerar estas estructuras como rboles no jerarquizados. Diccionarios.

Al final del curso tambin veremos estructuras dinmicas en las que existen nodos de distintos tipos, en realidad no es obligatorio que las estructuras dinmicas estn compuestas por un nico tipo de nodo, la flexibilidad y los tipos de estructuras slo estn limitados por tu imaginacin como programador.

Comentarios de los usuarios (8)

Wladimir 2009-12-10 14:53:51 Excelente contribucin tanto para los profesores como a los estudiantes, los felicito por tan grandiosa iniciativa.

tandazo salinas 2010-02-02 17:09:56 excelente trabajo muy buen trabajo.

Luis Tovar 2010-05-05 16:25:39 Esta muy bueno y completo el apunte............ pero hace falta un pequeo example sobre el tema

Annimo 2010-06-18 16:59:15 Muy buena contribucion esta pagina de verdad que sirve para los alumnos que estudian informaticaa =) MUCHAS GRACIAS

Javier 2011-02-16 18:55:40 Excelente pgina. Os felicito.

Anonimo 2011-10-21 23:47:37

Excelente pgina, es muy explicativa y muy completa, me le todo el curso de C++ desde lo ms bsico del C, hasta el manejo de excepciones de C++, me di el trabajo de leer todo con calma, para entender correctamente los temas, ahora estoy terminando de ver arboles y ya tendra listo el curso de E.D.D. Yo estudio para informatica, pero realmente en este curso he aprendido a programar, pues en mi universidad es muy lamentable la calidad de los profesores, por ejemplo todos ensean a reservar memoria con el operador new, pero nadie dice que hay que liberarla, eso me parece una actitud muy irresponsable como programadores que son los profesores, por eso no me fo mucho de lo que dicen, por lo menos en programacin prefiero ser autodidacta en mis conocimientos, ya que al parecer, hay muchos profesores que no aprendieron bien como funciona c++, en fin, muchas gracias por haberme enseado bien, aqui es donde estoy aprendiendo realmente a programar, saludos y muchas gracias.

Estructura de datos
Saltar a: navegacin, bsqueda

En programacin, una estructura de datos es una forma de organizar un conjunto de datos elementales con el objetivo de facilitar su manipulacin. Un dato elemental es la mnima informacin que se tiene en un sistema. Una estructura de datos define la organizacin e interrelacin de estos y un conjunto de operaciones que se pueden realizar sobre ellos. Las operaciones bsicas son:

Alta, adicionar un nuevo valor a la estructura. Baja, borrar un valor de la estructura. Bsqueda, encontrar un determinado valor en la estructura para realizar una operacin con este valor, en forma secuencial o binario (siempre y cuando los datos estn ordenados).

Otras operaciones que se pueden realizar son:


Ordenamiento, de los elementos pertenecientes a la estructura. Apareo, dadas dos estructuras originar una nueva ordenada y que contenga a las apareadas.

Cada estructura ofrece ventajas y desventajas en relacin a la simplicidad y eficiencia para la realizacin de cada operacin. De esta forma, la eleccin de la estructura de datos apropiada para cada problema depende de factores como la frecuencia y el orden en que se realiza cada operacin sobre los datos.

[editar] Estructuras de datos


Conjuntos (set) Matriz (matemticas) Matriz (programacin) Lista o Listas Simples o Listas Doblemente Enlazadas o Listas Circulares o Listas por saltos (Skip lists) rboles
o

rboles Binarios rbol binario de bsqueda rbol binario de bsqueda equilibrado rboles Rojo-Negro rboles AVL rboles Biselados (rboles Splay) rboles Multicamino (Multirrama) rboles B rboles B+ rboles B* Tries

Grafos Tablas Hash o Mapeos o Diccionarios Montculos (o heaps) o Montculo binario o Montculo binmico o Montculo de Fibonacci o Montculo suave o Montculo 2-3