Notas de estructura de datos con lenguaje C. Estructuras de datos dinámicas

Tamaño: px
Comenzar la demostración a partir de la página:

Download "Notas de estructura de datos con lenguaje C. Estructuras de datos dinámicas"

Transcripción

1 Listas Enlazadas que está prohibida su impresión y distribución.

2 Estructuras de datos dinámicas Contrariamente a las estructuras de datos estáticas (arreglos-listas, vectores y tablas- y estructuras) en las que su tamaño en memoria se establece durante la ejecución del programa, las estructuras de datos dinámicas crecen y se contraen a medida que se ejecuta el programa. tomada textualmente de varios libros por lo que está prohibida su impresión y distribución.

3 Estructuras lineales de elementos homogéneas (listas, tablas, vectores) y se utilizaban arreglos para implementar estas estructuras ( de tamaño fijo y predefinido el espacio a ocupar en memoria). De modo que cuando se desea añadir un nuevo elemento que rebase el tamaño prefijado del arreglo, no es posible realizar la operación sin que se produzca un error un tiempo de ejecución. Se debe a que los arreglos hacen un uso ineficiente de la memoria. tomada textualmente de varios libros por lo que está prohibida su impresión y distribución.

4 Gracias a la asignación dinámica de variables, se pueden implementar listas de modo que la memoria física utilizada se corresponda con el número de elementos de la tabla. Para ello se recurre a los apuntadores (punteros) que hacen un uso más eficiente de memoria Una lista enlazada es una colección o secuencia de elementos dispuestos uno detrás de otro, en la que cada elemento se conecta al siguiente elemento por un <<enlace>> o <<apuntador>>. tomada textualmente de varios libros por lo que está prohibida su impresión y distribución.

5 La idea básica consiste en construir una lista cuyos elementos llamados nodos se componen de dos partes o campos: la primera parte o campo contiene la información y es, por consiguiente, un valor de un tipo genérico (denominados Dato, Tipo Elemento, Info, etc) y la segunda parte o campo es un puntero (denominado enlace) que apunta al siguiente elemento de la lista. tomada textualmente de varios libros por lo que está prohibida su impresión y distribución.

6 Consiste en construir una lista cuyos elementos llamados nodos se componen de dos partes o campos: La primera parte o campo contiene la información y es, por consiguiente, un valor de un tipo genérico (denominados Dato, Tipo Elemento, Info, etc.). La segunda parte o campo es un puntero (denominado enlace) que apunta al siguiente elemento de la lista. tomada textualmente de varios libros por lo que está prohibida su impresión y distribución.

7 tomada textualmente de varios libros por lo que está prohibida su impresión y distribución.

8 Lista enlazada (representación simple) La representación gráfica más extendida es aquella que utiliza una caja (un rectángulo) con dos secciones en su interior. tomada textualmente de varios libros por lo que está prohibida su impresión y distribución.

9 En la primera sección se escribe el elemento o valor del dato y en la segunda sección, el enlace o apuntador mediante una flecha que sale de la caja y apunta al nodo siguiente. Lista enlazada (representación gráfica típica) tomada textualmente de varios libros por lo que está prohibida su impresión y distribución.

10 Nota: una lista enlazada consta de un número de elementos y cada elemento tiene dos componentes (campos), un puntero al siguiente elemento de la lista y un valor, que puede ser de cualquier tipo. Los enlaces representan por flechas para facilitar la comprensión de la conexión entre dos nodos; ello indica que el enlace tiene la dirección en memoria del siguiente nodo. tomada textualmente de varios libros por lo que está prohibida su impresión y distribución.

11 Los enlaces también sitúan los nodos en una secuencia. Los nodos forman una secuencia desde el primer elemento (e 1 ) al último elemento (e n ). El primer nodo se enlaza al segundo nodo, el segundo nodo se enlaza al tercer y así sucesivamente hasta llegar al último nodo. El nodo último ha de ser representado de forma diferente para significar que este nodo no se enlaza a ningún otro. tomada textualmente de varios libros por lo que está prohibida su impresión y distribución.

12 Diferentes representaciones gráficas del último nodo: tomada textualmente de varios libros por lo que está prohibida su impresión y distribución.

13 Las listas se pueden dividir en cuatro categorías: Listas simplemente enlazadas. Cada nodo (elemento) contiene un único enlace que conecta ese nodo al nodo siguiente o nodo sucesor. La lista es eficiente en recorridos directos (<<adelante>>). Listas doblemente enlazadas. Cada nodo contiene dos enlaces, uno a su nodo predecesor y el otro a su nodo sucesor. La lista es eficiente tanto en recorrido directos(<<adelante>>) como en recorrido inverso (<<atrás>>). tomada textualmente de varios libros por lo que está prohibida su impresión y distribución.

14 Lista circular simplemente enlazada. Una lista enlazada simplemente es la que el último elemento (cola) se enlaza al primer elemento (cabeza) de tal modo que la lista puede ser recorrida de modo circular (<<en anillo>>). Lista circular doblemente enlazada. Una lista doblemente enlazada es la que el último elemento se enlaza al primer elemento y viceversa. Esta lista se puede recorrer de modo circular (en anillo) tanto en dirección (<<adelante>>) como viceversa (<<atrás>>). tomada textualmente de varios libros por lo que está prohibida su impresión y distribución.

15 Para la construcción de las listas se puede elegir una implementación basada en arreglos o basada en apuntadores. Como ya se ha comentado estas implementaciones difieren en el modo en que asigna la memoria para los datos de los elementos, cómo se enlazan juntos los elementos y cómo se accede a dichos elementos. De forma más específica, las implementaciones pueden hacerse con: Asignación fija o estática, de memoria mediante arreglos. Asignación dinámica de memoria mediante apuntadores. Es importante comentar que la asignación fija de memoria mediante arreglos es más ineficiente. Por lo que solo desarrollaremos -la asignación de Este memoria material es de uso exclusivo mediante para clase de algoritmos apuntadores. y estructura de datos, la tomada textualmente de varios libros por lo que está prohibida su impresión y distribución.

16 Conceptos de listas Una lista enlazada consta de un conjunto de nodos. Un nodo consta de un campo dato y un puntero que apunta al <<siguiente>> elemento de la lista. El primer nodo, frente, es el nodo apuntador por cabeza. La lista encadenada nodos juntos desde el frente al final (cola) de la lista. El final se identifica como el nodo cuyo campo apuntador tiene el valor NULL = 0. tomada textualmente de varios libros por lo que está prohibida su impresión y distribución.

17 La lista se recorre desde el primero al último nodo; en cualquier punto del recorrido la posición actual se referencia por el apuntador Ptr_actual. En el caso que la lista está vacía el apuntador cabeza es nulo. tomada textualmente de varios libros por lo que está prohibida su impresión y distribución.

18 OPERACIONES EN LISTAS ENLAZADAS Las lista enlazada requiere controles para la gestión de los elementos contenidos en ellas. Estos controles se expresan en forma de operaciones que tendrán las siguientes funciones: Declaración de los tipos nodo y apuntador a nodo. Inicialización o creación. Insertar elementos en una lista. Buscar elementos de una lista (comprobar la existencia de elementos en una lista). Recorrer una lista enlazada (visitar cada nodo de la lista). Comprobar si la lista está vacía. tomada textualmente de varios libros por lo que está prohibida su impresión y distribución.

19 Como se declara de un nodo: Una lista enlazada se compone de una serie de nodos enlazados mediante apuntadores. Cada nodo es una combinación de dos partes: un tipo de dato (entero, real, doble, carácter o tipo predefinido) y un enlace (apuntador) al siguiente nodo. En C se puede declarar un nuevo tipo de dato para un nodo mediante las palabras reservadas struct que contiene las dos partes. tomada textualmente de varios libros por lo que está prohibida su impresión y distribución.

20 Notas de estructura de datos con lenguaje C struct Nodo { int dato; }; struct Nodo* enlace; La declaración utiliza el tipo struct que permite agrupar campos de diferentes tipos, el campo dato y el campo enlace. typedef struct Nodo { Int dato; struct Nodo *enlace }NODO; Con typedef se puede declarar a la vez un nuevo identificador de struct Nodo, en este caso se ha elegido NODO. tomada textualmente de varios libros por lo que está prohibida su impresión y distribución.

