43
9A 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 undamentos de la programación Punteros y memoria dinámica ANEXO

Punteros y memoria dinámica

  • Upload
    lajos

  • View
    56

  • Download
    2

Embed Size (px)

DESCRIPTION

Fundamentos de la programación. Punteros y memoria dinámica. 9 A. 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. ANEXO. Índice. Aritmética de punteros940 - PowerPoint PPT Presentation

Citation preview

Page 1: Punteros y memoria dinámica

9A

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áticaUniversidad Complutense

Fundamentos de la programación

Punteros y memoria dinámica

ANEXO

Page 2: Punteros y memoria dinámica

Fundamentos de la programación: Punteros y memoria dinámica (Anexo)

Luis

Hern

ánde

z Yáñ

ez

ÍndiceAritmética de punteros 940Recorrido de arrays con punteros 953Referencias 962Listas enlazadas 964

Page 3: Punteros y memoria dinámica

Luis

Hern

ánde

z Yáñ

ez

Fundamentos de la programación

Página 3Fundamentos de la programación: Punteros y memoria dinámica (Anexo)

Aritmética de punteros

Page 4: Punteros y memoria dinámica

Fundamentos de la programación: Punteros y memoria dinámica (Anexo)

Luis

Hern

ánde

z Yáñ

ez

Aritmética de punterosOperaciones 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 baseint 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 elementocout << *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 4

Page 5: Punteros y memoria dinámica

Fundamentos de la programación: Punteros y memoria dinámica (Anexo)

Luis

Hern

ánde

z Yáñ

ez

Aritmética de punterosint dias[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };typedef int* tIntPtr;tIntPtr punt = dias;

Página 5

...

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

...

dias 0F07:0417 0F

0F07:0418 03

0F07:0419 1A

0F07:041A 38

punt 0F07:041B 0F

0F07:041C 03

0F07:041D 1A

0F07:041E 38

...

31

28

31

Page 6: Punteros y memoria dinámica

Fundamentos de la programación: Punteros y memoria dinámica (Anexo)

Luis

Hern

ánde

z Yáñ

ez

Aritmética de punterosint dias[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };typedef int* tIntPtr;tIntPtr punt = dias;punt++;

punt-- hace que apunte al elemento anterior

Página 6

...

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

...

dias 0F07:0417 0F

0F07:0418 03

0F07:0419 1A

0F07:041A 38

punt 0F07:041B 0F

0F07:041C 03

0F07:041D 1A

0F07:041E 3C

...

31

28

31

Page 7: Punteros y memoria dinámica

Fundamentos de la programación: Punteros y memoria dinámica (Anexo)

Luis

Hern

ánde

z Yáñ

ez

Aritmética de punterosint dias[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };typedef int* tIntPtr;tIntPtr punt = dias;punt = punt + 2;

Restando pasamos a elementos anteriores

Página 7

...

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

...

dias 0F07:0417 0F

0F07:0418 03

0F07:0419 1A

0F07:041A 38

punt 0F07:041B 0F

0F07:041C 03

0F07:041D 1A

0F07:041E 40

...

31

28

31

Page 8: Punteros y memoria dinámica

Fundamentos de la programación: Punteros y memoria dinámica (Anexo)

Luis

Hern

ánde

z Yáñ

ez

