Listas enlazadas con Clases

Vicente
19 de Abril del 2004
Hola:

necesitava que me ayudaran o mas bien que si me pudieran explicar como funcionan las las listas enlazadas con clases , se como hacerlas con estructuras y apuntadores , pero con clases no me queda muy claro , no entiendo como ingresar , borrar, leer o moverse dentro de la lista....

Si alguien tiene un ejemplo de como hacerolo , se los agradecere si me lo mandan..

kamegeist
19 de Abril del 2004
no importa si usas programación estructurada, o si la usas con orientación a objectos, siempre vas a usar las estructuras de datos con punteros....

sin clases, tienes lo sgte para manejar, por ejemplo una lista enlazada simple así:

un struct en donde defines los datos que van a estar contenidos en los nodos de la lista y un campo que es el puntero al siguiente nodo....

después declararías un puntero cabeza del tipo struct anteriormente declarado y ya sabes el resto de la historia....

con clases sería "casi" lo mismo:

una clase donde tienes declarados los datos miembro que van a ser los datos que estaran en los nodos de la lista

aparte tendrías una clase llamada lista, donde tendrás un puntero (cabeza de la lista) del tipo de la clase anterior.... o sea estarías haciendo composición, o sea un dato miembro de una clase es un objeto de otra clase existente. en esta misma clase lista, tendrías todos los metodos miembro que manipulan el puntero cabeza, como por ejemplo un metodo insertar, eliminar, desplegar_datos, etc,etc...

básicamente el código que ilustre lo anterior sería el sgte:

class nodo_info {
public:
char nombre..;
int edad;
....;
nodo_info ptr_sig;
};

class lista {
public:
.....;
private:
nodo_info ptr_cab; // composicion
....;
};

noel solw
19 de Abril del 2004
Te envio, para tu ilustracion, un programa que trabaja con una lista. En este caso el programa invierte los valores de la lista.
En esta nota va el cpp y por separado en la proxima
el header file.

Notas :

[1] : observa que los nodos de la lista siguen siendo
struct, la lista en si es una clase.
[2] : el codigo del header esta hecho con templates,
para utilizar listas con distintos tipos de elementos.


// program k18a8.cpp - page 368
// Linked List : reverse list.
// c++ exercices book - dr. gershon kagan - first edition : 2001
// written in Borland CPP ver 3.1

#include "LinkList.h"
#include <string.h>

void Reverse(LinkedList<char> &a)
{
Node<char> *current,*previous,*holder;
current = a.GetBegin();
previous = NULL;
while(current)
{
holder = current->next;
current->next = previous; // without this line, the program
current->next = previous; // don't works ! why ?
previous = current;
current = holder;
}
a.SetBegin(previous);
} // REVERSE

void Process()
{
char *A = "abcdefgh";
LinkedList <char> a(strlen(A),A);
cout << setw(30) << "given list : " << a;
Reverse(a);
cout << setw(30) << "reverse list : " << a;
} // PROCESS

void main()
{
clrscr();
cout << "Linked List : reverse listn";
cout << "-----------------------------------------------------"
"-------------------------n";
Process();
cout << "-----------------------------------------------------"
"-------------------------n";
cout << "end of program - good bye ! ! !n";
getch();
} // MAIN

/*
Linked List : reverse list
------------------------------------------------------------------------------
given list : {a,b,c,d,e,f,g,h}
reverse list : {h,g,f,e,d,c,b,a}
------------------------------------------------------------------------------
end of program - good bye ! ! !
*/