【问题标题】:implement linked list in C用C实现链表
【发布时间】:2016-02-19 14:24:20
【问题描述】:

这就是问题所在。

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

问题出来了。因为输入只有在到达文件结束时才会停止。这意味着可能有“ADD 1 2”,“ADD 2, 3”.......出现这么多次。 我想知道如何连接两个节点,因为通常情况下,我会

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

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

【问题讨论】:

  • 也许你没看过这个,但是please don't cast the return value of malloc() in C
  • ...为什么?讲义教我这样做...
  • 那个蓝色文字是一个链接。原因在于链接指向的答案。也许也可以交给你的老师。 :)
  • 当您将a 链接到b 时,您不会设置b -> next = NULL;。相反,你让b -> next链接到其他节点,这就是“链表”的意思。
  • 好的。我删除它。当“添加”发生超过 2 次时,您知道如何链接到节点吗?它让我发疯。

标签: pointers linked-list structure implementation


【解决方案1】:

这是一个“链接列表”如何工作的示例。

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

【讨论】:

  • 谢谢。我认为这将是工作。我要试试。
  • 不客气。一开始总是有点迷茫,但是一旦理解了原理,你可能会发现很多不同的方法。
猜你喜欢
  • 2015-06-03
  • 1970-01-01
  • 2013-12-03
  • 2021-11-13
  • 1970-01-01
  • 1970-01-01
  • 2020-04-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多