100% encontró este documento útil (1 voto)
85 vistas32 páginas

Programaciond

El documento describe diferentes estructuras de datos lineales y no lineales, incluyendo listas enlazadas, pilas, colas y árboles. Explica que las estructuras de datos lineales ordenan los datos de forma adyacente mientras que las no lineales los ordenan de forma específica con relaciones entre los datos.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PPTX, PDF, TXT o lee en línea desde Scribd
100% encontró este documento útil (1 voto)
85 vistas32 páginas

Programaciond

El documento describe diferentes estructuras de datos lineales y no lineales, incluyendo listas enlazadas, pilas, colas y árboles. Explica que las estructuras de datos lineales ordenan los datos de forma adyacente mientras que las no lineales los ordenan de forma específica con relaciones entre los datos.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PPTX, PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 32

Universidad Autónoma del Estado de México

UAEM

Centro Universitario UAEM Ecatepec

Estructura de Datos Lineales y no lineales

¿
Referencias a Autores
Los datos estudiados hasta ahora se denominan estáticos. Ello es debido a que las variables son direcciones
simbólicas de posiciones de memoria; esta relación entre nombres de variables y posiciones de memoria
es una relación estática que se establece por la declaración de las variables de una unidad de programa. Una estructura de
datos dinámica es una colección de elementos denominados nodos de la estructura normalmente de tipo registro que son
enlazados juntos. Las estructuras dinámicas de datos se clasifican en lineales y no lineales. El estudio de las estructuras
lineales, listas, pilas y colas
Luis Joyanes Aguilar
Título de diapositiva
La diferencia entre la estructura de datos lineal y no lineal es que en la estructura de datos lineal los datos no
están ordenados de manera específica y los datos están dispuestos de manera adyacente, mientras que en la
estructura de datos no lineal los datos están ordenados en un orden específico y existe una relación entre los
datos.
Laura McKinney

#SomosUAEMéx
Referencias a Autores
Estructuras de Datos
El estudio de las estructuras de datos, sin duda es uno de los más importantes dentro de las carreras relacionadas con la
computación, ya que el conocimiento eficiente de las estructuras de datos suele ser imprescindible en la formación de los
alumnos debido a la trascendencia que un aprendizaje teórico-práctico de las mismas supondrá ́ para su carrera.
Las estructuras dinámicas permiten crear estructuras de datos que se adapten a las necesidades reales a las que suelen
enfrentarse los programas. Pero no solo eso, también permitirá ́ crear estructuras de datos muy flexibles, ya sea en
cuanto al orden, la estructura interna o las relaciones entre los elementos que las componen.

Título de diapositiva M. en C. Edith Cristina Herrera


Luna

#SomosUAEMéx
Estructura de Datos
Introducción

Las estructuras de datos, definiendo tipos y estructuras de datos primitivos,


tales como enteros, real y carácter, utilizados para construir tipos más
complicados como arrays y registros, denominados estructuras de datos
compuestos. Tienen una estructura porque sus datos están relacionados entre sí.
Las estructuras compuestas, tales como arrays y registros, están soportadas en la
mayoría de los lenguajes de programación, debido a que son necesarias en casi
todas las aplicaciones. La potencia y flexibilidad de un lenguaje está directamente
relacionada con las estructuras de datos que posee. La programación de
algoritmos complicados puede resultar muy difícil en un lenguaje con estructuras
de datos limitados, caso de FORTRAN y COBOL

#SomosUAEMéx
Estructuras Dinámica
Las estructuras dinámicas de datos son estructuras que «crecen a medida que se ejecuta un programa». Una
estructura dinámica de datos es una colección de elementos (llamados nodos) que son normalmente
registros. Al contrario que un array, que contiene espacio para almacenar un número fijo de elementos, una
estructura dinámica de datos se amplía y contrae durante la ejecución del programa, basada en los registros
de almacenamiento de datos del programa.

Título dePilasdiapositiva Arboles


