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

 
Vista:

Urgente; Insertar elementos en lista s. enlazada

Publicado por Alanitax (4 intervenciones) el 22/06/2007 00:26:05
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 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 Diego (4 intervenciones) el 23/06/2007 04:47:43
Buenas. Aca te dejo la forma en que yo lo hago. Lamento que no pueda darlo en C++ pero no escribi nunca en el. El ejemplo esta en C. Espero que te sirva

Saludos, Diego

typedef struct nodo{
char *info;
struct nodo *next;
}node ;

typedef struct cola{
node *primero;
node *ultimo;
}cola;

int insertar_as_pila(char *, node**);
int insertar_as_cola(char *, cola *);
int insertar_as_lista(char *, node**);

int main()
{
node *stk = NULL; /* Se deben inicializar a NULL */
cola c;

c.primero = c.ultimo = NULL;
........
insertar_as_pila("Diego", &stk);
insertar_as_cola("Diego",&c);
........
return 0;
}

int insertar_as_pila(char *s, node **stk) /* Agrega al principio */
{
node *ptr;

if((ptr = malloc(sizeof(struct nodo))) == NULL)
return -1;

if((ptr->info = malloc(sizeof(char) * (strlen(s) + 1))) == NULL)
return -1;

strcpy(ptr->info,s);
ptr->next = *stk;
*stk = ptr;

return 0;
}

int insertar_as_cola(char *s, cola *q) /* Agrega al final */
{
node *ptr;

if((ptr = malloc(sizeof(struct nodo))) == NULL)
return -1;

if((ptr->info = malloc(sizeof(char) * (strlen(s) + 1))) == NULL)
return -1;

strcpy(ptr->info,s);
ptr->next = NULL;

if(q->primero == NULL)
q->primero = ptr;
else
q->ultimo->next = ptr;

q->ultimo = ptr;

return 0;
}

int insertar_as_lista(char *s, node **l) /* Agrega ordenado */
{
node *ptr, *aux;

if((ptr = malloc(sizeof(struct nodo))) == NULL)
return -1;

if((ptr->info = malloc(sizeof(char) * (strlen(s) + 1))) == NULL)
return -1;

strcpy(ptr->info,s);
ptr->next = NULL;

if((aux = *l) == NULL){
*l = ptr;
return 0;
}
while(aux->next && strcmp(aux->next->info,s) < 0)
aux = aux->next;

ptr->next = aux->next;
aux->next = ptr;

return 0;
}
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