这是问题所在。
输入是4种命令,
“ADD S C”表示将学生S加入课程C.
“DROP S C”意味着将学生S放入课程C.
“PRINTS S”表示打印出学生S所采取的所有课程。
“PRINT C”表示打印出所有学生参加的课程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;
}
问题出来了。因为输入只有在达到End Of File时才会停止。这意味着可能会有“ADD 1 2”,“ADD 2,3”.......出现这么多次。 我想知道如何链接两个节点,因为通常我会
node* a = create_node(2, 3);
node* b = create_node(7, 7);
insert_node(a, b);
但现在,我不能这样做。谁能举个例子?非常感谢。
答案 0 :(得分: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