List As

  • Uploaded by: JASNEYKA
  • 0
  • 0
  • May 2020
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View List As as PDF for free.

More details

  • Words: 1,788
  • Pages: 24
República Bolivariana de Venezuela Ministerio del Poder Popular para la Defensa Universidad Nacional Experimental Politécnica de la Fuerza Armada. UNEFA- APURE

LISTAS Tutor: Laryenso Gutiérrez

Autores: García Jasneyka C.I. 19.405.985 España Silvia C.I. 18.727.135

San Fernando de Apure, Julio de 2009.

CONTENIDO

DEFINICIÓN DE LISTA LISTAS SIMPLEMENTE ENCADENADAS LISTAS ABIERTAS

Declaraciones de Tipos para Manejar Listas en C Operaciones Básicas con Listas Localizar Elementos en una Lista Abierta Eliminar Elementos en una Lista Abierta Moverse a Través de una Lista Abierta Borrar una Lista Completa

LISTAS DOBLEMENTE ENLAZADAS

Declaraciones de Tipos para Manejar Operaciones Básicas con Listas Doblemente Enlazadas Buscar o Localizar un Elemento de una Lista Doblemente Enlazada Eliminar un Elemento de una lista Doblemente Enlazada

LISTAS CIRCULARES

Declaraciones de Tipos para Manejar Listas circulares en C Operaciones Básicas con Listas circulares Localizar Elementos en una Lista circulares Eliminar Elementos en una Lista circulares AUTORAS: JASNEYKA GARCIA ESPAÑA SILVIA

Hay dos desventajas serias con respecto a las estructuras estáticas de pilas y colas usando porque es posible que accedamos a una localidad de memoria de la cual no deseábamos cambiar su contenido.

LISTA

Estas desventajas son que tienen un espacio limitado de memoria y la otra desventaja es que es posible no ocupar toda la memoria disponible,

Sin embargo, hay una advertencia. Como regla general siempre hay que tener cuidado al Una solución es usar listas. manejar direcciones de Las listas son estructuras espacios de memoria, de datos que son dinámicas, esto significa que adquieren espacio y liberan espacio a AUTORAS: JASNEYKA GARCIA ESPAÑA SILVIA medida que se necesita.

LISTAS SIMPLEMENTE ENCADENADAS

AUTORAS: JASNEYKA GARCIA ESPAÑA SILVIA

LISTAS ABIERTAS El nodo típico para construir listas tiene esta forma:

AUTORAS: JASNEYKA GARCIA ESPAÑA SILVIA

Declaraciones de Tipos para Manejar Listas en C typedef struct _nodo { int dato; struct _nodo *siguiente; } tipoNodo; typedef tipoNodo *pNodo;

Es muy importante que nuestro programa nunca pierda el valor del puntero al primer elemento, ya que si no existe ninguna copia de ese valor, y se pierde, será imposible

AUTORAS: JASNEYKA GARCIA ESPAÑA SILVIA

Insertar Elementos en una Lista Abierta

Operaciones Básicas con Listas Insertar un Elemento en la Primera Posición de una Lista:

AUTORAS: JASNEYKA GARCIA ESPAÑA SILVIA

Este es, evidentemente, el caso más sencillo. Partiremos de que ya tenemos el nodo a insertar y, por supuesto un puntero que apunte a él, además el

Localizar Elementos en una Lista Abierta A menudo se recorre a una lista, ya sea buscando un valor particular o un nodo concreto. Las listas abiertas sólo pueden recorrerse en un sentido, ya que cada nodo apunta al siguiente, pero no se puede obtener, por ejemplo, un puntero al nodo

Para recorrer una lista procederemos siempre del mismo modo, usaremos un puntero auxiliar como índice: Asignamos al puntero índice el valor de Lista. Abrimos un bucle que al menos debe tener una condición, que el índice no sea NULL. Dentro del bucle asignamos al índice el valor del nodo siguiente al AUTORAS: JASNEYKA GARCIA ESPAÑA SILVIA índice actual.

typedef struct _nodo { int dato; struct _nodo *siguiente; } tipoNodo; typedef tipoNodo *pNodo; typedef tipoNodo *Lista; ... pNodo indice; ... indice = Lista; while(indice) { printf("%d\n", indice->dato); indice = indice>siguiente; }

O P E R A C I O N E S B Á S I C A s

Eliminar un Nodo Cualquiera de una Lista Abierta:

Hacemos que nodo apunte al nodo que queremos borrar. Ahora, asignamos como nodo siguiente del nodo anterior, el siguiente al que queremos eliminar: anterior->siguiente = nodo->siguiente. Eliminamos la memoria asociada al nodo que queremos eliminar.