21 Dado que los tipos de datos que se pueden incluir en una listas pueden ser de cualquier tipo (enteros, reales, caracteres o incluso cadenas). Con el objeto de que el tipo de dato de cada nodo se pueda cambiar con facilidad. Se utiliza la sentencia typedef para declarar el nombre de Elemento como un sinónimo del tipo de dato de cada campo. tomada textualmente de varios libros por lo que está prohibida su impresión y distribución.

22 El tipo Elemento se utiliza entonces dentro de la estructura nodo: typedef double Elemento; struct nodo { Elemento dato; struct nodo *enlace; }; Si se necesita cambiar el tipo de elemento en los nodos, sólo tendrá que cambiar la sentencia de declaración de tipos que afecta a Elemento. Siempre que una función necesite referirse al tipo del dato del Este material nodo, es de puede uso exclusivo utilizar para clase de el algoritmos nombre y estructura Elemento. de datos, la tomada textualmente de varios libros por lo que está prohibida su impresión y distribución.

23 { Ejemplo se declara un tipo denominado PUNTO que representa un punto en el plano con su coordenada x & y, se declara el tipo NODO con el campo dato del tipo PUNTO. Se define un apuntador a NODO. #include <stdlib.h> typedef struct punto float x, y; } PUNTO; typedef struct Nodo { PUNTO dato; Struct Nodo* enlace; }NODO; NODO* cabecera; cabecera = NULL; tomada textualmente de varios libros por lo que está prohibida su impresión y distribución.

24 Apuntador al nodo inicial y al nodo final Los programas no declaran variables de nodos cuando se construye y emplea una lista enlazada, a la lista se accede a través de uno o más apuntadores a los nodos. El acceso más común a una lista enlazada es a través del primer nodo de la lista que se llama nodo inicial (cabeza o cabecera) de la lista. Un apuntador al primer nodo se llama, apuntador al inicial o apuntador cabecera. Nota: algunas veces se tiene un apuntador al último nodo de una lista enlazada. tomada textualmente de varios libros por lo que está prohibida su impresión y distribución.

25 El último nodo es la final (cola ) de la lista, y un apuntador al último nodo es el nodo final ( apuntador cola). También se pueden tener apuntadores a otros nodos de la lista enlazada. tomada textualmente de varios libros por lo que está prohibida su impresión y distribución.

26 Declaraciones de tipo en lista enlazada Declaración del nodo typedef double elemento; struct nodo { elemento dato; struct nodo *enlace; }; Definición de apuntadores struct nodo *ptr_cabeza; struct nodo *ptr_cola; tomada textualmente de varios libros por lo que está prohibida su impresión y distribución.

27 Cada apuntador de acceso a la lista debe estar declarado como una variable apuntador. Si se requiere una lista enlazada con un apuntador inicial (cabecera) y final (cola) es necesario declararlas variables apuntador. Por ejemplo: struct nodo *ptr_cabeza; struct nodo *ptr_cola; tomada textualmente de varios libros por lo que está prohibida su impresión y distribución.

28 Nota: El tipo struct a veces se simplifica utilizando la declaración typedef. Por ejemplo: typedef struct nodo NODO; typedef struct nodo* ptrnodo; ptrnodo ptr_cabeza; ptrnodo ptr_cola; tomada textualmente de varios libros por lo que está prohibida su impresión y distribución.

29 Notas importantes: La construcción y manejo de una lista enlazada requiere el acceso a los nodos de la lista a través de uno o más apuntadores a nodos. Normalmente, un programa incluye un apuntador al primer nodo (cabeza) y un apuntador al último nodo (cola). El último nodo de la lista contiene un valor de 0, esto es, un apuntador nulo (NULL) que señala el final de la lista. tomada textualmente de varios libros por lo que está prohibida su impresión y distribución.

30 La palabra NULL representa el apuntador nulo, que es una constante especial de C. El apuntador nulo se utiliza en dos situaciones: Usar el apuntador en el campo enlace o siguiente nodo final de una lista enlazada. Cuando una lista enlazada no tiene ningún nodo, se utiliza el apuntador NULL como apuntador de inicial (cabeza) y de final (cola). A lista se denomina lista vacía. tomada textualmente de varios libros por lo que está prohibida su impresión y distribución.

31 El apuntador nulo se puede escribir como NULL, que es una constante de la biblioteca estándar stdlib.h. El apuntador nulo se puede asignar a una variable apuntador con una sentencia de asignación ordinaria. tomada textualmente de varios libros por lo que está prohibida su impresión y distribución.

32 Nota importante: El apuntador de inicial (cabeza) y de final (cola) es una lista enlazada puede ser NULL, lo que indicará que la lista es vacía (no tiene nodos). Éste suele ser un método usual para construir una lista. Cualquier función que se escriba para manipular listas debe manejar un apuntador de inicial (cabeza) y un puntero de final(cola) nulos. tomada textualmente de varios libros por lo que está prohibida su impresión y distribución.

33 El operador -> de selección de un miembro: Si pato es un apuntador a una estructura y mono es un miembro de la estructura, entonces pato -> mono accede al miembro mono de la estructura apuntada por pato. -> se considera como un operador simple. Se denomina operador de selección de miembro o también operador de selección de componente operador pato ->mono recuerda a una flecha que apunta del apuntador pato al objeto que contiene al miembro mono. tomada textualmente de varios libros por lo que está prohibida su impresión y distribución.

34 Suponiendo que un programa ha de construir una lista enlazada y crear un apuntador de inicial (cabecera) ptr_cabeza a un nodo Nodo, el operador * de dirección aplicado a una variable apuntador representa el contenido del nodo apuntado por ptr_cabeza. Es decir, *ptr_cabeza es un tipo de dato Nodo. Al igual que con cualquier objeto se puede acceder a los dos miembros de *ptr_cabeza sentencia describe datos del nodo inicial (cabecera) printf ( %f, (*ptr_cabeza).dato); (*ptr_cabeza) miembro dato del nodo apuntado por ptr_cabeza

35 Nota importante: Los paréntesis son necesarios en la primera parte de la expresión (*ptr_cabeza) ya que los operadores unitarios que aparecen a la derecha tienen prioridad más alta que los operadores unitarios que aparecen en el lado izquierdo (el asterisco de dirección). Sin los paréntesis, el significado de ptr_cabeza producirá un error de sintaxis, al intentar evaluar ptr_cabeza.dato antes de la dirección o referencia.

36 A recordar: alumno -> matricula significa lo mismo que (*alumno).matricula. Utilizando el operador de selección -> se puede imprimir los datos del primer nodo de la lista. printf( %lf, ptr_cabeza ->dato);

37 Error frecuente: Los errores típicos en el tratamiento de apuntadores es escribir la expresión *p o bien p-> cuando el valor del apuntador p es el apuntador nulo, ya que como se sabe el apuntador nulo no apunta a nada.

38 Para crear una lista: Paso 1. Declarar el tipo de dato y el apuntador de inicial (cabeza) o primero. Paso2. Asignar memoria para un elemento del tipo definido anteriormente utilizando alguna de las funciones se asignación de memoria (malloc ( ), calloc ( ), realloc( )) y un cast para la conversión de void* al tipo apuntador a nodo; la dirección del nuevo elemento es ptr_nuevo. Paso 3. Crear iterativamente el primer elemento (cabeza) y los elementos sucesivos de una lista enlazada simplemente. Paso 4. Repetir hasta que no haya más entrada para el elemento.

39 Ejemplo: desarrollar una lista enlazada de elementos que almacenen datos de tipo entero. Un elemento de la lista se puede definir con la ayuda de la estructura siguiente: struct Elemento { int dato; struct Elemento * siguiente; }; typedef struct Elemento Nodo; En la estructura Elemento hay dos miembros, dato, que contiene el valor del elemento de la lista y siguiente que es un apuntador al siguiente nodo. También se declara un nuevo tipo: Nodo que es sinónimo de struct Elemento.

40 El siguiente paso para construir la lista es declarar la variable Primero que apuntará al primer elemento de la lista: Nodo *Primero = NULL El puntero Primero (también se puede llamar Cabeza) se ha inicializado a un valor nulo, lo que implica que la lista está vacía (no tiene elementos). Se crea un elemento de la lista, para ello hay que reservar memoria, tanta como tamaño tiene cada nodo, y asignar la dirección de la memoria reservada al apuntador Primero: Primero = (Nodo*) malloc (sizeof(nodo)); El operador sizeof se obtiene el tamaño de cada nodo de la lista, la función malloc( Este material es ) de devuelve uso exclusivo para clase un apuntador genérico (void*), por lo que se convierte a Nodo*.

41 Se puede asignar un valor al campo dato: Primero -> dato = 11; Primero -> siguiente =NULL; Apuntador Primero apunta al nuevo elemento, se inicializa a 11. El campo siguiente del nuevo elemento toma el valor nulo, por no haber un nodo siguiente. La operación de crear un nodo se puede hacer en una función a la que se pasas Este el material valor es de uso del exclusivo campo para clase dato y del campo siguiente.

42 La función devuelve un apuntador al nodo creado: Nodo* Crearnodo (int x, Nodo* enlace) { } Nodo *p; p = (Nodo*)malloc(sizeof (Nodo)); p->dato = x; p-> siguiente = enlace; return p; la función CrearNodo () para crear el primer nodo de la lista: Primero = Crearnodo (11, NULL);

43 Para añadir un nuevo elemento con un valor 6, y agregarlo en el primer lugar de la lista: Primero = Crearnodo (6, Primero); Para una lista con los datos 4, 6, 11: Primero = Crearnodo (4, Primero);

44 Insertar un elemento en una lista: Para añadir o insertar un elemento en una lista enlazada el algoritmo varía dependiendo de la posición en que se insertar el elemento. Inserción puede ser: Al principio de la lista (cabeza o elemento primero) de la lista. Al final de la lista (elemento último). Antes de un elemento especificado. Después de un elemento especificado.

45 Insertar un nuevo elemento en la cabeza de una lista: Es más fácil y más eficiente insertar un elemento nuevo al principio de la lista. El proceso de inserción: Asignar un nuevo nodo apuntado por el nuevo que es una variable apuntador local que apunta al nuevo nodo que se va a insertar en la lista. Situar el nuevo elemento en el campo dato del nuevo nodo. Hacer que el campo enlace siguiente del nuevo nodo apunte a primer nodo (cabeza) de la lista original. Hacer que primer nodo (apuntador cabeza) apunte al nuevo nodo que se ha creado.

46 Ejemplo: se tiene una lista contiene tres elementos, 10, 25 y 40 se requiere insertar un nuevo elemento 4, al principio de la lista. Paso 1 y paso 2

47 typedef int Item; typedef struct tipo_nodo { Item dato; struct tipo_nodo* siguiente; } Nodo; /*declaración del tipo Nodo*/ Nodo* nuevo; nuevo = (Nodo*)malloc (sizeof (Nodo)); /*se asigna un nuevo nodo*/ nuevo-> dato = entrada;

48 Paso 3 El campo enlace (siguiente) del nuevo nodo apunta a la cabeza actual de la lista. nuevo -> siguiente = cabeza;

49 Paso 4 Se cambia el apuntador de cabeza para apuntar al nuevo nodo creado; es decir, el puntero de cabeza apunta al mismo sitio que apunte nuevo. En este momento, la función de insertar un elemento termina su ejecución la variable local nuevo desaparece y sólo permanece el apuntador de cabeza que apunta a la nueva lista enlazada.

50 La variable local nuevo desaparece y sólo permanece el apuntador de cabeza que apunta a la nueva lista enlazada:

51 El código de la función InsertarCabezaLista: Void InsertarCabezaLista (Nodo** cabeza, ítem entrada); { Nodo *nuevo; nuevo = (Nodo*)malloc (sizeof (Nodo)); nodo*/ nuevo -> dato = entrada; nuevo*/ nuevo -> siguiente = *cabeza; nodo al frente de la lista*/ *cabeza = nuevo nuevo nodo*/ } /*asigna nuevo /*pone elemento en /* enlaza nuevo /* mueve puntero cabeza y apunta al

52 La función InsertarCabezaLista actúa también correctamente si se trata el caso de añadir un primer nodo o elemento a una lista vacía como ya se ha comentado cabeza apunta a NULL y termina apuntando al nuevo nodo de la lista enlazada.

53 Insertar un nodo nuevo (no por al inicio ) en la lista un nuevo nodo no siempre inserta al principio. Es posible insertar en el centro o al final de la lista. Por ejemplo: insertar un nuevo elemento 75 entre el elemento 25 y el elemento 40 en la lista enlazada 10, 25, 40.

54 Los pasos son: 1. Asignar el nuevo nodo apuntado por el puntero nuevo. 2. Situar el nuevo elemento en el campo dato del nuevo nodo. 3. Hacer que el campo enlace siguiente del nuevo nodo apunte al nodo que va después de la posición del nuevo nodo (o bien NULL si no hay ningún nodo después de la nueva posición). 4. En la variable puntero anterior tener la dirección del nodo que está antes de la posición deseada para el nuevo nodo. Hacer que anterior -> siguiente apunte al nuevo nodo que se acaba de crear.

55 En el paso 1 y 2: nuevo = (Nodo*)malloc (sizeof(nodo)); nuevo -> dato= entrada;

56 Paso 3 nuevo-> siguiente = anterior -> siguiente

57 Paso 4: Después de ejecutar todas las sentencias de las sucesivas etapas, la nueva lista comienza en el nodo10, siguen 25, 75 y, por último, 40. void InsertarLista (Nodo* anterior, Item entrada); { Nodo *nuevo; nuevo = (Nodo*)malloc (sizeof (Nodo)); nuevo -> dato = entrada; nuevo -> siguiente = anterior -> siguiente; anterior -> siguiente = nuevo; }

58 Inserción al final de la lista: La inserción al final de la lista es menos eficiente: Porque normalmente, no se tiene un apuntador al último elemento de la lista entonces se ha de seguir el recorrido desde el inicio (cabeza) de la lista hasta el último nodo y a continuación realizar la inserción Cuando ultimo es una variable apuntador que apunta al último nodo la lista, las sentencias siguientes insertan un nodo al final la lista.

59 ultimo -> siguiente = (Nodo*)malloc(sizeof (Nodo)); En esta instrucción se asigna un nuevo nodo que está apuntando por el campo siguiente al último nodo de la lista (antes de la inserción) de modo que el nuevo nodo ahora es el último nodo de la lista ultimo -> siguiente -> dato = entrada; Establece el campo dato del nuevo último nodo al valor de entrada. ultimo -> siguiente -> siguiente = NULL; Establece el campo siguiente del nuevo nodo a NULL. ultimo = ultimo -> siguiente; Pone la variable ultimo al nuevo último nodo de la lista.

60 Para buscar un elemento en la lista Como una función en C puede devolver el valor apuntador entonces al ubicar un elemento en la lista se puede regresar el apuntador a ese elemento Si tenemos una función BuscarLista emplea una variable apuntador llamada índice que va recorriendo la lista nodo a nodo. Si usamos una estructura de ciclo. Como se puede observar en el siguiente código.

61 Nodo* BuscarLista (Nodo* cabeza, Item destino) /* cabeza: apuntador de inicial (cabeza) de una lista enlazada. { } destino: dato que se busca en la lista. indice: valor de retorno, apuntador que apunta al primer nodo que contiene el destino (elemento buscado); si no existe el nodo devuelve apuntador nulo.*/ Nodo* índice; for (indice=cabeza; índice!=null; indice=indice->siguiente) if (destino==indice ->dato) return NULL; return indice; índice apunta a los nodos de la lista entonces si se encuentra el nodo buscado devuelve un apuntador al nodo buscado con la sentencia de retorno (return) caso contario la función devuelve NULL (return NULL).

62 Eliminar un nodo en una lista Para eliminar un nodo en la lista se debe enlazar el nodo anterior con el nodo siguiente del nodo que se quiere eliminar y así liberara la memoria ocupada. Pasos de eliminación de un nodo: 1. Búsqueda del nodo que contiene el dato. Se obtiene la dirección del nodo a eliminar y la dirección del anterior. 2. El apuntador siguiente del nodo anterior apunta al siguiente del nodo a eliminar. 3. En caso de que el nodo a eliminar sea el primero(cabeza) se modifica cabeza para que tenga la de dirección algoritmos y estructura del nodo de datos, siguiente. la 4. Se libera la memoria ocupada por el nodo.

63 La función que recibe la cabeza de la lista y el dato del nodo que se quiere borrar. viod eliminar (Nodo** cabeza, item entrada) { } } Nodo* actual, *anterior; int encontrado = 0; actual = cabeza; anterior = NULL; /*ciclo de búsqueda*/ while ((actual =! NULL)&&(!encontrado)) { encontrado= (actual-> dato == ebtrada); if (!encontrado) { anterior=actual; actual=actual->siguiente;

64 /*Enlace de nodo anterior con siguiente*/ if (actual!=null) { /*Se distingue entre que el nodo inicial o del resto de la lista*/ if (actual == *cabeza) { } else{ } *cabeza = actual-> siguiente; anterior-> siguiente = actual -> siguiente free (actual); } }

65 LISTA DOBLEMENTE ENLAZADA que está prohibida su impresión y distribución.

66 En numerosas aplicaciones es conveniente poder acceder a los elementos o nodos de una lista en cualquier orden. En este caso se recomienda el uso de una lista doblemente ligada. La característica de estas es que cada elemento aparte del valor almacenado en el elemento tienen dos apuntadores: a) Uno que apunta al siguiente elemento de la lista. b) ee otro apuntador apunta al elemento anterior.