Aritmética de punterosint dias[12] = { 31, 28, 31, 30, 31, 30, 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 8

...

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

...

dias 0F07:0417 0F

0F07:0418 03

0F07:0419 1A

0F07:041A 38

punt 0F07:041B 0F

0F07:041C 03

0F07:041D 1A

0F07:041E 3C

...

31

28

31

Page 9: Punteros y memoria dinámica

Fundamentos de la programación: Punteros y memoria dinámica (Anexo)

Luis

Hern

ánde

z Yáñ

ez

Aritmética de punterosOtro tipo baseshort int (2 bytes)short int dias[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};typedef short int* tSIPtr;tSIPtr punt = dias;

Página 9

...

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

...

dias 0F07:0417 0F

0F07:0418 03

0F07:0419 1A

0F07:041A 38

punt 0F07:041B 0F

0F07:041C 03

0F07:041D 1A

0F07:041E 38

...

3128313031

Page 10: Punteros y memoria dinámica

Fundamentos de la programación: Punteros y memoria dinámica (Anexo)

Luis

Hern

ánde

z Yáñ

ez

Aritmética de punterosshort int dias[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};typedef short int* tSIPtr;tSIPtr punt = dias;punt++;

Página 10

...

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

...

dias 0F07:0417 0F

0F07:0418 03

0F07:0419 1A

0F07:041A 38

punt 0F07:041B 0F

0F07:041C 03

0F07:041D 1A

0F07:041E 3A

...

3128313031

Page 11: Punteros y memoria dinámica

Fundamentos de la programación: Punteros y memoria dinámica (Anexo)

Luis

Hern

ánde

z Yáñ

ez

Aritmética de punterosshort int dias[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};typedef short int* tSIPtr;tSIPtr punt = dias;punt++;punt = punt + 3;

Página 11

...

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

...

dias 0F07:0417 0F

0F07:0418 03

0F07:0419 1A

0F07:041A 38

punt 0F07:041B 0F

0F07:041C 03

0F07:041D 1A

0F07:041E 40

...

3128313031

Page 12: Punteros y memoria dinámica

Fundamentos de la programación: Punteros y memoria dinámica (Anexo)

Luis

Hern

ánde

z Yáñ

ez

Aritmética de punterosshort int dias[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};typedef short int* tSIPtr;tSIPtr punt = dias;punt++;punt = punt + 3;punt--;

Página 12

...

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

...

dias 0F07:0417 0F

0F07:0418 03

0F07:0419 1A

0F07:041A 38

punt 0F07:041B 0F

0F07:041C 03

0F07:041D 1A

0F07:041E 3E

...

3128313031

Page 13: Punteros y memoria dinámica

Fundamentos de la programación: Punteros y memoria dinámica (Anexo)

Luis

Hern

ánde

z Yáñ

ez

Aritmética de punterosshort int dias[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};typedef short int* tSIPtr;tSIPtr punt = dias;punt++;punt = punt + 3;punt--;tSIPtr punt2;

Página 13

...

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

...

dias 0F07:0417 0F

0F07:0418 03

0F07:0419 1A

0F07:041A 38

punt 0F07:041B 0F

0F07:041C 03

0F07:041D 1A

0F07:041E 3E

punt2 0F07:041F ?

3128313031

Page 14: Punteros y memoria dinámica

Fundamentos de la programación: Punteros y memoria dinámica (Anexo)

Luis

Hern

ánde

z Yáñ

ez

Aritmética de punterosshort int dias[12] = {31, 28, 31, 30, 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 14

...

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

...

dias 0F07:0417 0F

0F07:0418 03

0F07:0419 1A

0F07:041A 38

punt 0F07:041B 0F

0F07:041C 03

0F07:041D 1A

0F07:041E 3E

punt2 0F07:041F 0F

3128313031

Page 15: Punteros y memoria dinámica

Fundamentos de la programación: Punteros y memoria dinámica (Anexo)

Luis

Hern

ánde

z Yáñ

ez

Aritmética de punterosshort int dias[12] = {31, 28, 31, 30, 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 15

...

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

...

dias 0F07:0417 0F

0F07:0418 03

0F07:0419 1A

0F07:041A 38

punt 0F07:041B 0F

0F07:041C 03

0F07:041D 1A

0F07:041E 3E

punt2 0F07:041F 0F

3128313031

3

Page 16: Punteros y memoria dinámica

Luis

Hern

ánde

z Yáñ

ez

Fundamentos de la programación

Página 16Fundamentos de la programación: Punteros y memoria dinámica (Anexo)

Recorrido de arrays con punteros

Page 17: Punteros y memoria dinámica

Fundamentos de la programación: Punteros y memoria dinámica (Anexo)

Luis

Hern

ánde

z Yáñ

ez

Recorrido de arrays con punterosPunteros como iteradores para arrays

const int MAX = 100;typedef int tArray[MAX];typedef struct { tArray elementos; 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; punt++;}

Página 17

arraypunt.cpp

Page 18: Punteros y memoria dinámica

Fundamentos de la programación: Punteros y memoria dinámica (Anexo)

Luis

Hern

ánde

z Yáñ

ez

Punteros como iteradores para arrays...intPtr punt = lista.elementos;

Página 18

0 1 2 3 4 5 6 7 8 ... 98 99

4 13 3 47 53 19 7 48lista.elementos

punt

8lista.cont

Page 19: Punteros y memoria dinámica

Fundamentos de la programación: Punteros y memoria dinámica (Anexo)

Luis

Hern

ánde

z Yáñ

ez

Punteros como iteradores para arrays...for (int i = 0; i < lista.cont; i++) { cout << *punt << endl; punt++;}

Página 19

0 1 2 3 4 5 6 7 8 ... 98 99

4 13 3 47 53 19 7 48lista.elementos

punt

8lista.cont

0i

Page 20: Punteros y memoria dinámica

Fundamentos de la programación: Punteros y memoria dinámica (Anexo)

Luis

Hern

ánde

z Yáñ

ez

Punteros como iteradores para arrays

Página 20

0 1 2 3 4 5 6 7 8 ... 98 99

4 13 3 47 53 19 7 48lista.elementos

punt

8lista.cont

1i

4...for (int i = 0; i < lista.cont; i++) { cout << *punt << endl; punt++;}

Page 21: Punteros y memoria dinámica

Fundamentos de la programación: Punteros y memoria dinámica (Anexo)

Luis

Hern

ánde

z Yáñ

ez

Punteros como iteradores para arrays

Página 21

0 1 2 3 4 5 6 7 8 ... 98 99

4 13 3 47 53 19 7 48lista.elementos

punt

8lista.cont

2i

413

...for (int i = 0; i < lista.cont; i++) { cout << *punt << endl; punt++;}

Page 22: Punteros y memoria dinámica

Fundamentos de la programación: Punteros y memoria dinámica (Anexo)

Luis

Hern

ánde

z Yáñ

ez

...for (int i = 0; i < lista.cont; i++) { cout << *punt << endl; punt++;}

Punteros como iteradores para arrays

Página 22

0 1 2 3 4 5 6 7 8 ... 98 99

4 13 3 47 53 19 7 48lista.elementos

punt

8lista.cont

3i

. . .

4133

Page 23: Punteros y memoria dinámica

Fundamentos de la programación: Punteros y memoria dinámica (Anexo)

Luis

Hern

ánde

z Yáñ

ez

...for (int i = 0; i < lista.cont; i++) { cout << *punt << endl; punt++;}

Punteros como iteradores para arrays

Página 23

0 1 2 3 4 5 6 7 8 ... 98 99

4 13 3 47 53 19 7 48lista.elementos

punt

8lista.cont

7i

41334753197

Page 24: Punteros y memoria dinámica

Fundamentos de la programación: Punteros y memoria dinámica (Anexo)

Luis

Hern

ánde

z Yáñ

ez

...for (int i = 0; i < lista.cont; i++) { cout << *punt << endl; punt++;}

Punteros como iteradores para arrays

Página 24

0 1 2 3 4 5 6 7 8 ... 98 99

4 13 3 47 53 19 7 48lista.elementos

punt

8lista.cont

8i

4133475319748

Page 25: Punteros y memoria dinámica

Luis

Hern

ánde

z Yáñ

ez

Fundamentos de la programación

Página 25Fundamentos de la programación: Punteros y memoria dinámica (Anexo)

Referencias

Page 26: Punteros y memoria dinámica

Fundamentos de la programación: Punteros y memoria dinámica (Anexo)

Luis

Hern

ánde

z Yáñ

ez

ReferenciasNombres 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 xz = 30;cout << x;Las referencias se usan en el paso de parámetros por referencia

Página 26

Page 27: Punteros y memoria dinámica

Luis

Hern

ánde

z Yáñ

ez

Fundamentos de la programación

Página 27Fundamentos de la programación: Punteros y memoria dinámica (Anexo)

Listas enlazadas

Page 28: Punteros y memoria dinámica

Fundamentos de la programación: Punteros y memoria dinámica (Anexo)

Luis

Hern

ánde

z Yáñ

ez

Listas enlazadas

Página 28

Una implementación dinámica de listas enlazadasCada elemento de la lista apunta al siguiente elemento:struct tNodo; // Declaración anticipadatypedef tNodo *tLista;struct tNodo { tRegistro reg; 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 tLista

reg sig

Elemento seguido de una listaLista

Vacía¡Definición recursiva!

Page 29: Punteros y memoria dinámica

Fundamentos de la programación: Punteros y memoria dinámica (Anexo)

Luis

Hern

ánde

z Yáñ

ez

Implementación dinámica de listas enlazadas

Página 29

Cada elemento de la lista en su nodo

Apuntará al siguiente elemento o a ninguno (NULL)struct tNodo; // Declaración anticipadatypedef tNodo *tLista;struct tNodo { tRegistro reg; tLista sig;};Además, un puntero al primer elemento (nodo) de la listatLista lista = NULL; // Lista vacía

lista

Page 30: Punteros y memoria dinámica

Fundamentos de la programación: Punteros y memoria dinámica (Anexo)

Luis

Hern

ánde

z Yáñ

ez

Implementación dinámica de listas enlazadas

Página 30

struct tNodo;typedef tNodo *tLista;struct tNodo { tRegistro reg; tLista sig;};tLista lista = NULL; // Lista vacíalista = new tNodo;lista->reg = nuevo();lista->sig = NULL;

lista ítem1

Page 31: Punteros y memoria dinámica

Fundamentos de la programación: Punteros y memoria dinámica (Anexo)

Luis

Hern

ánde

z Yáñ

ez

Implementación dinámica de listas enlazadas

Página 31

tLista lista = NULL; // Lista vacíalista = new tNodo;lista->reg = nuevo();lista->sig = NULL;tLista p;p = lista;

lista ítem1

p

Page 32: Punteros y memoria dinámica

Fundamentos de la programación: Punteros y memoria dinámica (Anexo)

Luis

Hern

ánde

z Yáñ

ez

Implementación dinámica de listas enlazadas

Página 32

tLista lista = NULL; // Lista vacíalista = new tNodo;lista->reg = nuevo();lista->sig = NULL;tLista p;p = lista;p->sig = new tNodo;p->sig->reg = nuevo();p->sig->sig = NULL;

lista ítem1

p

ítem2

Page 33: Punteros y memoria dinámica

Fundamentos de la programación: Punteros y memoria dinámica (Anexo)

Luis

Hern

ánde

z Yáñ

ez

Implementación dinámica de listas enlazadas

Página 33

tLista lista = NULL; // Lista vacíalista = 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;...

lista tRegistro tRegistro

p

tRegistro

Page 34: Punteros y memoria dinámica

Fundamentos de la programación: Punteros y memoria dinámica (Anexo)

Luis

Hern

ánde

z Yáñ

ez

Implementación dinámica de listas enlazadas

Página 34

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...

lista tRegistro tRegistro tRegistro

Page 35: Punteros y memoria dinámica

Fundamentos de la programación: Punteros y memoria dinámica (Anexo)

Luis

Hern

ánde

z Yáñ

ez

Ejemplo de lista enlazada

Página 35

struct tNodo;typedef tNodo *tLista;struct tNodo { tRegistro reg; 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 punterovoid cargar(tLista &lista, bool &ok);void guardar(tLista lista);void destruir(tLista &lista); // Liberar la memoria dinámica

listaenlazada.h

Page 36: Punteros y memoria dinámica

Fundamentos de la programación: Punteros y memoria dinámica (Anexo)

Luis

Hern

ánde

z Yáñ

ez

Ejemplo de lista enlazada

Página 36

void insertar(tLista &lista, tRegistro registro, bool &ok) { ok = true; tLista nuevo = new tNodo; if (nuevo == NULL) { ok = false; // No hay más memoria dinámica } else { nuevo->reg = registro; nuevo->sig = NULL; if (lista == NULL) { // Lista vacía lista = nuevo; } else { tLista p = lista; // Localizamos el último nodo... while (p->sig != NULL) { p = p->sig; } p->sig = nuevo; } }} ...

listaenlazada.cpp

lista

nuevo

lista

nuevo

p

Page 37: Punteros y memoria dinámica

Fundamentos de la programación: Punteros y memoria dinámica (Anexo)

Luis

Hern

ánde

z Yáñ

ez

Ejemplo de lista enlazada

Página 37

void eliminar(tLista &lista, int code, bool &ok) { ok = true; tLista p = lista; if (p == NULL) { ok = false; // Lista vacía } else if (p->reg.codigo == code) { // El primero lista = p->sig; delete p; } else { tLista ant = p; p = p->sig; bool encontrado = false; while ((p != NULL) && !encontrado) { if (p->reg.codigo == code) { encontrado = true; } else { ant = p; p = p->sig; } } ...

lista

p

ant

p

lista

Page 38: Punteros y memoria dinámica

Fundamentos de la programación: Punteros y memoria dinámica (Anexo)

Luis

Hern

ánde

z Yáñ

ez

Ejemplo de lista enlazada

Página 38

if (!encontrado) { ok = false; // No existe ese código } else { ant->sig = p->sig; delete p; } }}...

lista

pant

Page 39: Punteros y memoria dinámica

Fundamentos de la programación: Punteros y memoria dinámica (Anexo)

Luis

Hern

ánde

z Yáñ

ez

Ejemplo de lista enlazada

Página 39

tLista buscar(tLista lista, int code) {// Devuelve un puntero al nodo, o NULL si no se encuentra tLista p = lista; bool encontrado = false; while ((p != NULL) && !encontrado) { if (p->reg.codigo == code) { encontrado = true; } else { p = p->sig; } } return p;}

void mostrar(tLista lista) { cout << endl << "Elementos de la lista:" << endl << "----------------------" << endl; tLista p = lista; while (p != NULL) { mostrar(p->reg); p = p->sig; }} ...

Page 40: Punteros y memoria dinámica

Fundamentos de la programación: Punteros y memoria dinámica (Anexo)

Luis

Hern

ánde

z Yáñ

ez

Ejemplo de lista enlazada

Página 40

void cargar(tLista &lista, bool &ok) { ifstream archivo; char aux; ok = true; lista = NULL; archivo.open(BD.c_str()); if (!archivo.is_open()) { ok = false; } else { tRegistro registro; tLista ult = NULL; archivo >> registro.codigo; while (registro.codigo != -1) { archivo >> registro.valor; archivo.get(aux); // Saltamos el espacio getline(archivo, registro.nombre); ...

Page 41: Punteros y memoria dinámica

Fundamentos de la programación: Punteros y memoria dinámica (Anexo)

Luis

Hern

ánde

z Yáñ

ez

Ejemplo de lista enlazada

Página 41

if (lista == NULL) { lista = new tNodo; ult = lista; } else { ult->sig = new tNodo; ult = ult->sig; } ult->reg = registro; ult->sig = NULL; archivo >> registro.codigo; } archivo.close(); } return ok;} ...

Page 42: Punteros y memoria dinámica

Fundamentos de la programación: Punteros y memoria dinámica (Anexo)

Luis

Hern

ánde

z Yáñ

ez

Ejemplo de lista enlazada

Página 42

void guardar(tLista lista) { ofstream archivo; archivo.open(BD); tLista p = lista; while (p != NULL) { archivo << p->registro.codigo << " "; archivo << p->registro.valor << " "; archivo << p->registro.nombre << endl; p = p->sig; } archivo.close();}

void destruir(tLista &lista) { tLista p; while (lista != NULL) { p = lista; lista = lista->sig; delete p; }}

Page 43: Punteros y memoria dinámica

Fundamentos de la programación: Punteros y memoria dinámica (Anexo)

Luis

Hern

ánde

z Yáñ

ez

Acerca de Creative CommonsLicencia CC (Creative 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.

Página 43

Reconocimiento (Attribution): En cualquier explotación de la obra autorizada por la licenciahará 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.