C/Visual C - Urgente; Insertar elementos en lista s. enlazada

 
Vista:

Urgente; Insertar elementos en lista s. enlazada

Publicado por alanitax (4 intervenciones) el 20/06/2007 00:39:27
Hola chic@s, estoy haciendo un media player en c++, y necesito ayuda con la insercion de elementos. Estoy usando templates, en fin, como puedo moverme de posicion en la lista?
la función que estoy usando para insertar es:

public: void insertar(T x, posicion p){
Nodo *nuevo;
posicion q;
nuevo= new Nodo;
nuevo->info=x;
nuevo->prox=p;
if ((pri==NULL)||(p==pri)){
pri=nuevo;
}
else{
q=anterior(p);
q->prox=nuevo;
}
n++;
}

donde posicion esta definida como:

private: typedef struct Nodo{
T info;
Nodo *prox;
};

public: typedef Nodo *posicion;

Quiero hacer una llamada a Lista.insertar(elemento, pos); pero no se como declarar esa variable pos ni como moverme hacia adelante...

Muchas gracias a los que respondan... Atte. Alanitax
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Urgente; Insertar elementos en lista s. enlazad

Publicado por LhaN (12 intervenciones) el 20/06/2007 06:01:16
No entendi cual es tu problema, pero me parece a mi o lo que no sabes es usar listas enlazadas? Si no sabes usar listas te explico, pero si sabes, entonces no entendi tu problema.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Urgente; Insertar elementos en lista s. enlazad

Publicado por Nelek (816 intervenciones) el 21/06/2007 08:15:15
Hola,

aunque las CList de MFC no estoy seguro de si te serviran, te recomiendo que le eches un vistazo para ver como las tienen implementadas ellos y ver su funcionamiento interno.

Usa tambien la funcion de buscar en este foro y busca un mensaje que puse yo hace un tiempo acerca de las templates. O echa un vistazo a mi articulo:

http://www.codeproject.com/cpp/SmartListII.asp

a lo mejor te sirve de algo.

De todas maneras coincido con LhaN, especifica un poco mas cual es tu problema porque no se te entiende bien la duda
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Urgente; Insertar elementos en lista s. enlazad

Publicado por Alanitax (4 intervenciones) el 22/06/2007 00:11:37
Hola!! ya solucione el problema, gracias por su tiempo.... Ahora tengo otro problema, para llenar la lista tengo que leer los datos que estan en un archivo .upl, por cada linea leida en el archivo hago una insercion en la lista, pero esta al parecer reemplaza la informacion insertada anteriormente, es decir, en todos los nodos se guarda la ultima linea del archivo, a mi me parece que es un error en el procedimiento insertar pero ni idea de donde...

Aqui les mando la info y los procedimientos que estoy usando

Info del archivo:

C:\iTunes Music\Blind Melon.mp3
C:\iTunes Music\Mr. Johns.mp3
D:\Mis videos\Heroes chapter 15.avi

implementacion utilizada:

//Procedimiento insertar en la lista
public: void insertar(T x, posicion p){

Nodo *nuevo;
nuevo= new Nodo;
nuevo->info=x;
nuevo->prox=p;
if ((pri==NULL)||(p==pri)){
pri=nuevo;
}
else{
Nodo *q=pri;
while (q->prox!=p){
q=q->prox;
}
q->prox=nuevo;

}

n++;
}

//Procedimiento cargar la info del archivo a la lista

void cargar_info_archivo(){

char name[100];
char audiovideo[100];
char elemento[100];
int cant=0, t;

pos=Lista.primero();
FILE *input;

strcpy(name, namelist);
input=fopen(name,"r");

if (input!=NULL){
while (!feof(input)){
fgets(audiovideo,100,input);
t=strlen(audiovideo);
audiovideo[t]='\0';
strcpy(elemento,audiovideo);
//aqui deberia ir insertando en la lista el nombre de cada elemento en el archivo
Lista.insertar(elemento,pos);

// printf("pos= %s",pos);

}
}else{
printf("ERROR AL LEER EL ARCHIVO O ARCHIVO NO ENCONTRADO");
}
Lista.mostrar();
fclose(input);

}

//LO QUE MUESTRA POR PANTALLA ES:

D:\Mis videos\Heroes chapter 15.avi
D:\Mis videos\Heroes chapter 15.avi
D:\Mis videos\Heroes chapter 15.avi

Si se les ocurre algo de como acomodar esto se los agradeceria muchiiiiiiisimo, y disculpen mi ignorancia pero apenas es q estoy aprendiendo a usar las listas jajajaja ;-p

PD: Espero que me haya explicado mejor esta vez.. Thanks!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Urgente; Insertar elementos en lista s. enlazad

Publicado por Nelek (816 intervenciones) el 22/06/2007 13:41:56
A primera vista me acaba de entrar por los ojos... de donde sale "pri" ??

En segundo... tu "posicion p" de que tipo es?

La cosa de las listas es que no solo tienen que contemplar si hay un siguiente, sino tambien si existe un previo. Lo que significa que:

if ((actual->siguiente == NULL) && (actual->previo == NULL))
//estas en la primera posicion de la lista y es elemento unico en la lista
if ((actual->siguiente == NULL) && (actual->previo != NULL))
//estas en el ultimo elemento de la lista
if ((actual->siguiente != NULL) && (actual->previo != NULL))
//estas por el medio de la lista

luego es un caso de mirar a ver si se quiere sobreescribir o no la posicion o se quiere insertar al final


Creo que tu problema esta en que estas sobreescribiendo siempre el primer elemento por un mal uso de "pri". Te recomiendo que eches un vistazo con la opcion de buscar en el foro porque el tema se ha tratado en otros mensajes. Igual encuentras un ejemplo que te aclare la duda que tienes.

Siento no poder ser mas especifico. La mayor parte del trato que he tenido con listas fue en VC++ con MFC y el procedimiento no es exactamente el mismo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar