listas como estructura de datos

21
REPÚBLICA BOLIVARIANA DE VENEZUELA MINISTERIO PARA EL PODER POPULAR DE LA EDUCACIÓN SUPERIOR I.U.T. “ANTONIO JOSÉ DE SUCRE” SAN FELIPE – YARACUY LISTAS. (COMO ESTRUCTURA DE DATOS). NEIR NELO. C.I; 17.992.474 III SEM. INFORMÁTICA ESC. 78

Upload: nano-06

Post on 24-Dec-2014

333 views

Category:

Education


2 download

DESCRIPTION

Listas como estructura de datos..

TRANSCRIPT

Page 1: Listas como estructura de datos

REPÚBLICA BOLIVARIANA DE VENEZUELA

MINISTERIO PARA EL PODER POPULAR DE LA EDUCACIÓN SUPERIOR

I.U.T. “ANTONIO JOSÉ DE SUCRE”

SAN FELIPE – YARACUY

LISTAS.

(COMO ESTRUCTURA DE DATOS).

NEIR NELO.

C.I; 17.992.474

III SEM. INFORMÁTICA ESC. 78

PROCESAMIENTO DE DATOS.

FEBRERO, 2014

Page 2: Listas como estructura de datos

ÍNDICE.

INTRODUCCIÓN._________________________________________________________2

Listas (Como estructura de datos)._____________________________________________4

Características.____________________________________________________________6

Tipos de listas._____________________________________________________________6

Tipos de listas enlazadas_________________________________________________________6

Listas enlazadas lineales_________________________________________________________6

Listas simples enlazadas_________________________________________________________7

Listas doblemente enlazadas_____________________________________________________7

Listas enlazadas circulares.______________________________________________________7

Listas enlazadas simples circulares.________________________________________________8

Listas enlazadas doblemente circulares.____________________________________________8

Usos de listas._____________________________________________________________8

Listas simples._____________________________________________________________8

Listas enlazadas.___________________________________________________________9

Listas circulares___________________________________________________________9

Operaciones con listas: creación, inserción, supresión.___________________________10

Operaciones sobre listas enlazadas._______________________________________________10

CONCLUSIÓN.___________________________________________________________13

REFERENCIAS.__________________________________________________________14

Page 3: Listas como estructura de datos

INTRODUCCIÓN.

La presente investigación se refiere al tema de listas sobre estructura de datos en las cuales

podemos definirlas de una manera simple como las listas son una sucesión de cero o más

elementos.

Esta es una definición muy simple y que no aclara demasiado en términos informáticos, así

que profundizaremos un poco más.

Hay varios tipos de listas, las hay enlazadas, no enlazadas, ordenadas y no ordenadas.

Nosotros vamos a estudiar las listas enlazadas, tanto ordenadas como no ordenadas.

La diferencia que existe entre las listas enlazadas y las no enlazadas es que las enlazadas

utilizan punteros, es decir, asignación dinámica de memoria, lo que optimiza la gestión de

la misma. Una lista no enlazada es un simple array, y por lo tanto es un bloque contiguo de

memoria, mientras que una lista enlazada es un conjunto de nodos que no tienen porque

ocupar posiciones contiguas de memoria.

La diferencia entre listas ordenadas y no ordenadas es obvia, las ordenadas mantienen

cierto orden entre sus elementos.

A partir de ahora nos centraremos en las listas enlazadas no ordenadas.

Una lista es una sucesión de nodos en la que a partir de un nodo se puede acceder al que

ocupa la siguiente posición en la lista. Esta característica nos indica que el acceso a las

listas es secuencial y no indexado, por lo que para acceder al último elemento de la lista hay

que recorrer los n-1 elementos previos ( n es el tamaño de la lista).

Page 4: Listas como estructura de datos

LISTAS (COMO ESTRUCTURA DE DATOS).

En Ciencias de la Computación, una lista es una de las estructuras de

datos fundamentales, y puede ser usada para implementar otras estructuras de datos.

Consiste en una secuencia de nodos, en los que se guardan campos de datos arbitrarios y

