2016-11-15 9 views
0
#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 



    struct module { 

char name[10]; 
    int note; 
    struct module * next; 

    }; 
    typedef struct module module; 


    struct student { 
    char name[10]; 
    char adress[20]; 
    struct student * next; 
    module * head; 

} ; 
typedef struct student student; 


student *etudiant=NULL; 



    module* add_module(char name[],int note){ 
module *p=(module*)malloc(sizeof(module)); 
p->note=note; 
p->next=NULL; 
strcpy(p->name,name); 

return p; 
} 



void add_student(char name[], char adress[]) 

{ 

    student *p=(student*)malloc(sizeof(student)); 
    strcpy(p->name,name); 
    strcpy(p->adress,adress); 

    p->head= add_module("algo",15); 
    p->next=NULL; 

    if (etudiant==NULL){ 

    etudiant=p; 
} 
else{ 
    student *q = etudiant; 

while(q->next!=NULL){ 

    q=q->next; 

    } 
    q->next=p; 
      } 
} 


    void print_module(module *m){ 

if (m==NULL) 
{ 
    printf("NULL"); 


} 
else 
{ 
    while(m->next!=NULL){ 
     printf("%s ",m->name); 
    printf("%d\n",m->note); 
    m=m->next; 
    } 

} 


} 


void print(){ 
student *p; 
module *m; 
p = etudiant; 
if (etudiant==NULL){ 

printf("NULL"); 
} 

else 
{ 
while (p->next!=NULL); 
{ 
    printf("%s ",etudiant->name); 
    printf("%s ",etudiant->adress); 

    m = p->head; 
    while(m != NULL){ 
     printf("%s ",m->name); 
     printf("%d ",m->note); 
     m= m->next; 
    } 
    p = p->next; 
     } 
} 


} 

int main() { 

    add_student("jack","nowhere"); 
    print(); 

    return 0; 
} 

Was will ich eine Liste in einer Liste exemple erstellenverknüpfte Liste in einer verknüpften Liste (verschachtelte verknüpfte Liste)

Student list : 

    Student || subject || ==> student 2 || subject 
      |       | 
      maths      POO 
      |       | 
      physiques     English 

, die eine ungefähre paiting meiner Struktur ist, ich kam ein Thema hinzufügen zu einem Studenten, aber ich weiß nicht, wie man mehr hinzufügt. danke im voraus.

I definiert die Schüler Liste als global, da ich nur eine Liste aller Studenten

+0

Was Ihre Frage ist? –

+0

Ich habe meine Frage bearbeitet –

+0

Was ist Modul? ist es innerhalb von Studenten? – Sean83

Antwort

0

Lassen Sie dies Ihre Schüler Liste mit benötigen würde:

Student1 ==> student2 ==> NULL 
    |   | 
    maths  POO 
    |   | 
    physiques English 

Nun, wenn Sie Modul hinzufügen möchten " Informatik "zu student2 dann müssen Sie die folgenden Schritte ausführen:

  1. durchlaufen Sie die Schülerliste, um den Schüler2 zu finden.
  2. dann durchlaufen Sie seine Modulliste.
  3. hinzufügen Modul "Informatik" zu listen (Sie können überall nach Ihrer Anforderung hinzufügen).

Ihre Funktion wird wie folgt sein:

typedef struct student student; 
void addModule(char studentName[], char subject[], int note) { 
    // searching student in the list.. 
    if(etudiant != NULL) { 
     struct student *s = etudiant; //start of the list 
     while(s && strcmp(s->name, studentName) != 0) 
      s = s->next; 

     if(s != NULL) { 
      // creating module... 
      module* new = (module*)malloc(sizeof(module)); 
      strcpy(new->name, subject); 
      new->note = note; 
      new->next = NULL; 

      //adding module to the front of the module list of student s ... 
      module* tmp = s->head; 
      s->head = new; 
      new->next = tmp; 
     } 
    } 
} 

void add_student(char name[], char adress[]) { 
    student *p=(student*)malloc(sizeof(student)); 
    strcpy(p->name,name); 
    strcpy(p->adress,adress); 
    p->next=NULL; 

    if (etudiant==NULL){ 
     etudiant=p; 
    } 
    else { 
     struct student *q = etudiant; 

     while(q->next!=NULL){ 
      q=q->next; 
     } 
     q->next=p; 
    } 
    addModule(p->name, "algo", 15); 
} 

int main() { 
    add_student("A", "XYZ"); 
    addModule("A", "CS", 1); 
    addModule("A", "MECH", 1); 

    add_student("B", "PQR"); 
    addModule("B", "DAA", 1); 
    addModule("b", "SE", 1); 

    //printing the list... 
    student *q = etudiant; 
    while(q != NULL) { 
     module *p = q->head; 
     printf("%s -> ", q->name); 
     while(p != NULL) { 
      printf("%s ", p->name); 
      p = p->next; 
     } 
     printf("\n"); 
     q = q->next; 
    } 
} 
+0

Was ist, wenn ich die Module des Schülers bei der Schaffung dieses Schülers –

+0

hinzufügen möchte, erstellen Sie den Schüler und fügen Sie einfach die Module wie in der obigen Funktion. Sie müssen in diesem Fall die Schülerliste nicht durchlaufen, weil Sie bereits wissen, wo Sie Module hinzufügen können: p –

+0

eine weitere Frage, Modulzeiger ist ein lokaler oder ein globaler? Muss ich einen Zeiger auf Modul oder Schüler in der Hauptfunktion übergeben? : p –