Listas circulares

Solo disponible en BuenasTareas
  • Páginas : 9 (2097 palabras )
  • Descarga(s) : 0
  • Publicado : 21 de agosto de 2012
Leer documento completo
Vista previa del texto
las listas circulares
1.
2.
3.
4.
5.

Requisitos
I. Introducción
II Definición
III. La construcción del modelo de un elemento de la lista
IV. Operaciones sobre las listas circulares
1. A. Inicialización
2. B. Inserción de un elemento en la lista
1. 1. Inserción en una lista vacía
2. 2. Inserción en una lista no vacía
3. C. Eliminación de un elemento en la lista
1. 1. Eliminaciónal inicio de la lista
2. 2. Eliminación en una lista con un solo elemento
4. D. Mostrar la lista
1. 1. Mostrar la lista (del 1er al último elemento)
2. 2. Mostrar la lista sin una condición para detenerse (indefinidamente )
5. E. Destrucción de la lista
6. V. Ejemplo completo
1. lista_circ.h
2. lista_circ_function.h
3. lista_circ.c
7. VI. Ver también
8. Véase también: Listas circularesen c

Requisitos
Los tipos de datos
Las estructuras
El uso de typedef
Los punteros
La función usuario
Las listas enlazadas simples
Las listas doblemente enlazadas

I. Introducción
El objetivo de este artículo es que el lector comprenda lo que son las listas circulares

II Definición
La lista circular es una especie de lista enlazada simple o doblemente enlazada, pero que posee unacaracterística adicional para el desplazamiento dentro de la lista, “ésta no tiene fin”
Para que la lista sea sin fin, el puntero siguiente del último elemento apuntará hacia el 1er elemento de la
lista en lugar de apuntar al valor NULL, como hemos visto en el caso de listas enlazadas simples o
doblemente enlazadas
En las listas circulares, nunca se llega a una posición en la que ya no seaposible desplazarse.
Cuando se llegue al último elemento, el desplazamiento volverá a comenzar desde el primer elemento.

III. La construcción del modelo de un elemento de la lista
Para definir un elemento de la lista, el tipo struct será utilizado.
El elemento de la lista contendrá un campo dato y un puntero siguiente.
El puntero siguiente debe ser del mismo tipo que el elemento, en casocontrario no podrá apuntar hacia el
elemento.
El puntero siguiente permitirá el acceso hacia el próximo elemento.

typedef struct ElementoLista {
char *dato;
struct ElementoLista *siguiente;
}Elemento;

Para tener el control de l alista es preferible guardar ciertos elementos: el primer elemento, el último elemento,
el número de elementos.
Para ello, otra estructura será utilizada (no esobligatorio, pueden ser utilizadas variables)

typedef struct ListaIdentificar {
Elemento *inicio;
Elemento *fin;
int tamaño;
}Lista;

El punter inicio contendrá la dirección del primer elemento de la lista.
El puntero fin contendrá la dirección del ultimo elemento de la lista.
La variable tamaño contiene el número de elementos.
Cualquiera que sea la posición en la lista, los punterosinicio y fin siempre apuntaran hacia el 1er y el último
elemento respectivamente.
El campo tamaño contendrá el número de elementos de la lista cualquiera sea la operación efectuada sobre la
lista.

IV. Operaciones sobre las listas circulares
A. Inicialización
Modelo de la función

void inicialización (Lista *lista);

Esta operación debe ser hecha antes de cualquier otra operación sobre lalista.
Inicializa el puntero inicio y el puntero fin con el puntero NULL, y el tamaño con el valor 0.
La función:

void inicialización (Lista *lista){
lista->inicio = NULL;
lista->fin = NULL;
tamaño = 0;
}

B. Inserción de un elemento en la lista
A continuación el algoritmo de inserción y registro de los elementos:



declaración del elemento a insertar



asignación de lamemoria para el nuevo elemento



rellenar el contenido del campo de datos



actualizar los punteros hacia el 1er y ultimo elemento si es necesario.



Caso particular: en una lista con un solo elemento, el 1er elemento es al mismo tiempo el ultimo.



Actualizar el tamaño de la lista.

1. Inserción en una lista vacía
Modelo de la función:

int ins_lista_circ_vacia(Lista...
tracking img