una o dos referencias, enlaces o punteros al nodo anterior o posterior. El principal beneficio

de las listas enlazadas respecto a los vectores convencionales es que el orden de los

elementos enlazados puede ser diferente al orden de almacenamiento en la memoria o el

disco, permitiendo que el orden de recorrido de la lista sea diferente al de almacenamiento.

Una lista enlazada es un tipo de dato autorreferenciado porque contienen un puntero

o enlace (en inglés link, del mismo significado) a otro dato del mismo tipo. Las listas

enlazadas permiten inserciones y eliminación de nodos en cualquier punto de la lista en

tiempo constante (suponiendo que dicho punto está previamente identificado o localizado),

pero no permiten un acceso aleatorio. Existen diferentes tipos de listas enlazadas: listas

enlazadas simples, listas doblemente enlazadas, listas enlazadas circulares y listas enlazadas

doblemente circulares.

Las listas enlazadas pueden ser implementadas en muchos lenguajes. Lenguajes

tales como Lisp y Scheme tiene estructuras de datos ya construidas, junto con operaciones

para acceder a las listas enlazadas. Lenguajes imperativos u orientados a objetos tales

como C o C++ y Java, respectivamente, disponen de referencias para crear listas enlazadas.

Las listas enlazadas fueron desarrolladas en 1955-56 por Cliff Shaw y Herbert

Simon en RAND Corporation, como la principal estructura de datos para su Lenguaje de

Procesamiento de la Información (IPL). IPL fue usado por los autores para desarrollar

varios programas relacionados con la inteligencia artificial, incluida la Máquina de la

Teoría General, el Solucionador de Problemas Generales, y un programa informático

de ajedrez. Se publicó en IRE Transactions on Information Theory en 1956, y en distintas

conferencias entre 1957-1959, incluida Proceedings of the Western Joint Computer en 1957

Page 5: Listas como estructura de datos

y 1958, y en Information Processing (Procendents de la primera conferencia internacional

del procesamiento de la información de la Unesco) en 1959. El diagrama clásico actual, que

consiste en bloques que representan nodos de la lista con flechas apuntando a los sucesivos

nodos de la lista, apareció en Programming the Logic Theory Machine, de Newell y Shaw.

Newell y Simon fueron reconocidos por el ACM Turing Award en 1975 por “hacer

contribuciones básicas a la inteligencia artificial, a la psicología del conocimiento humano

y al procesamiento de las listas”.

El problema de los traductores del procesamiento natural del lenguaje condujo

a Victor Yngve del Instituto Tecnológico de Massachusetts (MIT) a usar listas enlazadas

como estructura de datos en su COMIT, lenguaje de programación para computadoras, que

investigó en el campo de la Lingüística computacional. Un informe de este lenguaje,

titulado “A programming language for mechanical translation” apareció en Mechanical

Translation en 1958.

LISP, el principal procesador de listas, fue creado en 1958. Una de las mayores

estructuras de datos de LISP es la lista enlazada.

En torno a los 60, la utilidad de las listas enlazadas y los lenguajes que utilizaban

estas estructuras como su principal representación de datos estaba bien establecida. Bert

Green, del Lincoln Laboratory del MIT, publicó un estudio titulado Computer languages

for symbol manipulation en IRE Transaction on Human Factors in Electronics en marzo de

1961 que resumía las ventajas de las listas enlazadas. Un posterior artículo, A Comparison

of list-processing computer languages de Bobrow y Raphael, aparecía enCommunications

of the ACM en abril de 1964.

Muchos sistemas operativos desarrollados por la empresa Technical Systems

Consultants (originalmente de West Lafayette Indiana y después de Raleigh, Carolina del

Norte) usaron listas enlazadas simples como estructuras de ficheros. Un directorio de

entrada apuntaba al primer sector de un fichero y daba como resultado porciones de la

localización del fichero mediante punteros. Los sistemas que utilizaban esta técnica

incluían Flex (para el Motorola 6800 CPU), mini-Flex (la misma CPU) y Flex9 (para el

Page 6: Listas como estructura de datos

Motorola 6809 CPU). Una variante desarrollada por TSC se comercializó a Smoke Signal