Lineales Colas No lineales
Grafos
Listas Enlazadas

#SomosUAEMéx
Estructuras de datos lineales
Las estructuras de datos lineales y no lineales son formas de organizar y almacenar datos en un programa o sistema
informático.

Título de diapositiva
https://youtu.be/oQ0WkIdr73E

#SomosUAEMéx
Listas Ligadas
Una lista lineal es un conjunto de elementos de un tipo dado que pueden variar en número y donde cada elemento
tiene un único predecesor y un único sucesor o siguiente, excepto el primero y último de la lista. Esta es una definición
muy general que incluye los ficheros y vectores. Los inconvenientes de las listas contiguas se eliminan con las listas
enlazadas. Se pueden almacenar los elementos de una lista lineal en posiciones de memoria que no sean contiguas o
adyacentes.
Una lista enlazada o encadenada es un conjunto de elementos en los que cada elemento contiene la posición
o dirección del siguiente elemento de la lista. Cada elemento de la lista enlazada debe tener al menos dos campos: un
campo que tiene el valor del elemento y un campo (enlace, link) que contiene la posición del siguiente elemento, es decir,
su conexión, enlace o encadenamiento. Los elementos de una lista son enlazados por medio de los
campos enlaces. Las listas enlazadas tienen una terminología propia que se suele utilizar normalmente. Primero, los
valores se almacenan en un nodo

#SomosUAEMéx
Listas Ligadas

Los componentes de un nodo se llaman campos. Un nodo tiene al menos un campo dato o valor y un enlace (indicador o
puntero) con el siguiente nodo. El campo enlace apunta (proporciona la dirección o referencia de) al siguiente nodo de la lista.
El último nodo de la lista enlazada, por convenio, se suele representar por un enlace con la palabra
reservada null (nulo), una barra inclinada (/)

#SomosUAEMéx
Listas Ligadas
La implementación de una lista enlazada depende del lenguaje. C, C++, Pascal, PL/I, Ada y Modula-2 utilizan simplemente como
enlace una variable puntero, o puntero (apuntador). Java no dispone de punteros, por consiguiente, resuelve el problema de
forma diferente y almacena en el enlace la referencia al siguiente objeto nodo.
Un puntero (apuntador) es una variable cuyo valor es la dirección o posición de otra variable.
En las listas enlazadas no es necesario que los elementos de la lista sean almacenados en posiciones físicas adyacentes, ya que
el puntero indica dónde se encuentra el siguiente elemento de la lista

#SomosUAEMéx
Listas Ligadas
Una lista enlazada sin ningún elemento se llama lista vacía. Su puntero inicial o de cabecera tiene el valor nulo
(null).
Una lista enlazada se define por:
• El tipo de sus elementos: campo de información (datos) y campo enlace (puntero o apuntador).
• Un puntero de cabecera que permite acceder al primer elemento de la lista.
• Un medio para detectar el último elemento de la lista: puntero nulo (null).

#SomosUAEMéx
Listas Ligadas
EJEMPLO
El director de un hotel desea registrar el nombre de cada cliente a medida de su llegada al hotel, junto con el nú-
mero de habitación que ocupa el antiguo libro de entradas. También desea disponer en cualquier momento de
una lista de sus clientes por orden alfabético. Ya que no es posible registrar los clientes alfabética y cronológicamente en la
misma lista, se necesita o bien listas alfabéticas independientes o bien añadir punteros a la lista existente, con lo que sólo
se utilizará una única lista. El método manual en el libro requería muchos cruces y reescrituras; sin embargo, una
computadora mediante un algoritmo adecuado lo realizará fácilmente.
Por cada nodo de la lista el campo de información o datos tiene dos partes: nombre del cliente y número de habitación. Si x
es un puntero a uno de estos nodos, l[x].nombre y l[x].habitación representarán las dos partes del
campo información.

