2016-02-19 5 views
0

В этом проблема.реализовать связанный список в C

вход 4 вида команды,

"ADD SC", что означает добавление студента S в курсе C.

"DROP SC" означает студент падения S в курсе С.

" PRINTS S "означает распечатать весь курс, который был сделан студентом S.

«PRINT C» означает, распечатать все студент взят курс С.

вход не остановится, пока его достичь конца файла (EOF).

Итак, я решил использовать связанный список для этого.

первый, я определение структуры

typedef struct node 
{ 
    int SID; 
    int CID; 
    struct node* next; 
}node; 

Затем я сделать функцию create_node.

node* create_node(int IDS, int IDC) 
{ 
    node* copy = (node*)malloc(sizeof(node)); 
    copy->SID = IDS; 
    copy->CID = IDC; 
    copy->next = NULL; 

return copy; 
} 

И, я также создаю функцию узла вставки.

void insert_node(node* a, node* b) 
{ 
    a->next = b; 
    b->next = NULL; 
} 

Проблема возникает. Потому что вход будет остановлен только тогда, когда он достигнет конца файла. Это означает, что «ADD 1 2», «ADD 2, 3» ....... появляются так много раз. Я хочу знать, как связать два узла, так как в обычно, я

node* a = create_node(2, 3); 
node* b = create_node(7, 7); 
insert_node(a, b); 

, но теперь, я не могу это сделать. Может ли кто-нибудь дать мне пример? Большое спасибо.

+0

Может быть, вы еще не видели это, но [пожалуйста, не бросайте возвращаемое значение ' malloc() 'in C] (http://stackoverflow.com/a/605858/28169). – unwind

+0

... почему? лекционная записка научит меня делать это ... – zodiac

+0

Этот синий текст - это ссылка. Обоснование заключается в ответе, на который указывает ссылка. Может быть, что-то передать своему учителю тоже. :) – unwind

ответ

0

Вот пример того, как работает «связанный список».

void insert_node(node * a, node * * head) 
{ 
    a -> next = * head; 
    * head = a; 
} 

void main() 
{ 
    node * list = NULL;  // an empty list 
    node a, b, c, d;   // four nodes 
    insert_node(& a, & list); // list = a --> NULL 
    insert_node(& b, & list); // list = b --> a --> NULL 
    insert_node(& c, & list); // list = c --> b --> a --> NULL 
    insert_node(& d, & list); // list = d --> c --> b --> a --> NULL 
           // etc. 
} 

Здесь функция insert_node добавляет узел к главе списка.

Обычно, если вы хотите, чтобы сделать вещи более аккуратными, вы можете typedef некоторые из них, например:

typedef (node *) pnode 
typedef (pnode *) linkedlist 
+0

Спасибо. Я думаю, что это будет работа. Я собираюсь попробовать это. – zodiac

+0

Добро пожаловать. Это всегда немного запутывает в начале, но как только вы понимаете принцип, вы можете найти много разных способов сделать это. – WhatsUp

Смежные вопросы