Eliminar Elementos en una Lista Abierta 

Hacemos que nodo apunte al primer elemento de la lista, es decir a Lista. Asignamos a Lista la dirección del segundo nodo de la lista: Lista->siguiente. Liberamos la memoria asignada al primer nodo, el que queremos eliminar.

AUTORAS: JASNEYKA GARCIA ESPAÑA SILVIA

Saber si una Lista está Vacía:

Primer Elemento de una Lista:

Moverse a Través de una Lista Abierta Último Elemento de una Lista:

Elemento Siguiente a uno Cualquiera:

Elemento Anterior a uno Cualquiera:

AUTORAS: JASNEYKA GARCIA ESPAÑA SILVIA

struct nodo { int dato; struct nodo *siguiente; struct nodo *anterior; };

Una lista doblemente enlazada es una lista lineal en la que cada nodo tiene dos enlaces, uno al nodo siguiente, y otro al anterior.

LISTAS DOBLEMENTE ENLAZADAS   El nodo típico es el Las listas doblemente mismo que para enlazadas no necesitan un construir las listas, nodo especial para acceder a salvo que tienen ellas, pueden recorrerse en otro puntero al ambos sentidos a partir de nodo anterior: cualquier nodo, esto es porque   a partir de cualquier nodo, siempre es posible alcanzar cualquier nodo de la lista, AUTORAS: JASNEYKA GARCIA ESPAÑA SILVIA hasta que se llega a uno de los

typedef struct _nodo { int dato; struct _nodo *siguiente; struct _nodo *anterior; } tipoNodo; typedef tipoNodo *pNodo; typedef tipoNodo *Lista;

El movimiento a través de listas doblemente enlazadas es más sencillo, y como veremos las operaciones de búsqueda, inserción y borrado, también tienen más ventajas. Declaraciones

Tipos para Manejar

También es posible, y potencialmente útil, crear listas doblemente enlazadas y circulares.

de tipoNodo, es el tipo para declarar nodos, evidentemente. pNodo, es el tipo para declarar punteros a un nodo.

Lista, es el tipo para declarar listas abiertas doblemente AUTORAS: JASNEYKA GARCIA ESPAÑA SILVIA

Operaciones Básicas con Listas Doblemente Enlazadas

AñADIR ELEMENTO EN UNA LISTA DOBLEMENTE ENLAZADA VACíA:

INSERTAR UN ELEMENTO EN LA PRIMERA POSICIóN DE LA LISTA

Partiremos de que ya tenemos el nodo a insertar y, por supuesto un puntero que apunte a él, además el puntero que define la lista, que

lista apunta a nodo. lista->siguiente y lista->anterior AUTORAS: JASNEYKA GARCIA ESPAÑA SILVIA apunten a null.

O P E R A C I O N E S B Á S I C A s

nodo->siguiente debe apuntar a Lista>siguiente (NULL). Lista->siguiente debe apuntar a nodo. nodo->anterior apuntará a Lista.

El proceso es el siguiente: nodo->siguiente debe apuntar a Lista. nodo->anterior apuntará a Lista>anterior. Lista->anterior debe

INSERTAR UN ELEMENTO EN LA ÚLTIMA POSICIóN DE LA LISTA

Igual que en el caso anterior, partiremos de una lista no vacía, y de nuevo para simplificar, que Lista está apuntando AUTORAS: JASNEYKA GARCIA ESPAÑA SILVIA elemento de la al último

Pero parece que la aplicación más sencilla de listas doblemente enlazadas es hacer arrays dinámicos ordenados, donde buscar un elemento concreto a partir de cualquier otro es más

En muchos aspectos, una lista doblemente enlazada se comporta como dos listas abiertas que comparten los datos.

Buscar o Localizar un Elemento de una Lista Doblemente Enlazada Por supuesto, se pueden hacer listas doblemente enlazadas no ordenadas, existen cientos de problemas que pueden requerir de

Tenemos la ventaja de que podemos avanzar y retroceder desde cualquier nodo, sin necesidad de volver a uno de los extremos

AUTORAS: JASNEYKA GARCIA ESPAÑA SILVIA

Analizaremos cuatro casos diferentes: Eliminar el Único Nodo en una Lista Doblemente Enlazada

Eliminar un Elemento de una lista Doblemente Enlazada Eliminar el Último Nodo de una Lista Doblemente Enlazada

Eliminar el Primer Nodo de una Lista Doblemente Enlazada