Broadcasting en California, usando listas doblemente enlazadas del mismo modo.

El sistema operativo TSS, desarrollado por IBM para las máquinas System 360/370,

usaba una lista doblemente enlazada para su catálogo de ficheros de sistema. La estructura

de directorios era similar a Unix, donde un directorio podía contener ficheros u otros

directorios que se podían extender a cualquier profundidad. Una utilidad fue creada para

arreglar problemas del sistema después de un fallo desde las porciones modificadas del

catálogo de ficheros que estaban a veces en memoria cuando ocurría el fallo. Los

problemas eran detectados por comparación de los enlaces posterior y anterior por

consistencia. Si el siguiente de ellos era corrupto y el anterior enlace del nodo infectado era

encontrado, el enlace posterior era asignado al nodo marcado con el enlace anterior.

Características.

La cantidad reservada de almacenamiento para la pila o la cola esfija. Vimos pilas y

colas alojadas en arreglos.

Problemas al insertar o eliminar elementos.

Una representación secuencial, refleja el orden lógico de los elementos físicamente

almacenados en la lista; el orden físico y lógico son los mismos.

Solución a los problemas de movimiento de los datos que se ha encontrado al

utilizar representaciones secuenciales.

Con la representación no secuencial el orden lógico y el orden físico de los

elementos no es necesario que sea el mismo.

El orden lógico se representa de tal forma que cada elemento apunta al siguiente

elemento, es decir, se encuentran ligados.

Page 7: Listas como estructura de datos

Tipos de listas.

Tipos de listas enlazadas Listas enlazadas lineales Listas simples enlazadas

La lista enlazada básica es la lista enlazada simple la cual tiene un enlace por nodo.

Este enlace apunta al siguiente nodo (o indica que tiene la dirección en memoria del

siguiente nodo) en la lista, o al valor NULL o a la lista vacía, si es el último nodo.

Listas doblemente enlazadas.

Un tipo de lista enlazada más sofisticado es la lista doblemente enlazada o lista

enlazadas de dos vías. Cada nodo tiene dos enlaces: uno apunta al nodo anterior, o apunta al

valor NULL si es el primer nodo; y otro que apunta al nodo siguiente, o apunta al

valor NULL si es el último nodo.

En algún lenguaje de muy bajo nivel, XOR-Linking ofrece una vía para

implementar listas doblemente enlazadas, usando una sola palabra para ambos enlaces,

aunque esta técnica no se suele utilizar.

Listas enlazadas circulares.

En una lista enlazada circular, el primer y el último nodo están unidos juntos. Esto

se puede hacer tanto para listas enlazadas simples como para las doblemente enlazadas.

Para recorrer una lista enlazada circular podemos empezar por cualquier nodo y seguir la

lista en cualquier dirección hasta que se regrese hasta el nodo original. Desde otro punto de

vista, las listas enlazadas circulares pueden ser vistas como listas sin comienzo ni fin. Este

tipo de listas es el más usado para dirigir buffers para “ingerir” datos, y para visitar todos

los nodos de una lista a partir de uno dado.

Una lista enlazada circular que contiene tres valores enteros.

Page 8: Listas como estructura de datos

Listas enlazadas simples circulares.

Cada nodo tiene un enlace, similar al de las listas enlazadas simples, excepto que el

siguiente nodo del último apunta al primero. Como en una lista enlazada simple, los nuevos

nodos pueden ser solo eficientemente insertados después de uno que ya tengamos

referenciado. Por esta razón, es usual quedarse con una referencia solamente al último

elemento en una lista enlazada circular simple, esto nos permite rápidas inserciones al

principio, y también permite accesos al primer nodo desde el puntero del último nodo. 

Listas enlazadas doblemente circulares.

En una lista enlazada doblemente circular, cada nodo tiene dos enlaces, similares a

los de la lista doblemente enlazada, excepto que el enlace anterior del primer nodo apunta

al último y el enlace siguiente del último nodo, apunta al primero. Como en una lista