67 Lista doblemente ligada:

68 Existe una operación de insertar y eliminar (borrar) en cada dirección. Para insertar un nodo p a la derecha del nodo actual. Deben asignarse cuatro nuevos enlaces.

69 Para eliminar (borrar) un nodo de una lista doblemente enlazada es preciso cambiar dos apuntadores. Eliminación de un nodo en una lista doblemente enlazada.

70 Como se declara una lista doblemente enlazada Para lista doblemente enlazada con valores de tipo int necesita dos apuntadores y el valor del campo datos. En una estructura se agrupan estos datos: typedef int Item; struct unnodo { Item dato; struct unnodo *adelante; struct unnodo *atras; }; typedef struct unnodo Nodo;

71 Para insertar un elemento en la lista doblemente ligada Para añadir o insertar un elemento en una lista doblemente ligada depende de la posición en que se inserta el elemento. La posición de inserción puede ser: En el elemento primero (cabeza) de la lista. En el final de la lista (elemento último). Antes de un elemento especificado. Después de un elemento especificado.

72 Para insertar un nuevo elemento al principio de la lista doble El proceso puede ser: 1. Asignar un nuevo nodo apuntado por nuevo que es una variable apuntador que apunta al nuevo nodo que se va a insertar en la lista doble. 2. Situar al nuevo elemento en el campo dato del nuevo nodo. 3. Hacer que el campo enlace adelante del nuevo nodo apunte al primer nodo (cabeza) de la lista original, y que el campo enlace atrás del nodo cabeza apunte al nuevo nodo. 4. Hacer que cabeza (apuntador cabeza) apunte al nuevo nodo que se ha creado.

