2. Definición y Características La forma más simple de estructura dinámica es la lista abierta o vinculada. Una lista es una colección de elementos llamados generalmente nodos, se relaciona por punteros o direcciones a otros nodos. Un nodo lo representaremos de la siguiente manera: DATO
3. El dato es la información que se necesite para el proceso y la liga es de tipo puntero y es utilizada para establecer el enlace con otros nodos. En esta forma los nodos se organizan de modo que cada uno apunta al siguiente, y el último no apunta a nada, es decir, el puntero del nodo siguiente vale NULL. DATO DATO
4. En las listas abiertas existe un nodo especial: el primero. Normalmente diremos que nuestra lista es un puntero a ese primer nodo y llamaremos a ese nodo la cabeza de la lista. Eso es porque mediante ese único puntero podemos acceder a toda la lista. NULL Lista DATO DATO DATO DATO
5. El nodo típico para construir listas tiene esta forma: struct nodo { int dato; struct nodo *siguiente; };
6. Operaciones básicas Añadir o insertar elementos. Buscar o localizar elementos. Borrar elementos. Moverse a través de una lista, anterior, siguiente, primero.
7. Insertar elementos en una lista Insertar un elemento en una lista vacía Lista NULL Nodo 1 2 DATO NULL DATO Lista
8. Insertar un elemento en la última posición de una lista Lista …… NULL Insertar al final Nodo DATO Lista …… NULL DATO DATO DATO DATO DATO DATO DATO DATO 3 1 2 ultimo nodo DATO Nodo NULL
9. Moverse a través de una lista Para recorrer una lista procederemos siempre del mismo modo, usaremos un puntero auxiliar como índice: Asignamos al puntero índice el valor de Lista. Abriremos un ciclo que al menos debe tener una condición, que el índice no sea NULL. Dentro del ciclo asignaremos al índice el valor del nodo siguiente al índice actual.
10. Eliminar elementos en una lista Eliminar el primer nodo de una lista Lista …… Nodo Eliminar el primer nodo 2 3 DATO DATO DATO DATO …… Lista Lista 1 Nodo
11. Eliminar un nodo cualquiera de una lista Lista …… Nodo Anterior 2 3 …… Lista DATO DATO DATO DATO DATO DATO DATO DATO 1 Nodo Anterior Anterior
12. Ejemplo 1 Construir un programa que maneje una lista ligada con las siguientes características: Permita agregar un elemento al final de la lista. Eliminar un elemento. Mostrar toda la lista.
14. Definición El concepto de pila es que aquel elemento que se pueda agregar o sacar de un arreglo o lista sea a través de un solo extremo, también son llamados LIFO (Last In, FirstOut). La pila debe de tener un valor máximo de elementos conocido y un valor de elementos cargados para poder establecer control de posición y limites. Último elemento Max elementos Cantidad cargada Primer elemento
15. Ejemplo 2 Desarrollar un programa que tenga las siguientes características: Una estructura (llamada pilcol) y que contenga: Un dato para la posición (tipo entero) Un arreglo para la pila (tipo char, tamaño 10) Una función para agregar un elemento a la pila, la cual llamaremos mete_pila. Una función para obtener un elemento de la pila, la cual llamaremos saca_pila.
17. Definición Es una lista de elementos en la que estos se introducen por un extremo y se eliminan por el otro. Otro modo de llamar a las colas es como arreglos FIFO (First In-FirstOut). ENTRA SALE ULTIMO PRIMERO
18. Ejemplo 3 Desarrollar un programa que tenga las siguientes características: Una estructura (llamada pilcol) y que contenga: Un dato para la posición (tipo entero) Un arreglo para la pila (tipo char, tamaño 10) Una función para agregar un elemento a la cola, la cual llamaremos mete_cola. Una función para obtener un elemento de la cola, la cual llamaremos saca_cola.