doblemente enlazada, las inserciones y eliminaciones pueden ser hechas desde cualquier

punto con acceso a algún nodo cercano. Aunque estructuralmente una lista circular

doblemente enlazada no tiene ni principio ni fin, un puntero de acceso externo puede

establecer el nodo apuntado que está en la cabeza o al nodo cola, y así mantener el orden

tan bien como en una lista doblemente enlazada.

Usos de listas.Las listas se utilizan para organizar información. Pueden estar incluidas dentro de

un artículo, o conformar un anexo independiente.

Listas simples.La lista enlazada básica es la lista enlazada simple la cual tiene un enlace por nodo.

Este enlace apunta al siguiente nodo (o indica que tiene la dirección en memoria del

siguiente nodo) en la lista, o al valor NULL o a la lista vacía, si es el último nodo.

Listas enlazadas.Una lista enlazada o estructura ligada, es una estructura lineal que almacena una

colección de elementos generalmente llamados nodos, en donde cada nodo puede

Page 9: Listas como estructura de datos

almacenar datos y ligas a otros nodos. De esta manera los nodos pueden localizarse en

cualquier parte de la memoria, utilizando la referencia que lo relaciona con otro nodo

dentro de la estructura.

Las listas enlazadas son estructuras dinámicas que se utilizan para almacenar datos

que están cambiando constante mente. A diferencia de los vectores, las estructuras

dinámicas se expanden y se contraen haciéndolas más flexibles a la hora de añadir o

eliminar información.

Las listas enlazadas permiten almacenar información en posiciones de memoria que

no sean contiguas; para almacenar la información contienen elementos llamados nodos.

Estos nodos poseen dos campos uno para almacenar la información o valor del elemento y

otro para el enlace que determina la posición del siguiente elemento o nodo de la lista.

Listas circulares.

En una lista enlazada circular, el primer y el último nodo están unidos juntos. Esto

se puede hacer tanto para listas enlazadas simples como para las doblemente enlazadas.

Para recorrer una lista enlazada circular podemos empezar por cualquier nodo y seguir la

lista en cualquier dirección hasta que se regrese hasta el nodo original. Desde otro punto de

vista, las listas enlazadas circulares pueden ser vistas como listas sin comienzo ni fin. Este

tipo de listas es el más usado para dirigir buffers para “ingerir” datos, y para visitar todos

los nodos de una lista a partir de uno dado.

Una lista enlazada circular que contiene tres valores enteros.

Operaciones con listas: creación, inserción, supresión.

Operaciones sobre listas enlazadas.

Page 10: Listas como estructura de datos

Cuando se manipulan listas enlazadas, hay que tener cuidado con no usar valores

que hayamos invalidado en asignaciones anteriores. Esto hace que los algoritmos de

insertar y borrar nodos en las listas sean algo especiales. A continuación se expone

el pseudocódigo para añadir y borrar nodos en listas enlazadas simples, dobles y circulares.

Listas enlazadas lineales.

Listas simples enlazadas.

Nuestra estructura de datos tendrá dos campos. Vamos a mantener la variables

Primer Nodos que siempre apunta al primer nodo de tal lista, ó nulo para la lista

vacía.

record Node {

data // El dato almacenado en el nodo

next // Una referencia al nodo siguiente, nulo para el último nodo

}

record List {

Node PrimerNodo // Apunta al primer nodo de la lista; nulo para la lista vacía

}

El recorrido en una lista enlazada es simple, empezamos por el primer nodo y

pasamos al siguiente hasta que la lista llegue al final.

node := list.PrimerNodo

while node not null {

node := node.next

}

Page 11: Listas como estructura de datos

El siguiente código inserta un elemento a continuación de otro en una lista simple.

El diagrama muestra cómo funciona.

function insertAfter(Node node, Node newNode) {

newNode.next := node.next

node.next := newNode

}

Insertar al principio de una lista requiere una función por separado. Se necesita

actualizar PrimerNodo.

function insertBeginning(List list, Node newNode) {

newNode.next := list.firstNode

list.firstNode := newNode

}