73 typedef int Item; typedef struct tipo_nodo { Item dato; struct tipo_nodo* adelante; struct tipo_nodo* atras; }Nodo; Nodo* nuevo; nuevo = (Nodo*)malloc (sizeof (Nodo)); nuevo -> dato = entrada nuevo -> adelante = cabeza ; nuevo -> atrás = NULL; cabeza -> atrás = nuevo; cabeza = nuevo;

74 La función de insertar un elemento en la lista termina su ejecución, la variable local nuevo desaparece y sólo permanece el apuntador de cabeza que apunta a la nueva lista doblemente enlazada.

75 Inserción de un nuevo nodo( no por el principio de la lista) en cualquier parte de la lista. 1. Asignar el nuevo nodo apuntado por el apuntador nuevo. 2. Situar el nuevo elemento en el campo dato del nuevo nodo. 3. Hacer que el campo enlace adelante del nuevo nodo apunte al nodo que va después de la posición del nuevo nodo (o bien a NULL si no hay ningún nodo después de la nueva posición). El campo atrás del nodo siguiente al nuevo tiene que apuntar a nuevo. 4. La dirección del nodo que está antes de la posición deseada para el nuevo nodo está en la variable apuntador anterior. Hacer que anterior -> adelante apunte al nuevo nodo. El enlace atrás del nuevo de algoritmos nodo y estructura debe datos, de apuntar la a anterior.

Este material es de uso exclusivo para estudio, los textos fueron tomados textualmente de varios libros por lo que está prohibida su impresión y

Este material es de uso exclusivo para estudio, los textos fueron tomados textualmente de varios libros por lo que está prohibida su impresión y Este material es de uso exclusivo para estudio, los textos fueron tomados textualmente de varios libros por lo que está prohibida su impresión y distribución. Listas Enlazadas Estructuras de datos dinámicas

Más detalles

LISTAS ENLAZADAS FUNDAMENTOS TEORICOS

LISTAS ENLAZADAS FUNDAMENTOS TEORICOS LISTAS ENLAZADAS FUNDAMENTOS TEORICOS Una lista enlazada es una colección o secuencia de elementos dispuestos uno detrás de otro, en la que cada elemento se conecta al siguiente elemento por un «enlace»

Más detalles

Unidad Nº V Listas Enlazadas

Unidad Nº V Listas Enlazadas Instituto Universitario Politécnico Santiago Mariño Unidad Nº V Listas Enlazadas Lista Enlazadas Es una colección o secuencia de elementos dispuestos uno detrás de otro, en la que cada elemento se conecta

Más detalles

Capítulo. Listas, pilas y colas en C. Contenido. Introducción

Capítulo. Listas, pilas y colas en C. Contenido. Introducción Capítulo 32 Listas, pilas y colas en C Contenido Listas enlazadas Clasificación de listas enlazadas Operaciones en listas enlazadas Inserción de un elemento en una lista Búsqueda de un elemento de una

Más detalles

Tipos Recursivos de Datos

Tipos Recursivos de Datos 1/1 Tipos Recursivos de Datos Josefina Sierra Santibáñez 27 de noviembre de 2016 2/1 Introducción La recursividad no sólo se puede aplicar a la definición de procedimientos (i.e. funciones o acciones),

Más detalles

UNIDAD 8 Tipos de datos dinámicos: Punteros Asignación dinámica de memoria. Uso de punteros. Inicialización y asignación de punteros.

UNIDAD 8 Tipos de datos dinámicos: Punteros Asignación dinámica de memoria. Uso de punteros. Inicialización y asignación de punteros. Tipos de datos dinámicos: Punteros Asignación dinámica de memoria. Uso de punteros. Inicialización y asignación de punteros. Procedimientos para asignación y liberación de memoria. Tipos de datos recursivos.

Más detalles

Tipos de Datos Recursivos

Tipos de Datos Recursivos 1/1 Tipos de Datos Recursivos Josefina Sierra Santibáñez 15 de mayo de 2018 2/1 Introducción La recursividad no sólo se puede aplicar a la definición de procedimientos (i.e. funciones o acciones), sino

Más detalles

UNIDAD 8 Tipos de datos dinámicos: Punteros Asignación dinámica de memoria. Uso de punteros. Inicialización y asignación de punteros.

UNIDAD 8 Tipos de datos dinámicos: Punteros Asignación dinámica de memoria. Uso de punteros. Inicialización y asignación de punteros. Tipos de datos dinámicos: Punteros Asignación dinámica de memoria. Uso de punteros. Inicialización y asignación de punteros. Procedimientos para asignación y liberación de memoria. Tipos de datos recursivos.

Más detalles

PUNTEROS (APUNTADORES)

PUNTEROS (APUNTADORES) 2010 UNAN LEON Departamento de Computación Ing. En Sistemas Sabatino Autor: Ing: Karina Esquivel Alvarado. Asignatura: Algoritmo y Estructura de Datos. PUNTEROS (APUNTADORES) TEMA 4: PUNTEROS (APUNTADORES)

Más detalles

Tema 13: Apuntadores en C

Tema 13: Apuntadores en C Tema 13: Apuntadores en C M. en C. Edgardo Adrián Franco Martínez http://www.eafranco.com edfrancom@ipn.mx @edfrancom edgardoadrianfrancom Estructuras de datos (Prof. Edgardo A. Franco) 1 Contenido Introducción

Más detalles

ESTRUCTURA DE DATOS. Memoria estática Memoria dinámica Tipo puntero Declaración de punteros Gestión de memoria dinámica Resumen ejemplo

ESTRUCTURA DE DATOS. Memoria estática Memoria dinámica Tipo puntero Declaración de punteros Gestión de memoria dinámica Resumen ejemplo ESTRUCTURA DE DATOS Memoria estática Memoria dinámica Tipo puntero Declaración de punteros Gestión de memoria dinámica Resumen ejemplo DATOS ESTÁTICOS Su tamaño y forma es constante durante la ejecución

