Ver Mensaje Individual
  #1 (permalink)  
Antiguo 24/11/2007, 20:10
Eputz
 
Fecha de Ingreso: noviembre-2007
Mensajes: 2
Antigüedad: 17 años, 3 meses
Puntos: 0
Duda Listas Enlazadas, ayuda!!

Hola! Hace un tiempo que vengo programando en C, como un curso introductorio en mi facultad, hasta el dia de hoy que me dieron una tarea que no logro hechar a andar.

Mi idea es esta:

1) Escribir el main con las opciones para escoger en el menu.
2)A traves de void realizar las distintas operaciones, dandole un puntero al void con la direccion de la estructura y el tamaño de caballeros (en el programa sale con ese nombre) se han designado a crear.
3)Mostrar los caballeros, o la lista enlazada.

Mi problema va en que cuando hago el void se pierde el vector de inicio de la estructura, y cuando quiero verla con listar_caballeros() no puedo mostrarla, y tampoco se me ocurre como hacerla.

Es una lista enlazada circular (mesa redonda).

Ademas tengo problemas cuando pongo printf y deseo mostrar lo que esta dentro de la estructura.

Si alguien me podria hechar una manito, o arreglarme el codigo, o decirme que tengo malo, o simplemente explicarme un poco del asunto, estaria muy agradecido.

El codigo es el siguiente:
__________________________________________________ _________

#include <stdio.h>
#include <stdlib.h>

//creamos la estructura
struct datos {
struct datos *anterior; //asignamos un puntero con la direccion de la estructura anterior.
char *nombre;
char *habilidad;
int asiento;
struct datos *siguiente; //asignamos un puntero en la segunda pocicion de la estructura.
}; //con la posicion de la estructura siguiente

//asignamos un puntero con la direccion de la memoria que almacena la estructura.
struct datos *direcciondatos(){
return((struct datos *)malloc(sizeof(struct datos)));
}

//Procedimiento para crear mesa redonda
void crear_mesa_redonda(struct datos *r,int n){
struct datos *p,*q;
int i,num,opc;
system("cls");
printf("CREAR MESA REDONDA\n");
printf("------------------");
printf("\n\nIngrese numero de caballeros: ");
scanf("%d",&num);
printf("\n\nIngresar datos:\n");
for(i=1;i<=num;i++){
//asignamos la direccion de la estructura al puntero
if(i==1){
p=direcciondatos();
r=p; //guardamos la direccion de la primera estructura en el puntero r
p->anterior=p; //agregamos el puntero de la estructura anterior
}
else {
p=direcciondatos();
p->anterior=q; //asignamos la direccion de la estructura
}
//pedimos al usuario los datos del caballero
printf("\nCaballero %d:",i);
printf("\n------------");
printf("\n\n\tNombre: ");
scanf("%s",&(p->nombre));
printf("\n\tHabilidad: ");
scanf("%s",&(p->habilidad));
//asignamos numero de asiento
p->asiento=i;
//asignamos direccion a estructura siguiente
if(i!=num){
q=direcciondatos(); //direccion de la siguiente estructura
p->siguiente=q;
}
else {
p->siguiente=r;
}
}
n=num; //guardamos el numero de caballeros
printf("\n\nSe ingresaron correctamente un total de %d caballeros.",i-1);
printf("\n%.4x",r);
//Opciones a seguir
printf("\n1. Listar Caballeros");
printf("\n2. Volver a Menu Principal");
printf("\n\nIngrese numero de opcion a seguir: ");
scanf("%d",&opc);
if(opc==1)
;//listar_caballeros();
else if(opc==2)
main();
return;
}

//Procedimiento para mostrar la lista de caballeros
void listar_caballeros(struct datos *p,int n){
struct datos *q;
int i=1,opc;
// while(p->asiento!=(n+1)){
printf("Caballero %d:",i);
printf("\nAnterior: %.4x",p->anterior);
printf("\nAsiento: %d",p->asiento);
printf("\nNombre: %c",p->nombre);
printf("\nHabilidad: %c",p->habilidad);
printf("\nSiguiente: %.4x\n\n",p->siguiente);
q=p->siguiente;

printf("Caballero %d:",i);
printf("\nAnterior: %.4x",q->anterior);
printf("\nAsiento: %d",q->asiento);
printf("\nNombre: %c",q->nombre);
printf("\nHabilidad: %c",q->habilidad);
printf("\nSiguiente: %.4x\n\n",q->siguiente);
//}
//Opciones a seguir
printf("\n1. Volver a Menu Principal");
printf("\n\nIngrese numero de opcion a seguir: ");
scanf("%d",&opc);
if(opc==1)
main();
return;
}

int main(){
struct datos *pdatos;
int num,opc;
//presentacion
system("cls");
printf("Segunda Tarea Sistemas de Computacion - DIE\n");
printf("-------------------------------------------\n\n");
printf("Opciones:");
printf("\n\n\t1. Crear Mesa Redonda");
printf("\n\t2. Editar Mesa Redonda");
printf("\n\t3. Listar Caballeros");
printf("\n\t4. Ingresar Numero Aleatorio");
printf("\n\t5. Comenzar Seleccion");
printf("\n\t6. Salir");
pdatos=direcciondatos();
printf("\n%.4x",pdatos);
printf("\n\nIngrese numero de opcion a seguir:");
scanf("%d",&opc);
//direccion de memoria para el puntero cabeza de la estructura
//opciones
if(opc==1)
crear_mesa_redonda(&pdatos,num);
if(opc==3)
listar_caballeros(&pdatos,num);
else if(opc==6){
printf("\nHasta pronto...\n\n");
system("PAUSE");
}
return(0);
}

__________________________________________________ _______

De todas maneras, gracias!.