指向C中的另一个结构

时间:2015-03-15 13:11:34

标签: c data-structures linked-list

我正在尝试设计一个使用单链表和堆栈操作的数据结构。我明白这个概念。这就像你有一个房间,你正在堆叠/连接到那个房间的人。房间也相连。但是,我找不到一些这方面的例子/参考,我只能找到自引用结构的例子。

  • 我的数据结构设计是否正确?
  • 如何将此人连接到房间?
  • 你知道一些很好的参考/网站吗?

    struct room
    {
     int roomnumber;
     struct room *link;
    };
    
    struct person
    {
     int personnumber;
     struct person *next;
     struct room *link;
    };
    

3 个答案:

答案 0 :(得分:4)

首先,在设计数据结构时,您应该记住要对数据进行的操作。

现在我看到你组织了房间和人员清单。为了连接有房间的人,你可以在这样的结构中定义person.link,你可以很容易地理解这个人的位置,但是为了找到在房间里的人你会做大工作(通过所有人来看看他们在哪里) 。因此,请考虑您的计划将对房间和人员做些什么,即哪些操作将是最常见的。

修改

也许可能的替代方案是:

struct room
{
 int roomnumber;
 struct room * nextRoom;
 struct person * personList;
};

struct person
{
 int personnumber;
 struct person *next;
};

这里的房间里有人(人)的名单,所以在特定的房间很容易找到某人(都找到所有人),但很难确定指定人数的人在哪里搜索

答案 1 :(得分:0)

  

我的数据结构设计是否正确?

你说你已经将这个人与那个房间联系起来了#34;但我只看到与这个人相关的房间。

  

如何将此人连接到房间?

person添加room指针。

  

你知道一些很好的参考/网站吗?

Off-topic

答案 2 :(得分:0)

您的设计似乎不正确。如果人员列表与某个房间相关联,那么拥有struct person *成员struct room似乎更为自然,并且不需要struct room *成员struct person。如果您需要能够在与某人交谈时确定房间,那么将struct room保留在struct person中是有意义的,但这是您设计的权衡(您在浪费有大量内存和冗余信息,似乎你可以随时访问一个你已经知道你正在处理哪个房间的人,但你没有提供足够的信息来做出这个决定。