Page 264

4.5 Introducci´ on a la gesti´ on de registros enlazados

lista

info

sig

info

3

sig

info

8

sig

2

Conceptualmente, es lo mismo que se ilustra en este gr´afico: 0

lista

1

2

3 8 2

Pero s´olo conceptualmente. En la implementaci´on, el nivel de complejidad al que nos enfrentamos es mucho mayor. Eso s´ı, a cambio ganaremos en flexibilidad y podremos ofrecer versiones eficientes de ciertas operaciones sobre listas de valores que implementadas con vectores din´amicos ser´ıan muy costosas. Por otra parte, aprender estas t´ecnicas supone una inversi´on a largo plazo: muchas estructuras din´ amicas que estudiar´as en cursos de Estructuras de Datos se basan en el uso de registros enlazados y, aunque mucho m´as complejas que las simples secuencias de valores, usan las mismas t´ecnicas b´asicas de gesti´on de memoria que aprender´as ahora. Para ir aprendiendo a usar estas t´ecnicas, gestionaremos ahora una lista con registros enlazados. La manejaremos directamente, desde un programa principal, y nos centraremos en la realizaci´ on de una serie de acciones que parten de un estado de la lista y la dejan en otro estado diferente. Ilustraremos cada una de las acciones mostrando con todo detalle qu´e ocurre paso a paso. En el siguiente apartado ((encapsularemos)) cada acci´on elemental (a˜ nadir elemento, borrar elemento, etc.) en una funci´ on independiente.

4.5.1.

Definici´ on y creaci´ on de la lista

Vamos a crear una lista de enteros. Empezamos por definir el tipo de los registros que componen la lista: 1 2 3 4

struct Nodo { int info; struct Nodo * sig; };

Un registro de tipo struct Nodo consta de dos elementos: un entero llamado info, que es la informaci´on que realmente nos importa, y un puntero a un elemento que es. . . ¡otro struct Nodo! (Observa que hay cierto nivel de recursi´ on o autoreferencia en la definici´on: un struct Nodo contiene un puntero a un struct Nodo. Por esta raz´ on, las estructuras que vamos a estudiar se denominan a veces estructuras recursivas.) Si quisi´eramos manejar una lista de puntos en el plano, tendr´ıamos dos opciones: 1. definir un registro con varios campos para la informaci´on relevante: 1 2 3 4 5

struct Nodo { float x ; float y ; struct Nodo * sig; }; x

lista

sig

x

sig

x

1.1

0.2

3.7

y

y

y

7.1

0.1

2.1

sig

2. definir un tipo adicional y utilizar un u ´nico campo de dicho tipo: 1 2 3 4

struct Punto { float x; float y; };

5 6 7 8 9

258

struct Nodo { struct Punto info; struct Nodo * sig; }; Introducci´ on a la Programaci´ on con C

Profile for esLibre.com

Introducción a la programación con c  

Introducción a la programación con c  

Advertisement