#SomosUAEMéx
Listas Ligadas
Para procesar una lista enlazada se necesitan las siguientes informaciones:
• Primer nodo (cabecera de la lista).
• El tipo de sus elementos.
Las operaciones que normalmente se ejecutan con listas incluyen:
1. Recuperar información de un nodo específico (acceso a un elemento).
2. Encontrar el nodo que contiene una información específica (localizar la posición de un elemento dado).
3. Insertar un nuevo nodo en un lugar específico de la lista.
4. Insertar un nuevo nodo en relación a una información particular.
5. Borrar (eliminar) un nodo existente que contiene información específica.

#SomosUAEMéx
Pilas
Una pila (stack) es un tipo especial de lista lineal en la que la inserción y borrado de nuevos elementos se realiza
sólo por un extremo que se denomina cima o tope (top).
La pila es una estructura con numerosas analogías en la vida real: una pila de platos, una pila de monedas, una
pila de cajas de zapatos, una pila de camisas, una pila de bandejas

#SomosUAEMéx
Pilas
Dado que las operaciones de insertar y eliminar se realizan por un solo extremo (el superior), los elementos sólo pueden
eliminarse en orden inverso al que se insertan en la pila. El último elemento que se pone en la pila es el primero que se puede
sacar; por ello, a estas estructuras se les conoce por el nombre de LIFO (last-in, first-out, último en entrar, primero en salir).
Las operaciones más usuales asociadas a las pilas son:

"push" Meter, poner o apilar: operación de insertar un elemento en la pila.


"pop" Sacar, quitar o desapilar: operación de eliminar un elemento de la pila.

#SomosUAEMéx
Pilas
Idealmente una pila puede contener un número ilimitado de elementos y no producir nunca desbordamiento. En
la práctica, sin embargo, el espacio de almacenamiento disponible es finito. La codificación de una pila requiere un
cierto equilibrio, ya que si la longitud máxima de la pila es demasiado grande se gasta mucha memoria, mientras que
un valor pequeño de la longitud máxima producirá desbordamientos frecuentes.
Para trabajar fácilmente con pilas es conveniente diseñar subprogramas de poner (push) y quitar (pop) elementos.
También es necesario con frecuencia comprobar si la pila está vacía; esto puede conseguirse con una variable o fun-
ción booleana VACIA, de modo que cuando su valor sea verdadero la pila está vacía y falso en caso contrario

#SomosUAEMéx
Pilas
Aplicación
Las pilas son utilizadas ampliamente para solucionar una amplia variedad de problemas. Se utilizan en compiladores,
sistemas operativos y en programas de aplicación. Veamos algunas de las aplicaciones más interesantes.
Cuando dentro de un programa se realizan llamadas a subprogramas, el programa principal debe recordar el lugar
donde se hizo la llamada, de modo que pueda retornar allí cuando el subprograma se haya terminado de ejecutar.
Supongamos que tenemos tres subprogramas llamados A, B y C, y supongamos también que A invoca a B y B
invoca a C. Entonces B no terminará su trabajo hasta que C haya terminado y devuelto su control a B. De modo
similar, A es el primero que arranca su ejecución, pero es el último que la termina, tras la terminación y retorno
de B.
Esta operación se consigue disponiendo las direcciones de retorno en una pila.

#SomosUAEMéx
Pilas
Aplicaciones
Las pilas se usan en:
• Administración de llamadas a funciones.
• Equilibrio de paréntesis (corchetes y llaves) en expresiones.
• Pilas de recursividad.
• Equivalencias entre notaciones infijas, postfijas y prefijas.
• Historiales de cambios (deshacer).
• Torres de Hanoi, etc.
Una estructura tipo pila es util cuando el orden de los datos se
necesita invertir, porque es el orden natural de su
funcionamiento.

