2015-03-17 2 views
0

Я пытаюсь сделать эту структуру данных в C. Подключите другую структуру к другой структуре. Например:Ссылка на другую структуру в C

struct room 
{ 
int roomnumber; 
struct room * nextRoom; 
struct person * personList; 
}*top=NULL,*temp=NULL,top1; 

struct person 
{ 
int personnumber; 
struct person *next; 
}*node=NULL,temp1; 

В комнате с конструкцией есть указатель на объект структуры. Мне сложно связать его с другой структурой. Это верно?

Вот моя функция

void insert() 
{ 
    int val; 
    printf("enter value: "); 
    scanf("%d",&val); 
    newnode=create_node(val); 
    if(top->personList==NULL) 
    { 
     top->personList=newnode; 
    } 
    else 
    { 
     node->next=newnode; 
     node=newnode; 


    } 
} 

Вставьте человека в комнату. Комната уже создана. create_node() это тот, кто делает malloc()

+1

'top' начинается как NULL таким образом' Топ- > 'опасно, если вы не указали что-то раньше. – jschultz410

+0

, поэтому я должен сделать какое-то условие вроде. Если top == NULL? –

+1

Показать функцию 'create_node', пожалуйста. –

ответ

0

Вот версия, которая не использует глобал, что делает ваши функции гораздо более общими и многоразовым:

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

typedef struct person 
{ 
    int   personNumber; 

    struct person *next; 

} person; /* NOTE: this is a typedef, not a global declaration like you did */ 

typedef struct room 
{ 
    int   roomNumber; 
    person  *personList; 
    person  *lastInList; 

    struct room *nextRoom; 

} room; /* NOTE: this is a typedef, not a global declaration like you did */ 

person *create_person(int val) 
{ 
    person *ret = calloc(1, sizeof(*ret)); 

    if (ret) 
    { 
    ret->personNumber = val; 
    ret->next   = NULL; 
    } 

    return ret; 
} 

int room_insert(room *r, int val) 
{ 
    person *p = create_person(val); 

    if (NULL == p) 
    return -1; 

    if (NULL != r->personList) 
    r->lastInList->next = p; 

    else 
    r->personList = p; 

    r->lastInList = p; 

    return 0; 
} 

int main(int argc, char **argv) 
{ 
    room my_room  = { 0 }; /* important! initializes pointers to NULL */ 
    room my_other_room = { 0 }; /* important! initializes pointers to NULL */ 
    person *p; 

    room_insert(&my_room, 5); 
    room_insert(&my_other_room, -5); 

    room_insert(&my_room, 10); 
    room_insert(&my_other_room, -10); 

    room_insert(&my_room, 15);  
    room_insert(&my_other_room, -15); 

    for (p = my_room.personList; p; p = p->next) 
    printf("%d\n", p->personNumber); 

    for (p = my_other_room.personList; p; p = p->next) 
    printf("%d\n", p->personNumber); 

    return 0; 
} 
+0

В чем разница calloc и malloc? –

+0

@EyamSaye calloc нули все байты выделенной памяти, в то время как malloc может оставить его как случайный мусор. – jschultz410

+0

Почему вы добавили * person lastInList в структурную комнату? –