9A9A9A9A Grado en Ingeniería Informática Grado en Ingeniería del Software Grado en Ingeniería de Computadores Luis Hernández Yáñez Facultad de Informática.

Slides:



Advertisements
Presentaciones similares
Curso de java básico (scjp)
Advertisements

8 Grado en Ingeniería Informática Grado en Ingeniería del Software Grado en Ingeniería de Computadores Luis Hernández Yáñez Facultad de Informática Universidad.
6 Grado en Ingeniería Informática Grado en Ingeniería del Software Grado en Ingeniería de Computadores Luis Hernández Yáñez Facultad de Informática Universidad.
ÁRBOLES EN C UNIVERSIDAD “ALONSO DE OJEDA” Facultad de Ingeniería
Computadoras y programación
TDA LISTA ESTRUCTURAS DE DATOS.
Unidad 5 Listas Enlazadas Bibliografía: Algoritmos y Estructuras de datos de Aguilar y Martinez. Unidad 9 Autor: Ing Rolando Simon Titiosky.
Listas enlazadas c++ Prof. Franklin Cedeño.
Programación II Listas
7A7A7A7A Grado en Ingeniería Informática Grado en Ingeniería del Software Grado en Ingeniería de Computadores Luis Hernández Yáñez Facultad de Informática.
Estructuras de datos y algoritmos
Utilización de un TAD Arbol.
1 Extensión de un Estructura de Datos Agustín J. González ELO-320: Estructura de Datos y Algoritmos.
Programación y Estructuras de Datos
Alumna : Cristina Gabriela Morocho Chacón Materia: Computación Carrera : Economía Fecha: Lunes 16 de enero del 2012.
Desarrollo de Aplicaciones para Internet
7 Grado en Ingeniería Informática Grado en Ingeniería del Software Grado en Ingeniería de Computadores Luis Hernández Yáñez Facultad de Informática Universidad.
6 Grado en Ingeniería Informática Grado en Ingeniería del Software Grado en Ingeniería de Computadores Luis Hernández Yáñez / Pablo Moreno Ger Facultad.

8A8A8A8A Grado en Ingeniería Informática Grado en Ingeniería del Software Grado en Ingeniería de Computadores Luis Hernández Yáñez Facultad de Informática.