Más detalles

Universidad Autónoma del Estado de México 2016, Año del 60 Aniversario de la Universidad Autónoma del Estado de México

Universidad Autónoma del Estado de México 2016, Año del 60 Aniversario de la Universidad Autónoma del Estado de México Universidad Autónoma del Estado de México 2016, Año del 60 Aniversario de la Universidad Autónoma del Estado de México Unidad Académica Profesional Tianguistenco Ingeniería de Software Estructura de Datos

Más detalles

Apuntadores en C y C++

Apuntadores en C y C++ Apuntadores en C y C++ Universidad de Carabobo Facultad Experimental de Ciencias y Tecnología Prof. Marcos A. Gil T. 8 de diciembre de 2004 1. Introducción Los apuntadores en C y C++ son una herramienta

Más detalles

Estructura de Datos. Listas Enlazadas

Estructura de Datos. Listas Enlazadas Estructura de Datos Listas Enlazadas Conceptos de Lista enlazada Una lista enlazada es una secuencia de nodos que se interconectan mediante sus campos de enlace. Nodo: un objeto creado desde una clase

Más detalles

APUNTADORES. Un apuntador es un objeto que apunta a otro objeto. Es decir, una variable cuyo valor es la dirección de memoria de otra variable.

APUNTADORES. Un apuntador es un objeto que apunta a otro objeto. Es decir, una variable cuyo valor es la dirección de memoria de otra variable. APUNTADORES Un apuntador es un objeto que apunta a otro objeto. Es decir, una variable cuyo valor es la dirección de memoria de otra variable. No hay que confundir una dirección de memoria con el contenido

Más detalles

Estructura de Datos. Centro Universitario UAEM Valle de México. Unidad II. Estructuras de Datos Lineales - Listas

Estructura de Datos. Centro Universitario UAEM Valle de México. Unidad II. Estructuras de Datos Lineales - Listas Estructura de Datos Centro Universitario UAEM Valle de México Unidad II. Estructuras de Datos Lineales - Listas Licenciatura en Ingeniería en Computación Ph. D. Victor Manuel Landassuri Moreno vmlandassurim@uaemex.mx

Más detalles

Algoritmo, Estructuras y Programación II Ing. Marglorie Colina

Algoritmo, Estructuras y Programación II Ing. Marglorie Colina Unidad III Punteros Algoritmo, Estructuras y Programación II Ing. Marglorie Colina Ejemplo: Paso de Punteros a una Función Arreglos (Arrays) Unidimensionales Los Arreglos son una colección de variables

Más detalles

Estructuras Dinámicas

Estructuras Dinámicas Departamento de Lenguajes yciencias de la Computación 4 Estructuras Dinámicas Contenido 1. Gestión dinámica de memoria. 2. El tipo puntero. 3. Operaciones con punteros. 4. Operaciones básicas sobre listas

Más detalles

Estructuras dinámicas lineales (i)

Estructuras dinámicas lineales (i) Estructuras dinámicas lineales (i) Introducción En la lección anterior se explicaron los conceptos de dinámicas y puntero; vimos la forma en que se implementan dichas tanto en la notación algorítmica como

Más detalles

Tema 18: Memoria dinámica y su uso en C

Tema 18: Memoria dinámica y su uso en C Tema 18: Memoria dinámica y su uso en C M. en C. Edgardo Adrián Franco Martínez http://www.eafranco.com edfrancom@ipn.mx @edfrancom edgardoadrianfrancom Estructuras de datos (Prof. Edgardo A. Franco) 1

Más detalles

Capitulo V Listas Enlazadas

Capitulo V Listas Enlazadas Capitulo V Listas Enlazadas Muere lentamente, quien abandona un proyecto antes de iniciarlo, no preguntando de un asunto que desconoce o no respondiendo cuando le indagan sobre algo que sabe. Evitemos

Más detalles

ELO320 Estructuras de Datos y Algoritmos. Listas. Tomás Arredondo Vidal

ELO320 Estructuras de Datos y Algoritmos. Listas. Tomás Arredondo Vidal ELO320 Estructuras de Datos y Algoritmos Listas Tomás Arredondo Vidal Este material está basado en: Robert Sedgewick, "Algorithms in C", (third edition), Addison-Wesley, ISBN 0-201-31663-3. 2001 material

Más detalles

Realizar el ejercicio anterior utilizando Punteros

Realizar el ejercicio anterior utilizando Punteros PUNTEROS Y ARRAYS En C existe una relación entre punteros y arrays tal que cualquier operación que se pueda realizar mediante la indexación de un arrays, se puede realizar también con punteros. Para clarificar

Más detalles

UNIVERSIDAD AUTONOMA DEL ESTADO DE MEXICO CENTRO UNIVERSITARIO UAEM ATLACOMULCO ESTRUCTURAS DE DATOS ING. GREGORIO GARCIA ESTRADA INTEGRANTES:

UNIVERSIDAD AUTONOMA DEL ESTADO DE MEXICO CENTRO UNIVERSITARIO UAEM ATLACOMULCO ESTRUCTURAS DE DATOS ING. GREGORIO GARCIA ESTRADA INTEGRANTES: UNIVERSIDAD AUTONOMA DEL ESTADO DE MEXICO CENTRO UNIVERSITARIO UAEM ATLACOMULCO ESTRUCTURAS DE DATOS ING. GREGORIO GARCIA ESTRADA INTEGRANTES: ALONSO GOMEZ SANDOVAL TERESA PEREZ GONZALEZ ICO 14 QUE ES

Más detalles

Estructuras Dinámicas de datos.

Estructuras Dinámicas de datos. Estructuras Dinámicas de datos. Las estructuras dinámicas de datos son estructuras que crecen a medida que ejecuta un programa. Una estructura dinámica de datos es una colección de elementos llamadas nodos

Más detalles

