在C中实现链表

时间:2016-02-19 14:24:20

标签: pointers linked-list structure implementation

这是问题所在。

输入是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);

但现在,我不能这样做。谁能举个例子?非常感谢。

1 个答案:

答案 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