#SomosUAEMéx
Colas
Las colas son otro tipo de estructura lineal de datos similar a las pilas, diferenciándose de ellas en el modo de
insertar/eliminar elementos.
Una cola es una estructura lineal de datos en la que las eliminaciones se realizan al principio de la lista, frente (front), y las
inserciones se realizan en el otro extremo, final (rear). En las colas el elemento que entró el primero sale también el
primero; por ello se conoce como listas FIFO (first-in, first-out, “primero en entrar, primero en salir”). Así, pues, la diferencia
con las pilas reside en el modo de entrada/salida de datos; en las colas las inserciones se realizan al final de la lista, no al
principio. Por ello las colas se usan para almacenar datos que necesitan ser procesados según el orden de llegada.

#SomosUAEMéx
Colas

En la vida real se tienen ejemplos numerosos de colas: la cola de un autobús, la cola de un cine, una caravana de
coches en una calle, etc. En todas ellas el primer elemento (pasajero, coche, etc.) que llega es el primero que sale.
En informática existen también numerosas aplicaciones de las colas. Por ejemplo, en un sistema de tiempo compartido
suele haber un procesador central y una serie de periféricos compartidos: discos, impresoras, etc. Los recursos se
comparten por los diferentes usuarios y se utiliza una cola para almacenar los programas o peticiones de los
diferentes usuarios que esperan su turno de ejecución. El procesador central atiende normalmente por riguroso
orden de llamada del usuario; por tanto, todas las llamadas se almacenan en una cola.