ESTRUCTURAS. Struct Identificador_ tipo_estructura { Tipo miembro_1; /*Declaración de los miembros*/

ESTRUCTURAS. Struct Identificador_ tipo_estructura { Tipo miembro_1; /*Declaración de los miembros*/ DECLARACION DE ESTRUCTURAS ESTRUCTURAS La estructura es una colección de variables, la cual puede poseer distintos tipos de datos (a diferencia de los arreglos que solamente pueden tener un solo tipo de

Más detalles

Tema 4. Estructuras Dinámicas

Tema 4. Estructuras Dinámicas Tema 4. Estructuras Dinámicas E.U.Politécnica. I.T.Industrial (Electricidad) E.U. Politécnica Departamento Lenguajes y Ciencias de la Computación. Universidad de Málaga José Luis Leiva Olivencia. Despacho:

Más detalles

UNIVERSIDAD AUTONOMA DE MADRID ESCUELA POLITÉCNICA SUPERIOR ESTRUCTURAS DE DATOS Y ALGORITMOS

UNIVERSIDAD AUTONOMA DE MADRID ESCUELA POLITÉCNICA SUPERIOR ESTRUCTURAS DE DATOS Y ALGORITMOS UNIVERSIDAD AUTONOMA DE MADRID ESCUELA POLITÉCNICA SUPERIOR ESTRUCTURAS DE DATOS Y ALGORITMOS Curso 2008-09 Examen parcial APELLIDOS: NOMBRE: 1. (0.5 puntos) Enumera las características de un algoritmo

Más detalles

1.2.4 Listas enlazadas

1.2.4 Listas enlazadas 1.2.4 Listas enlazadas Las listas enlazadas son tipos de datos dinámicos que se construyen con nodos. Un nodo es un registro con al menos, dos campos, uno de ellos contiene las componentes y se le denomina

Más detalles

Una función es un miniprograma dentro de un programa. Las funciones contienen varias

Una función es un miniprograma dentro de un programa. Las funciones contienen varias TEMA 6. FUNCIONES. Una función es un miniprograma dentro de un programa. Las funciones contienen varias sentencias bajo un solo nombre, que un programa puede utilizar una o más veces para ejecutar dichas

Más detalles

UNIVERSIDAD BANCARIA DE MEXICO CONSTANCIA UNIDAD Y TRABAJO Guadalupe Godínez Maldonado Prof. Juan Carlos Martínez

UNIVERSIDAD BANCARIA DE MEXICO CONSTANCIA UNIDAD Y TRABAJO Guadalupe Godínez Maldonado Prof. Juan Carlos Martínez PROGRAMACION ESTRUCTURADA II APUNTES 1er.PARCIAL Revisión de conceptos importantes #include #include ESTRUCTURAS struct computadora float costo; int anio; int velocidad_cpu; char tipo_cpu[16];

Más detalles

Tema 04: TAD Lista. M. en C. Edgardo Adrián Franco Martínez edgardoadrianfrancom

Tema 04: TAD Lista. M. en C. Edgardo Adrián Franco Martínez edgardoadrianfrancom Tema 04: TAD Lista M. en C. Edgardo Adrián Franco Martínez http://www.eafranco.com edfrancom@ipn.mx @edfrancom edgardoadrianfrancom (Prof. Edgardo A. Franco) 1 Contenido TAD Lista Descripción del TAD Lista

Más detalles

Algoritmos y estructuras de datos

Algoritmos y estructuras de datos Algoritmos y estructuras de datos Dr. Eduardo A. Rodríguez Tello Laboratorio de Tecnologías de Información Cinvestav Tamaulipas ertello@tamps.cinvestav.mx Cursos de inducción a la MCC Cinvestav Tamaulipas

Más detalles

Estructura de datos Colas

Estructura de datos Colas Estructura de Datos Estructura de datos Colas Temario Unidad II 2.1 Definición y operaciones 2.2 Implementación estática 2.3 Implementación dinámica 2.4 Colas de prioridad 2.5 Casos de estudio 1 Definición

Más detalles

ESTRUCTURAS DINÁMICAS DE DATOS (COLAS) EN C

ESTRUCTURAS DINÁMICAS DE DATOS (COLAS) EN C 2013 ESTRUCTURAS DINÁMICAS DE DATOS (COLAS) EN C Departamento de Computación UNAN-León TEMA 5: ESTRUCTURAS DINÁMICAS DE DATOS (COLAS) 5.1 INTRODUCCIÓN: Las colas son secuencias de elementos caracterizadas

Más detalles

Elementos de un programa en C

Elementos de un programa en C Elementos de un programa en C Un programa en C consta de uno o más archivos. Un archivo es traducido en diferentes fases. La primera fase es el preprocesado, que realiza la inclusión de archivos y la sustitución

Más detalles

Informática Ingeniería en Electrónica y Automática Industrial

Informática Ingeniería en Electrónica y Automática Industrial Informática Ingeniería en Electrónica y Automática Industrial Punteros en lenguaje C Punteros en lenguaje C Definición Declaración e inicialización de punteros Operadores de punteros: «*» y «&» Operaciones

Más detalles

3 - Tipos Inductivos (Recursivos)

3 - Tipos Inductivos (Recursivos) Programación 2 3 - Tipos Inductivos (Recursivos) Estructuras Dinámicas: Punteros y Listas 1 Tipos inductivos tienen, en general, cardinalidad infinita contienen valores de "tamaño arbitrario" Ejemplos:

Más detalles

Capítulo 5. LISTAS. 5.1 Listas y listas vinculadas. Una lista es una colección lineal de elementos.

Capítulo 5. LISTAS. 5.1 Listas y listas vinculadas. Una lista es una colección lineal de elementos. 53 Capítulo 5. LISTAS. 5.1 Listas y listas vinculadas. Una lista es una colección lineal de elementos. Las listas pueden ser almacenadas en arreglos ( de qué manera?), pero las listas enlazadas proporcionan

Más detalles

LISTAS. Prof. Ing. M.Sc. Fulbia Torres

LISTAS. Prof. Ing. M.Sc. Fulbia Torres LISTAS ESTRUCTURAS DE DATOS 2006 Prof. UNIDAD II ESTRUCTURAS DE DATOS LISTAS Definición. Representación de Listas. Lista Lineal Simplemente Enlazada. Operaciones TAD LLSE. Implementación Dinámica. Otras

Más detalles

Ingeniera de Sistemas: Luz Esperanza Espitia Tutora de Estructura de datos.

Ingeniera de Sistemas: Luz Esperanza Espitia Tutora de Estructura de datos. Ingeniera de Sistemas: Luz Esperanza Espitia Tutora de Estructura de datos. Con relación a la Estructura LISTA Indicar objetos reales que se puedan modelar con dicha estructura. Listas de Ordenes de visitas

Más detalles

Laboratorio de Arquitectura de Redes. Punteros en lenguaje C

Laboratorio de Arquitectura de Redes. Punteros en lenguaje C Laboratorio de Arquitectura de Redes Punteros en lenguaje C Punteros en lenguaje C Definición Declaración e inicialización de punteros Operadores de punteros: «*» y «&» Operaciones con punteros Operaciones

Más detalles

Tema 8. Listas. José M. Badía, Begoña Martínez, Antonio Morales y José M. Sanchiz

Tema 8. Listas.  José M. Badía, Begoña Martínez, Antonio Morales y José M. Sanchiz Tema 8. Listas http://aulavirtual.uji.es José M. Badía, Begoña Martínez, Antonio Morales y José M. Sanchiz {badia, bmartine, morales, sanchiz}@icc.uji.es Estructuras de datos y de la información Universitat

Más detalles

Contenido PARTE II: ESTRUCTURAS DE DATOS AVANZADAS

Contenido PARTE II: ESTRUCTURAS DE DATOS AVANZADAS Contenido PARTE II: ESTRUCTURAS DE DATOS AVANZADAS TEMA 4. - La Estructura de datos Árbol 4.1. Árboles, definiciones 4.2 Árboles binarios y su representación 4.3 Operaciones básicas de un árbol binario

Más detalles

Profesor: José Miguel Rubio L.

Profesor: José Miguel Rubio L. Profesor: José Miguel Rubio L. Magíster en Ingeniería Informática Ingeniero Civil en Informática Licenciado en Ciencias de la Ingeniería Técnico en Programación Oficina: 3-20 e-mail 1: jose.rubio.l@ucv.cl

Más detalles

Estructura de Datos. Temario Unidad VI. Árboles Árboles Binarios

Estructura de Datos. Temario Unidad VI. Árboles Árboles Binarios Estructura de Datos Árboles Árboles Binarios Temario Unidad VI 6.1 Definición y operaciones 6.2 Implementación 6.3 Recorrido en Árboles Binarios 6.4 Árboles AVL y su implementación 6.5 Árboles n-arios

Más detalles

Unidad 2: Estructuras de Datos Tema III. Estructuras de datos Compuestas. Pilas, Colas y Listas implementadas con punteros

Unidad 2: Estructuras de Datos Tema III. Estructuras de datos Compuestas. Pilas, Colas y Listas implementadas con punteros Unidad 2: Estructuras de Datos Tema III. Estructuras de datos Compuestas. Pilas, Colas y Listas implementadas con punteros Programación I (Plan 1999) Algoritmos y Estructuras de Datos II (Plan 2009) Mgter.

Más detalles

2. Variables dinámicas

2. Variables dinámicas 2. Variables dinámicas 1. Introducción 2. Gestión de memoria dinámica 3. Punteros y variables dinámicas en lenguaje algorítmico 4. Gestión de memoria dinámica y punteros en C Bibliografía Biondi y Clavel.

Más detalles

Cursos Propedéuticos 2015

Cursos Propedéuticos 2015 Listas Cursos Propedéuticos 2015 Dr. René Cumplido M. en C. Luis Rodríguez Flores http://ccc.inaoep.mx/~rcumplido/ Contenido de la sección Listas Principales operaciones Listas secuenciales vs Listas ligadas

Más detalles

PUNTEROS EN C (APUNTADORES)

PUNTEROS EN C (APUNTADORES) 2010 UNAN LEON Departamento de Computación Ing. En Sistemas Sabatino Autor: Ing: Karina Esquivel Alvarado. Asignatura: Programación Estructurada PUNTEROS EN C (APUNTADORES) TEMA 10: PUNTEROS (APUNTADORES)

Más detalles

Punteros. Programación en C 1

Punteros. Programación en C 1 Punteros Programación en C 1 Índice Variables y direcciones de memoria. Punteros definición, declaración e inicialización. Punteros declaración, asignación y dereferencia. Puntero nulo, tipo void. Aritmética

Más detalles

Una clave Definición informal La clave debe contener una secuencia de una o más letras seguidas por uno o más dígitos

Una clave Definición informal La clave debe contener una secuencia de una o más letras seguidas por uno o más dígitos Una clave Definición informal La clave debe contener una secuencia de una o más letras seguidas por uno o más dígitos Definición formal del lenguaje por comprensión L = {C n D m \ n,m >0 Donde C representa

Más detalles

Programación 1 Grado de Ingeniería Robótica

Programación 1 Grado de Ingeniería Robótica Programación 1 Grado de Ingeniería Robótica Tema 6: Datos estructurados Índice (sesión 11/11/2015): Arrays estáticos Cadenas de caracteres Funciones de la librería string.h Punteros Declaración de punteros

Más detalles

Objetivos. El alumno conocerá y aplicará el concepto de apuntador para la realización de programas de manejo eficiente de memoria.

Objetivos. El alumno conocerá y aplicará el concepto de apuntador para la realización de programas de manejo eficiente de memoria. Objetivos El alumno conocerá y aplicará el concepto de apuntador para la realización de programas de manejo eficiente de memoria. Al final de esta práctica el alumno podrá: 1. Acceder a localidades de

Más detalles

directamente indirectamente

directamente indirectamente PUNTEROS EN C PUNTEROS Permiten simular el pasaje de parámetros por referencia. Permiten crear y manipular estructuras de datos dinámicas. Su manejo es de fundamental importancia para poder programar en

Más detalles

Este material es de uso exclusivo para clase de algoritmos y estructura de datos, la

Este material es de uso exclusivo para clase de algoritmos y estructura de datos, la Este material es de uso exclusivo para clase de algoritmos y estructura de datos, la información de este documento fue tomada textualmente de varios libros por lo que está prohibida su impresión y distribución.

Más detalles

Repaso 02: Apuntadores y manejo de memoria dinámica

Repaso 02: Apuntadores y manejo de memoria dinámica Repaso 02: Apuntadores y manejo de memoria dinámica Solicitado: Ejercicios 02: Programación con memoria dinámica M. en C. Edgardo Adrián Franco Martínez http://www.eafranco.com edfrancom@ipn.mx @edfrancom

Más detalles

Estructura de datos y de la información Boletín de problemas - Tema 10

Estructura de datos y de la información Boletín de problemas - Tema 10 Estructura de datos y de la información Boletín de problemas - Tema 10 1. En el caso de que sea posible, dar un ejemplo de los siguientes puntos. Si no, explicar por qué no lo es. Considerar un valor genérico

Más detalles

Estructura de Datos L I S T A

Estructura de Datos L I S T A Estructura de Datos TDA L I S T A El TDA Lista El TDA Lista es una estructura compuesta por nodos (en los cuales se encuentran los datos almacenados) los cuales se encuentran enlazados entre si uno a uno

Más detalles

Apuntadores (Punteros)

Apuntadores (Punteros) Apuntadores (Punteros) x9ff10 X int 209 SESION 7 *ptr Definición Llamados también punteros. Un Apuntador es una variable que contiene una dirección de memoria, la cual corresponderá a un dato o a una variable

Más detalles

Manejo de memoria en C

Manejo de memoria en C Manejo de memoria en C Todas las variables, en el lenguaje C, se definen dentro de alguna función, fuera de esa función no es posible acceder a ellas. Al entrar a una función, a cada una de las variables

Más detalles

Memoria Dinámica. Jornadas de Marzo 2010 Grupo de Usuarios de Linux Tania Pérez

Memoria Dinámica. Jornadas de Marzo 2010 Grupo de Usuarios de Linux Tania Pérez Jornadas de Marzo 2010 Grupo de Usuarios de Linux Tania Pérez 1. PUNTEROS 2. MEMORIA DINÁMICA 2 1. PUNTEROS 3 Qué es un puntero? Un tipo de variable cuyo valor es la dirección de memoria de otra variable.

Más detalles

TEMA 8. ESTRUCTURAS Y UNIONES.

TEMA 8. ESTRUCTURAS Y UNIONES. TEMA 8. ESTRUCTURAS Y UNIONES. Este capítulo examina estructuras, uniones, enumeraciones y s definidos por el usuario que permite a un programador crear nuevos s de datos. La capacidad para crear nuevos

Más detalles

UNIDAD 8 Tipos de datos dinámicos: Punteros Asignación dinámica de memoria. Uso de punteros. Inicialización y asignación de punteros.

UNIDAD 8 Tipos de datos dinámicos: Punteros Asignación dinámica de memoria. Uso de punteros. Inicialización y asignación de punteros. Tipos de datos dinámicos: Punteros Asignación dinámica de memoria. Uso de punteros. Inicialización y asignación de punteros. Procedimientos para asignación y liberación de memoria. Tipos de datos recursivos.

Más detalles

Introducción: una simple colección

Introducción: una simple colección Introducción: una simple colección Implemente una clase denominada Lista. La clase deberá mantener una colección de números y proveer los siguientes i métodos: Listas dinámicas simplemente enlazadas Franco

Más detalles

Algoritmos y estructuras de datos

Algoritmos y estructuras de datos Algoritmos y estructuras de datos Estructuras, apuntadores y memoria dinámica Francisco Javier Zaragoza Martínez Universidad Autónoma Metropolitana Unidad Azcapotzalco Departamento de Sistemas 11 de mayo

Más detalles

Punteros. Índice. 1. Qué es un puntero y por que son importantes.

Punteros. Índice. 1. Qué es un puntero y por que son importantes. Punteros Índice 1. Qué es un puntero y por que son importantes. 2. Punteros a tipos básicos. 3. Punteros sin tipo. 4. Memoria dinámica. 5. Punteros a estructuras. 6. Punteros a matrices. 7. Punteros a

Más detalles

Estructuras de Datos

Estructuras de Datos 8 de marzo de 2011 1 2 3 4 5 Tipo de Dato Abstracto Un tipo de dato abstracto (TDA), corresponde a un conjunto de valores y un conjunto de operaciones sobre tales valores. s de TDA Enteros. Reales. Booleanos.

Más detalles

Funciones Definición de función

Funciones Definición de función Funciones Definición de función Una función es un bloque de código que realiza una tarea específica. Una función es una porción de programa, identificable mediante un nombre, que realiza determinadas tareas

Más detalles

SEGUNDA PARTE: TIPOS COMPLEJOS

SEGUNDA PARTE: TIPOS COMPLEJOS SEGUNDA PARTE: TIPOS COMPLEJOS Introducción En la primera parte del tema se vieron los tipos simples de datos que es capaz de almacenar el ordenador: booleanos, caracteres, enteros y reales. Sin embargo,

Más detalles

Tema 10: Arreglos estáticos en C

Tema 10: Arreglos estáticos en C Tema 10: Arreglos estáticos en C M. en C. Edgardo Adrián Franco Martínez http://www.eafranco.com edfrancom@ipn.mx @edfrancom edgardoadrianfrancom Estructuras de datos (Prof. Edgardo A. Franco) 1 Contenido

Más detalles

Lógica: Algoritmo: Archivo: Base de datos: Bit:

Lógica: Algoritmo: Archivo: Base de datos: Bit: Lógica: Algoritmo: Archivo: Base de datos: Bit: 1 LÓGICA: Es una secuencia de operaciones realizadas por el hardware o por el software. Lógica del hardware, Son los circuitos y Chips que realizan las operaciones

Más detalles

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta Centro Asociado Palma de Mallorca Antonio Rivero Cuesta La Sintaxis de Java II... 6 Estructuras de control... 7 Estructuras de selección... 8 Sentencia if... 9 Sentencia if - else... 12 Operador condicional...

Más detalles

Estructuras dinámicas lineales (ii)

Estructuras dinámicas lineales (ii) Estructuras dinámicas lineales (ii) Introducción Continúa la exposición de los distintos algoritmos existentes para manipular s simplemente enlazadas; sin el lección anterior se presentaban algoritmos

Más detalles

En las preguntas 1-30 indique la respuesta correcta. e= ninguna de las anteriores

En las preguntas 1-30 indique la respuesta correcta. e= ninguna de las anteriores Estructuras de Información... 1 En las preguntas 1-30 indique la respuesta correcta. e= ninguna de las anteriores 1. Cuál de las siguientes afirmaciones es falsa: a. Un nodo es un objeto, un link es un

Más detalles

Tema 6. Gestión dinámica de memoria

Tema 6. Gestión dinámica de memoria Tema 6. Gestión dinámica de memoria http://aulavirtual.uji.es José M. Badía, Begoña Martínez, Antonio Morales y José M. Sanchiz {badia, bmartine, morales, sanchiz@icc.uji.es Estructuras de datos y de la

Más detalles

Tema 6: Memoria dinámica

Tema 6: Memoria dinámica : Programación 2 Curso 2013-2014 Índice 1 2 3 El tamaño es fijo y se conoce al implementar el programa Declaración de variables int i=0; char c; float vf[3]={1.0, 2.0, 3.0}; i c vf[0] vf[1] vf[2] 0 1.0

Más detalles

Implementación de las Clases Pila, Cola, Lista y Arbol

Implementación de las Clases Pila, Cola, Lista y Arbol 1/1 Implementación de las Clases Pila, Cola, Lista y Arbol Josefina Sierra Santibáñez 13 de mayo de 2018 2/1 Implementación de Estructuras de Datos Implementaremos cada estructura de datos en dos niveles.

Más detalles

Tema 14: Arreglos estáticos en C

Tema 14: Arreglos estáticos en C Tema 14: Arreglos estáticos en C Solicitado: Ejercicios 05: Ejercicios con arreglos estáticos unidimensionales M. en C. Edgardo Adrián Franco Martínez http://www.eafranco.com edfrancom@ipn.mx @edfrancom

Más detalles

TEMA 8: Gestión dinámica de memoria

TEMA 8: Gestión dinámica de memoria TEMA 8: Gestión dinámica de memoria 8.1.-Tipo de datos puntero Hasta ahora, los tipos de datos que hemos visto (a excepción de strings y ficheros) eran estructuras de datos estáticas, es decir, estructuras

Más detalles

GESTIÓN DE MEMORIA DINÁMICA EN C 1. Creación y destrucción de variables dinámicas

GESTIÓN DE MEMORIA DINÁMICA EN C 1. Creación y destrucción de variables dinámicas GESTIÓN DE MEMORIA DINÁMICA EN C 1. Creación y destrucción de variables dinámicas en lenguaje algorítmico Partimos de: p: puntero de tipo T; ok, lógico; En general, el MGMD dispondrá d de alguna versión

Más detalles

Estructura de Datos Tema 6. Árboles. Contenido 14/06/2018

Estructura de Datos Tema 6. Árboles. Contenido 14/06/2018 Estructura de Datos Tema 6. Árboles Presenta: David Martínez Torres Universidad Tecnológica de la Mixteca Instituto de Computación Oficina No. dtorres@mixteco.utm.mx Contenido 1. Definición y operaciones

Más detalles

Estructura de Datos: Lista. Facultad Ingeniería y Tecnología Informática Tecnicatura en Programación de Computadoras. Autora: Prof.

Estructura de Datos: Lista. Facultad Ingeniería y Tecnología Informática Tecnicatura en Programación de Computadoras. Autora: Prof. Facultad Ingeniería y Tecnología Informática Tecnicatura en Programación de Computadoras Estructura de Datos: Lista Autora: Lunes a viernes de 9 a 21 h. Torre Universitaria, Zabala 1837, primer nivel inferior.

Más detalles

4. Estructuras (registros) Programación II, FCFM, BUAP

4. Estructuras (registros) Programación II, FCFM, BUAP 4. Estructuras (registros) Programación II, FCFM, BUAP Son colecciones de variables relacionadas bajo un nombre. Permiten agrupar variables del mismo o diferente tipo, bajo un mismo nombre. Inclusive puede

Más detalles

Implementación de las Clases Pila, Cola, Lista y Arbol

Implementación de las Clases Pila, Cola, Lista y Arbol 1/1 Implementación de las Clases Pila, Cola, Lista y Arbol Josefina Sierra Santibáñez 28 de noviembre de 2017 2/1 Implementación de Estructuras de Datos Implementaremos cada estructura de datos en dos

Más detalles

Asignación de Memoria (Allocation) Algoritmos y Estructuras de Datos I. Asignación de Dinámica de Memoria

Asignación de Memoria (Allocation) Algoritmos y Estructuras de Datos I. Asignación de Dinámica de Memoria Asignación de Memoria (Allocation) Algoritmos y Estructuras de Datos I Segundo cuatrimestre de 2014 Departamento de Computación - FCEyN - UBA Programación imperativa - clase 14 Memoria dinámica y listas

Más detalles

PUNTEROS O APUNTADORES C++

PUNTEROS O APUNTADORES C++ PUNTEROS O APUNTADORES C++ TRANSVERSAL DE PROGRAMACIÓN BÁSICA INGENIERÍA DE SISTEMAS En el presente documente se hace una breve explicación a la gestión dinámica de memoria en el lenguaje C++. Se incluyen

Más detalles

Informática PRÀCTICA 9 Curs Práctica Nº 9: Rango y precisión de representación de números en el ordenador.

Informática PRÀCTICA 9 Curs Práctica Nº 9: Rango y precisión de representación de números en el ordenador. Departamento de Práctica Nº 9: Rango y precisión de representación de números en el ordenador. Uso de punteros Objetivos de la práctica: - Entender la representación de números (enteros y reales) en el

Más detalles

PUNTEROS (Apuntadores)

PUNTEROS (Apuntadores) PUNTEROS (Apuntadores) Unidad III INTRODUCCIÓN A PUNTEROS. CONCEPTOS BÁSICOS. DECLARACIÓN DE PUNTEROS. PUNTEROS Como una colección de posiciones de memoria consecutivas. En ella se almacenan los distintos

Más detalles

Estructura de Datos ARREGLOS

Estructura de Datos ARREGLOS Estructura de Datos ARREGLOS ESTRUCTURAS DE INFORMACIÓN Una estructura de datos o de información es una colección de datos que pueden ser caracterizados por su organización y las operaciones que se definen

Más detalles

Estructuras de Datos Dinámicas Contenido del Tema

Estructuras de Datos Dinámicas Contenido del Tema T E M A 2 Estructuras de Datos Dinámicas Contenido del Tema 2.1. Introducción a las estructuras de datos dinámicas. 2.2. Tipo Puntero 2.3. Aplicación: Listas enlazadas. Introducción a las Estructuras de

Más detalles

Árboles. Árboles. Árboles binarios de búsqueda. Árboles. Inserción en un árbol. Árbol binario de búsqueda

Árboles. Árboles. Árboles binarios de búsqueda. Árboles. Inserción en un árbol. Árbol binario de búsqueda Árboles Árboles Mario Medina C. mariomedina@udec.cl Árboles Estructura recursiva Árbol vacío 0 o más árboles hijos Altura ilimitada Árbol binario A lo más dos hijos: izquierdo y derecho Árboles Árboles

Más detalles

Punteros. Lenguaje C ANSI

Punteros. Lenguaje C ANSI Punteros. Lenguaje C ANSI Qué es un PUNTERO?: Un puntero es un objeto que apunta a otro objeto. Es decir, una variable cuyo valor es la dirección de memoria de otra variable. No hay que confundir una dirección

Más detalles

Lista Simple con Puntero al Principio y Puntero al Final

Lista Simple con Puntero al Principio y Puntero al Final Unidad 3 Estructuras de Datos Avanzadas Introducción Hasta el momento se estudiaron las siguientes estructuras estáticas y dinámicas básicas para representar diferentes colecciones de elementos: Arreglo

Más detalles

Tema 3. Estructura de datos lineales. J.T.P. Maria Eugenia Valesani - Programacion 1 - Fa.Ce.Na.

Tema 3. Estructura de datos lineales. J.T.P. Maria Eugenia Valesani - Programacion 1 - Fa.Ce.Na. Tema Estructura de datos lineales . Introducción Las estructuras de datos dinámicas son una colección de elementos (también llamados nodos) que normalmente son registros con la particularidad que crecen

Más detalles

U.A.B.C. Facultad de Ingeniería Programación Estructurada UNIDAD III

U.A.B.C. Facultad de Ingeniería Programación Estructurada UNIDAD III UNIDAD III Funciones 3.1 Forma general de una función. C fué diseñado como un lenguaje de programación estructurado, también llamado programación modular. Por esta razón, para escribir un programa se divide

Más detalles

TEMA 2. EL LENGUAJE C. ELEMENTOS BÁSICOS

TEMA 2. EL LENGUAJE C. ELEMENTOS BÁSICOS TEMA 2. EL LENGUAJE C. ELEMENTOS BÁSICOS Una vez que ya sabes crear tus propios programas, vamos a analizar los fundamentos del lenguaje de programación C. Este capítulo incluye además los siguientes temas:

Más detalles