AUTORAS: JASNEYKA GARCIA ESPAÑA SILVIA

Eliminar un Nodo de una Lista Doblemente Enlazada

De nuevo tenemos los dos casos posibles, que el nodo a borrar esté apuntado por Lista o que no. Si lo está, simplemente hacemos que Lista sea Lista->anterior, si no es NULL o Lista-

Eliminar un Nodo Intermedio de una Lista Doblemente Enlazada

De nuevo tenemos los dos casos posibles, que el nodo a borrar esté apuntado por Lista o que no. Si lo está, simplemente hacemos que Lista sea Lista>anterior o Lista-

AUTORAS: JASNEYKA GARCIA ESPAÑA SILVIA

LISTAS CIRCULAR ES

AUTORAS: JASNEYKA GARCIA ESPAÑA SILVIA

Declaraciones de Tipos para Manejar Listas Circulares en C Lista es el tipo para declarar listas, tanto abiertas como circulares. En el caso de las circulares, apuntará a un nodo cualquiera de la lista.

Los tipos que definiremos normalmente para manejar listas cerradas son los mismos que para

typedef struct _nodo A pesar de que las listas { circulares simplifiquen las int dato; struct operaciones sobre ellas, también _nodo *siguiente; introducen algunas } tipoNodo; typedef complicaciones. Por ejemplo, en tipoNodo un proceso de búsqueda, no es *pNodo;typedef tan sencillo dar por terminada la búsqueda cuando el elemento buscadoAUTORAS: no existe. JASNEYKA GARCIA ESPAÑA SILVIA

OPERACIONES BáSICAS CON LISTAS CIRCULARES A todos los efectos, las listas

circulares son como las listas abiertas en cuanto a las operaciones que se pueden realizar sobre ellas:

Añadir o insertar elementos. Buscar o localizar elementos. Borrar elementos. Moverse a través de la lista, siguiente. Cada una de éstas operaciones podrá tener varios casos especiales, por ejemplo, tendremos que tener en cuenta cuando se inserte un nodo en una lista vacía, o cuando se elimina el AUTORAS: JASNEYKA GARCIA ESPAÑA SILVIA

OPERACIONES BáSICAS CON LISTAS CIRCULARES Añadir Elemento en una Lista Circular Vacía Partiremos de que ya tenemos el nodo a insertar y, por supuesto un puntero que apunte a él, además el Añadir Elemento en una Lista puntero que define la lista, que valdrá NULL: Circular No Vacía

El proceso es muy simple, bastará con que: lista apunta a nodo. lista->siguiente apunte a nodo. AUTORAS: JASNEYKA GARCIA ESPAÑA SILVIA

OPERACIONES BáSICAS CON LISTAS CIRCULARES BUSCAR O LOCALIZAR UN ELEMENTO DE UNA LISTA CIRCULAR

A la hora de buscar elementos en una lista circular sólo hay que tener una precaución, es necesario almacenar el puntero del nodo en que se empezó la búsqueda, para poder detectar el caso en que no exista el valor que se busca. Por lo demás, la búsqueda es igual que en el caso de las listas abiertas, salvo que podemos empezar en cualquier punto de la lista. AUTORAS: JASNEYKA GARCIA ESPAÑA SILVIA

OPERACIONES BáSICAS CON LISTAS CIRCULARES Eliminar un Elemento de una Lista Circular

Esto elimina la excepción del segundo caso, ya que lista nunca será el nodo a eliminar, salvo que sea el único nodo de la

Para ésta operación podemos encontrar tres casos diferentes: Eliminar un nodo cualquiera, que no sea el apuntado por lista. Eliminar el nodo apuntado por lista, y que no sea el único nodo. En el primer caso necesitamos Eliminar el único nodo de la localizar el nodo anterior al que queremos borrar. Como el principio de la lista puede ser cualquier nodo, haremos que sea precisamente lista quien apunte al nodo anterior al que queremos AUTORAS: JASNEYKA GARCIA ESPAÑA SILVIA

Gracias por su atención Gracias por su

Graciasatención por su atención Gracias por su atención Gracias por su atención Gracias por su atención Gracias por su atención

Cuando se nos otorga la enseñanza se debe percibir como un valioso regalo y no como una dura tarea.

AUTORAS: JASNEYKA GARCIA ESPAÑA SILVIA

Pensamientos de Albert Einstein

Related Documents

List As
April 2020 24
List As
June 2020 5
List As
May 2020 10
List As
November 2019 17
List As
May 2020 12
List As
April 2020 11

More Documents from ""

List As
May 2020 12
Arboles
May 2020 15