Árboles binarios. Algoritmos básicos
Tratamiento de listas en Java
UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO
Todo creador de una obra intelectual, sea ésta artística -pintura, escultura, danza, arquitectónica, etc.-, literaria, musical o de cómputo, es un autor.
3 Grado en Ingeniería Informática Grado en Ingeniería del Software Grado en Ingeniería de Computadores Luis Hernández Yáñez Facultad de Informática Universidad.
Informática II 1 Diego Fernando Serna RestrepoSemestre 2011/2.
8 Grado en Ingeniería Informática Grado en Ingeniería del Software Grado en Ingeniería de Computadores Luis Hernández Yáñez Facultad de Informática Universidad.
Implementación de Listas
Oscar Bedoya. Edificio 331, 2º piso, E.I.S.C. Estructuras de datos y algoritmos.
Herramientas para el acceso directo a memoria en C++
5A5A5A5A Grado en Ingeniería Informática Grado en Ingeniería del Software Grado en Ingeniería de Computadores Luis Hernández Yáñez/Pablo Moreno Ger Facultad.
CI TEORIA semana 8 Subprogramas o funciones Definición de funciones.
4A4A4A4A Grado en Ingeniería Informática Grado en Ingeniería del Software Grado en Ingeniería de Computadores Luis Hernández Yáñez Facultad de Informática.
Estructuras dinámicas de datos, TAD Lista, parte 2
Igor Santos Grueiro. De este tipo de pilas NO vamos a hablar.
Grado en Ingeniería electrónica y comunicaciones Facultad de Físicas Universidad Complutense P1 Fundamentos de Programación.
ÁRBOLES BINARIOS DE BÚSQUEDA
C++ LISTAS C++ 11/04/2017 Ing. Edgar Ruiz Lizama.
4 Grado en Ingeniería Informática Grado en Ingeniería del Software Grado en Ingeniería de Computadores Luis Hernández Yáñez Raquel Hervás Ballesteros Facultad.
4 Grado en Ingeniería Informática Grado en Ingeniería del Software Grado en Ingeniería de Computadores Luis Hernández Yáñez Facultad de Informática Universidad.
Estructura de Datos y Algoritmos
Árboles binarios de búsqueda
Estructuras de Datos Dinámicas: Listas Programación I Departamento de Informática Universidad Nacional de San Luis Argentina 2014.
LISTA DOBLEMENTE ENLAZADA
Dinamismo y Contenedores Facultad de Ciencias Exactas y Naturales Universidad de Buenos Aires (C++ Avanzado) Depto. de Computación Algoritmos y Estructuras.
OCW Universidad de Cantabria Licencia: CC Attribution 3.0 Sergio Martínez Martínez D IRECTOR DE LA U NIDAD DE A POYO A LA D OCENCIA V IRTUAL VICERRECTORADO.
Grafos..
Diseño de Algoritmos. Curso J.L. Leiva O. TEMA3TEMA3 TEMA3TEMA3 Estructuras Dinámicas Contenido del Tema Profesor: José Luis Leiva Olivencia. Despacho:
QUE SON LAS WIKIS DEFINICION Sitio web que permite la edición de sus contenidos por parte de las personas que acceden a él, con ciertas restricciones mínimas.
Algoritmos y Estructuras de datos Listas Doblemente enlazadas
Integrantes: Kleber García Lisseth Celi Ma. Belén Carrión.
3A3A3A3A Grado en Ingeniería Informática Grado en Ingeniería del Software Grado en Ingeniería de Computadores Luis Hernández Yáñez Facultad de Informática.
5 Grado en Ingeniería Informática Grado en Ingeniería del Software Grado en Ingeniería de Computadores Luis Hernández Yáñez Facultad de Informática Universidad.
Listas. Utilización de un TAD Lista. Interfaz del TAD LISTA public interface Lista { void crearNodo (); /*Crea un nuevo nodo en el TadLista*/ int devolverClave.
Comparte, re-usa y remixa -legalmente. Cuando bajamos fotos o buscamos recursos gráficos, etc., muchas veces no sabemos de que forma podemos utilizarlos.
Laboratorio de programación
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Tipo.
Listas Dinámicas.
Licencias de uso aplicado a internet Oneida García Gómez.
UNIDAD 8 Lista Enlazada: Eliminar Deseamos eliminar un elemento llamado elem de la lista enlazada. Es posible que la variable ini sea modificada. main(){
1 ListaUna Lista se define como una serie de N elementos E 1, E 2,..., E N, ordenados de manera consecutiva, es decir, el elemento E k (que se denomina.
Factorías e Iterables Introducción del concepto de patrón de diseño Construcción de tipos para recorridos con for extendido Fundamentos de Programación.
Introducción al Lenguaje C (I) Tipos básicos, arrays y punteros Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión
UNIVERSIDAD DIEGO PORTALES Facultad de Ingeniería Programación Avanzada TIPOS ABSTRACTOS DE DATOS TAD Tema: TIPOS ABSTRACTOS DE DATOS TAD Subtema: COLAS.
UNIVERSIDAD DIEGO PORTALES Facultad de Ingeniería Programación Avanzada TIPOS ABSTRACTOS DE DATOS TAD Tema: TIPOS ABSTRACTOS DE DATOS TAD Subtema: LISTAS.
Lenguaje de Programación II Prof. Rafael Montenegro B. Carrera: T.S.U en Informática Periodo: 2014-I.
Tipos de licencias en contenidos digitales Sesión 3.
Índice Parte I. Preparación de la asignatura (continuación) Actividades 50 Bases de datos 51 Chat 55 Consulta 56 La vista Estudiante 57 Menú desplegable.
LISTAS..
Transcripción de la presentación:

9A9A9A9A Grado en Ingeniería Informática Grado en Ingeniería del Software Grado en Ingeniería de Computadores Luis Hernández Yáñez Facultad de Informática Universidad Complutense Fundamentos de la programación

Luis Hernández Yáñez Fundamentos de la programación: Punteros y memoria dinámica (Anexo) Aritmética de punteros940 Recorrido de arrays con punteros953 Referencias962 Listas enlazadas964

Luis Hernández Yáñez Página 940 Fundamentos de la programación: Punteros y memoria dinámica (Anexo)

Luis Hernández Yáñez Operaciones aritméticas con punteros La aritmética de punteros es una aritmética un tanto especial... Trabaja tomando como unidad de cálculo el tamaño del tipo base int dias[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; typedef int* tIntPtr; tIntPtr punt = dias; punt empieza apuntando al primer elemento del array: cout << *punt << endl; // Muestra 31 (primer elemento) punt++; punt++ hace que punt pase a apuntar al siguiente elemento cout << *punt << endl; // Muestra 28 (segundo elemento) A la dirección de memoria actual se le suman tantas unidades como bytes (4) ocupe en memoria un dato de ese tipo ( int ) Página 941 Fundamentos de la programación: Punteros y memoria dinámica (Anexo)

Luis Hernández Yáñez int dias[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; 31, 31, 30, 31, 30, 31 }; typedef int* tIntPtr; tIntPtr punt = dias; Página 942 Fundamentos de la programación: Punteros y memoria dinámica (Anexo)...dias[0]0F03:1A38 0F03:1A39 0F03:1A3A 0F03:1A3B dias[1]0F03:1A3C 0F03:1A3D 0F03:1A3E 0F03:1A3F dias[2]0F03:1A40 0F03:1A41 0F03:1A42 0F03:1A43... dias0F07:04170F 0F07: F07:04191A 0F07:041A38 punt0F07:041B0F 0F07:041C03 0F07:041D1A 0F07:041E

Luis Hernández Yáñez int dias[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; 31, 31, 30, 31, 30, 31 }; typedef int* tIntPtr; tIntPtr punt = dias; punt++; punt-- hace que apunte al elemento anterior Página 943 Fundamentos de la programación: Punteros y memoria dinámica (Anexo)...dias[0]0F03:1A38 0F03:1A39 0F03:1A3A 0F03:1A3B dias[1]0F03:1A3C 0F03:1A3D 0F03:1A3E 0F03:1A3F dias[2]0F03:1A40 0F03:1A41 0F03:1A42 0F03:1A43... dias0F07:04170F 0F07: F07:04191A 0F07:041A38 punt0F07:041B0F 0F07:041C03 0F07:041D1A 0F07:041E3C

Luis Hernández Yáñez int dias[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; 31, 31, 30, 31, 30, 31 }; typedef int* tIntPtr; tIntPtr punt = dias; punt = punt + 2; Restando pasamos a elementos anteriores Página 944 Fundamentos de la programación: Punteros y memoria dinámica (Anexo)...dias[0]0F03:1A38 0F03:1A39 0F03:1A3A 0F03:1A3B dias[1]0F03:1A3C 0F03:1A3D 0F03:1A3E 0F03:1A3F dias[2]0F03:1A40 0F03:1A41 0F03:1A42 0F03:1A43... dias0F07:04170F 0F07: F07:04191A 0F07:041A38 punt0F07:041B0F 0F07:041C03 0F07:041D1A 0F07:041E

Luis Hernández Yáñez int dias[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; 31, 31, 30, 31, 30, 31 }; typedef int* tIntPtr; tIntPtr punt = dias; punt = punt + 2; int num = punt - dias; Nº de elementos entre los punteros Página 945 Fundamentos de la programación: Punteros y memoria dinámica (Anexo)...dias[0]0F03:1A38 0F03:1A39 0F03:1A3A 0F03:1A3B dias[1]0F03:1A3C 0F03:1A3D 0F03:1A3E 0F03:1A3F dias[2]0F03:1A40 0F03:1A41 0F03:1A42 0F03:1A43... dias0F07:04170F 0F07: F07:04191A 0F07:041A38 punt0F07:041B0F 0F07:041C03 0F07:041D1A 0F07:041E3C

Luis Hernández Yáñez Otro tipo base short int (2 bytes) short int dias[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; 31, 30, 31, 31, 30, 31, 30, 31}; typedef short int* tSIPtr; tSIPtr punt = dias; Página 946 Fundamentos de la programación: Punteros y memoria dinámica (Anexo)...dias[0]0F03:1A38 0F03:1A39 dias[1]0F03:1A3A 0F03:1A3B dias[2]0F03:1A3C 0F03:1A3D dias[3]0F03:1A3E 0F03:1A3F dias[4]0F03:1A40 0F03:1A41... dias0F07:04170F 0F07: F07:04191A 0F07:041A38 punt0F07:041B0F 0F07:041C03 0F07:041D1A 0F07:041E

Luis Hernández Yáñez short int dias[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; 31, 30, 31, 31, 30, 31, 30, 31}; typedef short int* tSIPtr; tSIPtr punt = dias; punt++; Página 947 Fundamentos de la programación: Punteros y memoria dinámica (Anexo)...dias[0]0F03:1A38 0F03:1A39 dias[1]0F03:1A3A 0F03:1A3B dias[2]0F03:1A3C 0F03:1A3D dias[3]0F03:1A3E 0F03:1A3F dias[4]0F03:1A40 0F03:1A41... dias0F07:04170F 0F07: F07:04191A 0F07:041A38 punt0F07:041B0F 0F07:041C03 0F07:041D1A 0F07:041E3A

Luis Hernández Yáñez short int dias[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; 31, 30, 31, 31, 30, 31, 30, 31}; typedef short int* tSIPtr; tSIPtr punt = dias; punt++; punt = punt + 3; Página 948 Fundamentos de la programación: Punteros y memoria dinámica (Anexo)...dias[0]0F03:1A38 0F03:1A39 dias[1]0F03:1A3A 0F03:1A3B dias[2]0F03:1A3C 0F03:1A3D dias[3]0F03:1A3E 0F03:1A3F dias[4]0F03:1A40 0F03:1A41... dias0F07:04170F 0F07: F07:04191A 0F07:041A38 punt0F07:041B0F 0F07:041C03 0F07:041D1A 0F07:041E

Luis Hernández Yáñez short int dias[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; 31, 30, 31, 31, 30, 31, 30, 31}; typedef short int* tSIPtr; tSIPtr punt = dias; punt++; punt = punt + 3; punt--; Página 949 Fundamentos de la programación: Punteros y memoria dinámica (Anexo)...dias[0]0F03:1A38 0F03:1A39 dias[1]0F03:1A3A 0F03:1A3B dias[2]0F03:1A3C 0F03:1A3D dias[3]0F03:1A3E 0F03:1A3F dias[4]0F03:1A40 0F03:1A41... dias0F07:04170F 0F07: F07:04191A 0F07:041A38 punt0F07:041B0F 0F07:041C03 0F07:041D1A 0F07:041E3E

Luis Hernández Yáñez short int dias[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; 31, 30, 31, 31, 30, 31, 30, 31}; typedef short int* tSIPtr; tSIPtr punt = dias; punt++; punt = punt + 3; punt--; tSIPtr punt2; Página 950 Fundamentos de la programación: Punteros y memoria dinámica (Anexo)...dias[0]0F03:1A38 0F03:1A39 dias[1]0F03:1A3A 0F03:1A3B dias[2]0F03:1A3C 0F03:1A3D dias[3]0F03:1A3E 0F03:1A3F dias[4]0F03:1A40 0F03:1A41... dias0F07:04170F 0F07: F07:04191A 0F07:041A38 punt0F07:041B0F 0F07:041C03 0F07:041D1A 0F07:041E3E punt20F07:041F?

Luis Hernández Yáñez short int dias[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; 31, 30, 31, 31, 30, 31, 30, 31}; typedef short int* tSIPtr; siPtr punt = dias; punt++; punt = punt + 3; punt--; tSIPtr punt2; punt2 = dias; Página 951 Fundamentos de la programación: Punteros y memoria dinámica (Anexo)...dias[0]0F03:1A38 0F03:1A39 dias[1]0F03:1A3A 0F03:1A3B dias[2]0F03:1A3C 0F03:1A3D dias[3]0F03:1A3E 0F03:1A3F dias[4]0F03:1A40 0F03:1A41... dias0F07:04170F 0F07: F07:04191A 0F07:041A38 punt0F07:041B0F 0F07:041C03 0F07:041D1A 0F07:041E3E punt20F07:041F0F

Luis Hernández Yáñez short int dias[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; 31, 30, 31, 31, 30, 31, 30, 31}; typedef short int* tSIPtr; siPtr punt = dias; punt++; punt = punt + 3; punt--; tSIPtr punt2; punt2 = dias; cout << punt – punt2; // 3 Página 952 Fundamentos de la programación: Punteros y memoria dinámica (Anexo)...dias[0]0F03:1A38 0F03:1A39 dias[1]0F03:1A3A 0F03:1A3B dias[2]0F03:1A3C 0F03:1A3D dias[3]0F03:1A3E 0F03:1A3F dias[4]0F03:1A40 0F03:1A41... dias0F07:04170F 0F07: F07:04191A 0F07:041A38 punt0F07:041B0F 0F07:041C03 0F07:041D1A 0F07:041E3E punt20F07:041F0F

Luis Hernández Yáñez Página 953 Fundamentos de la programación: Punteros y memoria dinámica (Anexo)

Luis Hernández Yáñez Punteros como iteradores para arrays const int MAX = 100; typedef int tArray[MAX]; typedef struct { tArray elementos; tArray elementos; int cont; int cont; } tLista; typedef int* tIntPtr; tLista lista; Usamos un puntero como iterador para recorrer el array: tIntPtr punt = lista.elementos; for (int i = 0; i < lista.cont; i++) { cout << *punt << endl; cout << *punt << endl; punt++; punt++;} Página 954 Fundamentos de la programación: Punteros y memoria dinámica (Anexo) arraypunt.cpparraypunt.cpp

Luis Hernández Yáñez... intPtr punt = lista.elementos; Página 955 Fundamentos de la programación: Punteros y memoria dinámica (Anexo) lista.elementoslista.elementospuntpunt 8 8lista.contlista.cont

Luis Hernández Yáñez... for (int i = 0; i < lista.cont; i++) { cout << *punt << endl; cout << *punt << endl; punt++; punt++;} Página 956 Fundamentos de la programación: Punteros y memoria dinámica (Anexo) lista.elementoslista.elementospuntpunt 8 8lista.contlista.cont 0 0ii

Luis Hernández Yáñez Página 957 Fundamentos de la programación: Punteros y memoria dinámica (Anexo) lista.elementoslista.elementospuntpunt 8 8lista.contlista.cont 1 1ii44... for (int i = 0; i < lista.cont; i++) { cout << *punt << endl; cout << *punt << endl; punt++; punt++;}

Luis Hernández Yáñez Página 958 Fundamentos de la programación: Punteros y memoria dinámica (Anexo) lista.elementoslista.elementospuntpunt 8 8lista.contlista.cont 2 2ii for (int i = 0; i < lista.cont; i++) { cout << *punt << endl; cout << *punt << endl; punt++; punt++;}

Luis Hernández Yáñez... for (int i = 0; i < lista.cont; i++) { cout << *punt << endl; cout << *punt << endl; punt++; punt++;} Página 959 Fundamentos de la programación: Punteros y memoria dinámica (Anexo) lista.elementoslista.elementospuntpunt 8 8lista.contlista.cont 3 3ii

Luis Hernández Yáñez... for (int i = 0; i < lista.cont; i++) { cout << *punt << endl; cout << *punt << endl; punt++; punt++;} Página 960 Fundamentos de la programación: Punteros y memoria dinámica (Anexo) lista.elementoslista.elementospuntpunt 8 8lista.contlista.cont 7 7ii

Luis Hernández Yáñez... for (int i = 0; i < lista.cont; i++) { cout << *punt << endl; cout << *punt << endl; punt++; punt++;} Página 961 Fundamentos de la programación: Punteros y memoria dinámica (Anexo) lista.elementoslista.elementospuntpunt 8 8lista.contlista.cont 8 8ii

Luis Hernández Yáñez Página 962 Fundamentos de la programación: Punteros y memoria dinámica (Anexo)

Luis Hernández Yáñez Nombres alternativos para los datos Una referencia es una nueva forma de llamar a una variable Nos permiten referirnos a una variable con otro identificador: int x = 10; int &z = x; x y z son ahora la misma variable (comparten memoria) Cualquier cambio en x afecta a z y cualquier cambio en z afecta a x z = 30; cout << x; Las referencias se usan en el paso de parámetros por referencia Página 963 Fundamentos de la programación: Punteros y memoria dinámica (Anexo)

Luis Hernández Yáñez Página 964 Fundamentos de la programación: Punteros y memoria dinámica (Anexo)

Luis Hernández Yáñez Página 965 Fundamentos de la programación: Punteros y memoria dinámica (Anexo) Una implementación dinámica de listas enlazadas Cada elemento de la lista apunta al siguiente elemento: struct tNodo; // Declaración anticipada typedef tNodo *tLista; struct tNodo { tRegistro reg; tRegistro reg; tLista sig; tLista sig;}; Una lista ( tLista ) es un puntero a un nodo Si el puntero vale NULL, no apunta a ningún nodo: lista vacía Un nodo ( tNodo ) es un elemento seguido de una lista tRegistro tListatListaregregsigsig Elemento seguido de una lista ListaVacía ¡Definición recursiva!

Luis Hernández Yáñez Página 966 Fundamentos de la programación: Punteros y memoria dinámica (Anexo) Cada elemento de la lista en su nodo Apuntará al siguiente elemento o a ninguno ( NULL ) struct tNodo; // Declaración anticipada typedef tNodo *tLista; struct tNodo { tRegistro reg; tRegistro reg; tLista sig; tLista sig;}; Además, un puntero al primer elemento (nodo) de la lista tLista lista = NULL; // Lista vacía listalista

Luis Hernández Yáñez Página 967 Fundamentos de la programación: Punteros y memoria dinámica (Anexo) struct tNodo; typedef tNodo *tLista; struct tNodo { tRegistro reg; tRegistro reg; tLista sig; tLista sig;}; tLista lista = NULL; // Lista vacía lista = new tNodo; lista->reg = nuevo(); lista->sig = NULL; listalista ítem1

Luis Hernández Yáñez Página 968 Fundamentos de la programación: Punteros y memoria dinámica (Anexo) tLista lista = NULL; // Lista vacía lista = new tNodo; lista->reg = nuevo(); lista->sig = NULL; tLista p; p = lista; listalista ítem1 pp

Luis Hernández Yáñez Página 969 Fundamentos de la programación: Punteros y memoria dinámica (Anexo) tLista lista = NULL; // Lista vacía lista = new tNodo; lista->reg = nuevo(); lista->sig = NULL; tLista p; p = lista; p->sig = new tNodo; p->sig->reg = nuevo(); p->sig->sig = NULL; listalista ítem1 pp ítem2

Luis Hernández Yáñez Página 970 Fundamentos de la programación: Punteros y memoria dinámica (Anexo) tLista lista = NULL; // Lista vacía lista = new tNodo; lista->reg = nuevo(); lista->sig = NULL; tLista p; p = lista; p->sig = new tNodo; p->sig->reg = nuevo(); p->sig->sig = NULL; p = p->sig; p->sig = new tNodo; p->sig->reg = nuevo(); p->sig->sig = NULL;... listalista tRegistro pp

Luis Hernández Yáñez Página 971 Fundamentos de la programación: Punteros y memoria dinámica (Anexo) Usamos la memoria que necesitamos, ni más ni menos Tantos elementos, tantos nodos hay en la lista ¡Pero perdemos el acceso directo! Algunas operaciones de la lista se complican y otras no A continuación tienes el módulo de lista implementado como lista enlazada... listalista tRegistro

Luis Hernández Yáñez Página 972 Fundamentos de la programación: Punteros y memoria dinámica (Anexo) struct tNodo; typedef tNodo *tLista; struct tNodo { tRegistro reg; tRegistro reg; tLista sig; tLista sig;}; const string BD = "bd.txt"; void mostrar(tLista lista); void insertar(tLista &lista, tRegistro registro, bool &ok); void eliminar(tLista &lista, int code, bool &ok); tLista buscar(tLista lista, int code); // Devuelve puntero void cargar(tLista &lista, bool &ok); void guardar(tLista lista); void destruir(tLista &lista); // Liberar la memoria dinámica listaenlazada.hlistaenlazada.h

Luis Hernández Yáñez Página 973 Fundamentos de la programación: Punteros y memoria dinámica (Anexo) void insertar(tLista &lista, tRegistro registro, bool &ok) { ok = true; ok = true; tLista nuevo = new tNodo; tLista nuevo = new tNodo; if (nuevo == NULL) { if (nuevo == NULL) { ok = false; // No hay más memoria dinámica ok = false; // No hay más memoria dinámica } else { else { nuevo->reg = registro; nuevo->reg = registro; nuevo->sig = NULL; nuevo->sig = NULL; if (lista == NULL) { // Lista vacía if (lista == NULL) { // Lista vacía lista = nuevo; lista = nuevo; } else { else { tLista p = lista; tLista p = lista; // Localizamos el último nodo... // Localizamos el último nodo... while (p->sig != NULL) { while (p->sig != NULL) { p = p->sig; p = p->sig; } p->sig = nuevo; p->sig = nuevo; } } }... listaenlazada.cpplistaenlazada.cpp listalistanuevonuevo listalistanuevonuevopp

Luis Hernández Yáñez Página 974 Fundamentos de la programación: Punteros y memoria dinámica (Anexo) void eliminar(tLista &lista, int code, bool &ok) { ok = true; ok = true; tLista p = lista; tLista p = lista; if (p == NULL) { if (p == NULL) { ok = false; // Lista vacía ok = false; // Lista vacía } else if (p->reg.codigo == code) { // El primero else if (p->reg.codigo == code) { // El primero lista = p->sig; lista = p->sig; delete p; delete p; } else { else { tLista ant = p; tLista ant = p; p = p->sig; p = p->sig; bool encontrado = false; bool encontrado = false; while ((p != NULL) && !encontrado) { while ((p != NULL) && !encontrado) { if (p->reg.codigo == code) { if (p->reg.codigo == code) { encontrado = true; encontrado = true; } else { else { ant = p; ant = p; p = p->sig; p = p->sig; } }... }... listalistappantant pplistalista

Luis Hernández Yáñez Página 975 Fundamentos de la programación: Punteros y memoria dinámica (Anexo) if (!encontrado) { if (!encontrado) { ok = false; // No existe ese código ok = false; // No existe ese código } else { else { ant->sig = p->sig; ant->sig = p->sig; delete p; delete p; } }}... listalista ppantant

Luis Hernández Yáñez Página 976 Fundamentos de la programación: Punteros y memoria dinámica (Anexo) tLista buscar(tLista lista, int code) { // Devuelve un puntero al nodo, o NULL si no se encuentra tLista p = lista; tLista p = lista; bool encontrado = false; bool encontrado = false; while ((p != NULL) && !encontrado) { while ((p != NULL) && !encontrado) { if (p->reg.codigo == code) { if (p->reg.codigo == code) { encontrado = true; encontrado = true; } else { else { p = p->sig; p = p->sig; } } return p; return p;} void mostrar(tLista lista) { cout << endl << "Elementos de la lista:" << endl cout << endl << "Elementos de la lista:" << endl << " " << endl; << " " << endl; tLista p = lista; tLista p = lista; while (p != NULL) { while (p != NULL) { mostrar(p->reg); mostrar(p->reg); p = p->sig; p = p->sig; } }...

Luis Hernández Yáñez Página 977 Fundamentos de la programación: Punteros y memoria dinámica (Anexo) void cargar(tLista &lista, bool &ok) { ifstream archivo; ifstream archivo; char aux; char aux; ok = true; ok = true; lista = NULL; lista = NULL; archivo.open(BD.c_str()); archivo.open(BD.c_str()); if (!archivo.is_open()) { if (!archivo.is_open()) { ok = false; ok = false; } else { else { tRegistro registro; tRegistro registro; tLista ult = NULL; tLista ult = NULL; archivo >> registro.codigo; archivo >> registro.codigo; while (registro.codigo != -1) { while (registro.codigo != -1) { archivo >> registro.valor; archivo >> registro.valor; archivo.get(aux); // Saltamos el espacio archivo.get(aux); // Saltamos el espacio getline(archivo, registro.nombre); getline(archivo, registro.nombre);......

Luis Hernández Yáñez Página 978 Fundamentos de la programación: Punteros y memoria dinámica (Anexo) if (lista == NULL) { if (lista == NULL) { lista = new tNodo; lista = new tNodo; ult = lista; ult = lista; } else { else { ult->sig = new tNodo; ult->sig = new tNodo; ult = ult->sig; ult = ult->sig; } ult->reg = registro; ult->reg = registro; ult->sig = NULL; ult->sig = NULL; archivo >> registro.codigo; archivo >> registro.codigo; } archivo.close(); archivo.close(); } return ok; return ok; }...

Luis Hernández Yáñez Página 979 Fundamentos de la programación: Punteros y memoria dinámica (Anexo) void guardar(tLista lista) { ofstream archivo; ofstream archivo; archivo.open(BD); archivo.open(BD); tLista p = lista; tLista p = lista; while (p != NULL) { while (p != NULL) { archivo registro.codigo registro.codigo << " "; archivo registro.valor registro.valor << " "; archivo registro.nombre registro.nombre << endl; p = p->sig; p = p->sig; } archivo.close(); archivo.close();} void destruir(tLista &lista) { tLista p; tLista p; while (lista != NULL) { while (lista != NULL) { p = lista; p = lista; lista = lista->sig; lista = lista->sig; delete p; delete p; }}

Luis Hernández Yáñez Licencia CC (Creative Commons) Creative CommonsCreative Commons Este tipo de licencias ofrecen algunos derechos a terceras personas bajo ciertas condiciones. Este documento tiene establecidas las siguientes: Pulsa en la imagen de arriba a la derecha para saber más. Fundamentos de la programación: Punteros y memoria dinámica (Anexo) Página 980 Reconocimiento (Attribution): En cualquier explotación de la obra autorizada por la licencia hará falta reconocer la autoría. No comercial (Non commercial): La explotación de la obra queda limitada a usos no comerciales. Compartir igual (Share alike): La explotación autorizada incluye la creación de obras derivadas siempre que mantengan la misma licencia al ser divulgadas.