PDA

Visualizza la versione completa : [C] aiuto e consigli su esercizio liste doppiamente concatenate


kratos84
12-01-2008, 19:45
salve ragazzi devo svolgere un esercizio sulle liste a doppi puntatori.l esercizio dice: creare una funzione in C che permetti di inserire un nodo all interno di una lista a doppi puntatori contenente un elenco studenti. il nodo dovrÓ contenere nome, cognome matricola,esami da sostenere, esami sostenuti con data e voto. infine la lista dovrÓ essere ordinata in basa al nome e cognome.
spero che qualcuno mi riesca ad aiutare.
grazie!

kratos84
12-01-2008, 19:48
io per il momento ho scritto qualkosa ma nn va bene
ho provato a fare una funzione crea lista :
#include <stdio.h>
#include <malloc.h>
#include <string.h>

#define MAX 30

struct studente {
char nome[MAX];
char cognome[MAX];
int matricola;
struct studente *next;
struct studente *prew;
struct esame *esa;
}


struct Data{
int giorno;
char mese[MAX];
int anno;
};

struct Esame {
char nomesa[30];
int votoesa;
struct Data *date;
}
typedef struct Data date;
struct studente* Crealista();

struct studente* Crealista()
{
struct studente *testa;
struct studente *pun;
int j, n, i;

printf ("di quanti elementi Ŕ composta la lista:");
scanf("%d", &n);

if (n==0)
testa ==NULL;
else{
testa=(struct studente*)malloc(sizeof(struct studente));
printf("inserisci nome studente: ");
scanf("%s", &testa->nome);
printf("Inserisci il cognome: ");
scanf("%s", &testa->cognome);
printf("Inserisci la matricola: ");
scanf("%d", &testa->matricola);
printf("inserisci nome esame:");
scanf("%s", &testa->esa.nomesa);
printf("inserisci 0 se e da sostenere, 1 se e sostenuto");
scanf("%d",& j);
if (j==0)
{
printf("immetti data che vuoi sostenere l esame");
printf("immetti il giorno:");
scanf("%d",& testa->esa->date.giorno);
printf("immetti mese:");
scanf("%d",& testa->esa->date.mese);
printf("immetti anno:");
scanf("%d",& testa->esa->date.anno);
}
else
{
printf("immetti data esame sostenuto");
printf("immetti il giorno:");
scanf("%d",& testa->esa->date.giorno);
printf("immetti mese:");
scanf("%d",& testa->esa->date.mese);
printf("immetti anno:");
scanf("%d",& testa->esa->date.anno);
printf("immetti voto:");
scanf("%d",& testa->esa.votoesa);

pun=testa;

for(i=0; i<n; i++)
{
pun->next=(struct studente*)malloc(sizeof(struct esame));
pun =pun->next;
printf("inserisci nome studente: ");
scanf("%s", &pun->nome);
printf("Inserisci il cognome: ");
scanf("%s", &pun->cognome);
printf("Inserisci la matricola: ");
scanf("%d", &pun->matricola);
printf("inserisci nome esame:");
scanf("%s", &pun->esa.nomesa);
printf("inserisci 0 se e da sostenere, 1 se e sostenuto");
scanf("%d",& j);
if (j==0)
{
printf("immetti data che vuoi sostenere l esame");
printf("immetti il giorno:");
scanf("%d", &pun->esa->date.giorno);
printf("immetti mese:");
scanf("%d", &pun->esa->date.mese);
printf("immetti anno:");
scanf("%d", &pun->esa->date.anno);
}
else
{
printf("immetti data esame sostenuto");
printf("immetti il giorno:");
scanf("%d", &pun->esa->date.giorno);
printf("immetti mese:");
scanf("%d", &pun->esa->date.mese);
printf("immetti anno:");
scanf("%d", &pun->esa->date.anno);
printf("immetti voto:");
scanf("%d", &pun->esa.votoesa);
}

}


}


int main(int argc, char *argv[])
{

system("PAUSE");
return 0;
}





sicuramente sarÓ quasi totalmente sbagliato l esercizio. se qualkuno saprebe darmi qualke consiglio gliene sarei grato.

kratos84
14-01-2008, 03:52
ragazzi spero in un vostro aiuto, ho cambiato il programmino precedente e l ho fatto piu semplice, ma nn so come collegare il puntatore all elemento precedente e nemmeno ordinare la lista. help-me!:

#include <stdio.h>
#include <malloc.h>
#include <string.h>

#define MAX 30

struct studente {
char nome[MAX];
char cognome[MAX];
int matricola;
char nomesa[MAX];
int voto;
char data[MAX];
struct studente *next;
struct studente *prev;
};

struct studente *crealista();
void visualizza(struct studente*);


struct studente *crealista()
{
struct studente *testa;
struct studente *pun;
int n, i;

printf("da quanti elementi Ŕ formata la lista?:");
scanf("%d", &n);

if(n==0)
testa = NULL;

else
{

testa=(struct studente*)malloc(sizeof(struct studente));
printf("inserisci nome studente:");
scanf("%s", &testa->nome);
printf("inserisci cognome studente:");
scanf("%s", &testa->cognome);
printf("inserisci matricola studente:");
scanf("%d", &testa->matricola);
printf("inserisci nome esame:");
scanf("%s", &testa->nomesa);
printf("inserisci voto esame:");
scanf("%d", &testa->voto);
printf("inserisci data esame:");
scanf("%s", &testa->data);

pun=testa;


for(i=2;i<=n;i++)
{
pun->next=(struct studente*)malloc(sizeof(struct studente));
pun = pun->next;

printf("\ninserisci nome %d studente:", i);
scanf("%s", &pun->nome);
printf("inserisci cognome %d studente:", i);
scanf("%s", &pun->cognome);
printf("inserisci matricola %d studente:", i);
scanf("%d", &pun->matricola);
printf("inserisci nome %d esame:", i);
scanf("%s", &pun->nomesa);
printf("inserisci voto %d esame:", i);
scanf("%d", &pun->voto);
printf("inserisci data %d esame:", i);
scanf("%s", &pun->data);
}
pun->next = NULL;
}
return (testa);
}

void visualizza(struct studente* testa)
{
printf("\npun_lista--->");

while(testa!=NULL)
{
printf("%s", testa->nome);
printf("-->");
printf("%s", testa->cognome);
printf("-->");
printf("%d", testa->matricola);
printf("-->");
printf("%s", testa->nomesa);
printf("-->");
printf("%d", testa->voto);
printf("-->");
printf("%s", testa->data);
printf("-->");
testa = testa->next;
}
printf("NULL\n\n");
}

int main()
{
struct studente *pun_lista;

pun_lista = crealista();

visualizza(pun_lista);

system("PAUSE");
return 0;
}

Loading