De forma similar, también tenemos funciones para borrar un nodo dado ó para

borrar un nodo del principio de la lista. Ver diagrama.

Page 12: Listas como estructura de datos

function removeAfter(Node node) {

obsoleteNode := node.next

node.next := node.next.next

destroy obsoleteNode

}

function removeBeginning(List list) {

obsoleteNode := list.firstNode

list.firstNode := list.firstNode.next

destroy obsoleteNode

}

Advertimos que BorrarPrincipio pone PrimerNodo a nulo cuando se borra el último

elemento de la lista. Adjuntar una lista enlazada a otra puede resultar ineficiente a menos

que se guarde una referencia a la cola de la lista, porque si no tendríamos que recorrer la

lista en orden hasta llegar a la cola y luego añadir la segunda lista.

Page 13: Listas como estructura de datos

CONCLUSIÓN.

Como conclusión del presente trabajo de investigación sobre listas como estructuras de

datos, es importante mencionar que las listas son una de las estructuras de

datos fundamentales, y puede ser usada para implementar otras estructuras de datos.

Consiste en una secuencia de nodos, en los que se guardan campos de datos arbitrarios y

una o dos referencias, enlaces o punteros al nodo anterior o posterior. El principal beneficio

de las listas enlazadas respecto a los vectores convencionales es que el orden de los

elementos enlazados puede ser diferente al orden de almacenamiento en la memoria o el

disco, permitiendo que el orden de recorrido de la lista sea diferente al de almacenamiento.

La lista enlazada básica es la lista enlazada simple la cual tiene un enlace por nodo. Este

enlace apunta al siguiente nodo (o indica que tiene la dirección en memoria del siguiente

nodo) en la lista, o al valor NULL o a la lista vacía, si es el último nodo.

Las listas enlazadas son estructuras dinámicas que se utilizan para almacenar datos que

están cambiando constante mente. A diferencia de los vectores, las estructuras dinámicas se

expanden y se contraen haciéndolas más flexibles a la hora de añadir o eliminar

información.

Las listas enlazadas permiten almacenar información en posiciones de memoria que no sean

contiguas; para almacenar la información contienen elementos llamados nodos. Estos nodos

poseen dos campos uno para almacenar la información o valor del elemento y otro para el

enlace que determina la posición del siguiente elemento o nodo de la lista.

Page 14: Listas como estructura de datos

REFERENCIAS.

http://es.wikipedia.org/wiki/Lista_(inform%C3%A1tica)

National Institute of Standards and Technology (August 16, 2004). Definition of a

linked list. Retrieved December 14, 2004.

Antonakos, James L. and Mansfield, Kenneth C., Jr. Practical Data Structures Using

C/C++ (1999). Prentice-Hall. ISBN 0-13-280843-9, pp. 165–190

Collins, William J. Data Structures and the Java Collections Framework (2002,2005)

New York, NY: McGraw Hill. ISBN 0-07-282379-8, pp. 239–303

Cormen, Thomas H.; Leiserson, Charles E.; Rivest, Ronald L.; Stein,

Clifford Introductions to Algorithms (2003). MIT Press. ISBN 0-262-03293-7, pp. 205–

213, 501–505

McCarthy, John (1960). Recursive Functions of Symbolic Expressions and Their

Computation by Machine, Part I. Communications of the

ACM. [1] HTML DVI PDFPostScript

Donald Knuth. Fundamental Algorithms, Third Edition. Addison-Wesley, 1997. ISBN

0-201-89683-4. Sections 2.2.3–2.2.5, pp.254–298.

Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Clifford

Stein. Introduction to Algorithms, Second Edition. MIT Press and McGraw-Hill,

2001. ISBN 0-262-03293-7. Section 10.2: Linked lists, pp.204–209.

http://www.monografias.com/trabajos10/esda/esda.shtml

Ist Cepea Lima – Perú

Bermúdez Moncada, Isabel

Chumpitaz Heirisman, Roel

Page 15: Listas como estructura de datos

Salazar Beaumont Blanco, Enrique