#SomosUAEMéx
Colas
Representacion
Las colas se pueden representar por listas enlazadas o por arrays.
Se necesitan dos punteros: frente(f) y final(r), y la lista o array de n elementos (LONGMAX

#SomosUAEMéx
Colas

#SomosUAEMéx
Colas
Representacion
Las colas se pueden representar por listas enlazadas o por arrays.
Se necesitan dos punteros: frente(f) y final(r), y la lista o array de n elementos (LONGMAX

#SomosUAEMéx
Estructuras de datos NO lineales
En estas estructuras cada elemento puede tener diferentes “siguientes” elementos, que introduce el concepto de
estructuras de bifurcación.Las estructuras de datos no lineales son árboles y grafos. A estas estructuras se les denomina
también estructuras multienlazadas.

#SomosUAEMéx
Arboles

El árbol es una estructura de datos fundamental en informática, muy utilizada en todos sus campos, porque se adapta a la
representación natural de informaciones homogéneas organizadas y de una gran comodidad y rapidez de manipulación. Esta
estructura se encuentra en todos los dominios (campos) de la informática, desde la pura algorítmica(métodos de clasificación y
búsqueda...) a la compilación (árboles sintácticos para representar las expresiones o producciones posibles de un lenguaje) o
incluso los dominios de la inteligencia artificial (árboles de juegos, árboles de decisiones, de resolución, etc.).

#SomosUAEMéx
Arboles

La representación y terminología de los árboles se realiza con las típicas notaciones de las relaciones familiares
en los árboles genealógicos: padre, hijo, hermano, ascendente, descendiente, etc.

#SomosUAEMéx
Arboles
Las definiciones a tener en cuenta son:
• Raíz del árbol. Todos los árboles que no están vacíos tienen un único nodo raíz. Todos los demás elementos o
nodos se derivan o descienden de él. El nodo raíz no tiene padre, es decir, no es el hijo de ningún elemento.
• Nodo, son los vértices o elementos del árbol.
• Nodo terminal u hoja (leaf node) es aquel nodo que no contiene ningún subárbol (los nodos terminales u hojas
del árbol son E, F, K, L, H y J).
• A cada nodo que no es hoja se asocia uno o varios subárboles llamados descendientes (offspring) o hijos. De
igual forma, cada nodo tiene asociado un antecesor o ascendiente llamado padre.
• Los nodos de un mismo padre se llaman hermanos.
• Los nodos con uno o dos subárboles —no son hojas ni raíz— se llaman nodos interiores o internos.
• Una colección de dos o más árboles se llama bosque (forest).
• Todos los nodos tienen un solo padre —excepto el raíz— que no tiene padre.
• Se denomina camino el enlace entre dos nodos consecutivos y rama es un camino que termina en una hoja.
• Cada nodo tiene asociado un número de nivel que se determina por la longitud del camino desde el raíz al nodo
específico. Por ejemplo, en el árbol de la Figura 13.2.
Nivel 0 A
Nivel 1 B, C, D
Nivel 2 E, F, G, H, I, J
Nivel 3 K, L
• La altura o profundidad de un árbol es el número máximo de nodos de una rama. Equivale al nivel más alto
de los nodos más uno. El peso de un árbol es el número de nodos terminales. La altura y el peso del árbol de

#SomosUAEMéx
Arboles

#SomosUAEMéx
Árbol Binario
Existe un tipo de árbol denominado árbol binario que puede ser implementado fácilmente en una computadora.
Un árbol binario es un conjunto finito de cero o más nodos, tales que:
• Existe un nodo denominado raíz del árbol.
• Cada nodo puede tener 0, 1 o 2 subárboles, conocidos como subárbol izquierdo y subárbol derecho.

#SomosUAEMéx
Árbol Binario
para localizar un elemento en un array se podía realizar una búsqueda lineal; sin embargo, si el array era grande, una
búsqueda lineal era ineficaz por su lentitud, especialmente si el elemento no estaba en el array, ya que requería la lectura
completa del array. Se ganaba tiempo si se clasificaba el array y se utilizaba una búsqueda binaria. Sin embargo, en un
proceso de arrays las inserciones y eliminaciones son continuas, por lo que esto se hará complejo en cualquier método.
En los casos de gran número de operaciones sobre arrays o listas, lo que se necesita es una estructura donde los
elementos puedan ser eficazmente localizados, insertados o borrados

#SomosUAEMéx
Grafos
Los grafos son otra estructura de datos no lineal y que tiene gran número de aplicaciones. El estudio del análisis de
grafos ha interesado a los matemáticos durante siglos y representa una parte importante de la teoría combinatoria en
matemáticas. Aunque la teoría de grafos es compleja y amplia, en esta sección se realizará una introducción a la
teoría de grafos y a los algoritmos que permiten su solución por computadora.

#SomosUAEMéx
Grafos
Los grafos nos pueden ayudar a resolver problemas como éste. Supóngase que ciertas carreteras del norte del
Estado han sido bloqueadas por una reciente tormenta de nieve. ¿Cómo se puede saber si todas las ciudades de ese
Estado se pueden alcanzar por carretera desde la capital o si existen ciudades aisladas? Evidentemente existe la so-
lución del estudio de un mapa de carreteras; sin embargo, si existen muchas ciudades, la obtención de la solución
puede ser ardua y costosa en tiempo. Una computadora y un algoritmo adecuado de grafos solucionarán fácilmente
el problema

Un grafo ponderado o con peso es aquel en el que cada arista o arco tiene un valor. Los grafos con peso suelen
ser muy importantes, ya que pueden representar situaciones de gran interés; por ejemplo, los vértices pueden ser
ciudades y las aristas distancias o precios del pasaje de ferrocarril o avión entre ambas ciudades. Eso nos puede per-
mitir calcular cuál es el recorrido más económico entre dos ciudades, sumando los importes de los billetes de las
ciudades existentes en el camino y así poder tomar una decisión acertada respecto al viaje e incluso estudiar el po-
sible cambio de medio de transporte: avión o automóvil, si éstos resultan más baratos.
La solución de encontrar el camino más corto, el de menor precio o más económico entre dos vértices de un
grafo, es un algoritmo importante en la teoría de grafos. (El algoritmo de Dijkstra es un algoritmo tipo para la solu-
ción de dichos problemas.)

#SomosUAEMéx
Joyanes, LUIS. (2008). Fundamentos de Programacion. Recuperado el 20 de marzo de
2021 de
https://www.academia.edu/41489183/Fundamentos_de_programaci%C3%B3n_4ta_E
dici%C3%B3n_Luis_Joyanes_Aguilar

También podría gustarte