将结构中的数据存储在另一个结构

时间:2018-05-25 15:46:07

标签: c struct

我正在使用C做超市模拟器。我有一个结构,可以保存数百个虚构客户的数据,如下所示:

typedef struct clients {
int ID;
char Name[50];
}Clients;

我导入了一个包含这些客户端的.txt文件。它基本上是这样的:

1234 Peter Parker
4724 Barack Obama
3851 John Wick
9428 Donald Trump
...

所以现在我必须模拟一个超市,我有一个更新自己的计时器,从结构中挑选随机客户并将它们放入超市,我需要跟踪它们中有多少以及哪些是超市内。问题是,我不知道如何将客户放入市场并存储这些客户的数据。例如,假设客户A和B进入超市,我如何将这些特定客户存储在市场中,以便我可以搜索哪些客户在市场内?我应该创建一个包含struct Clients数据的结构吗?我不知道。很高兴,如果你能帮助我。

3 个答案:

答案 0 :(得分:0)

您可以创建客户端结构数组。

以下是我找到的一些资源。 http://www.asic-world.com/scripting/structs_c.html http://www.c4learn.com/c-programming/c-array-structure/

答案 1 :(得分:0)

首先想到的是使用某种定向(或双向)列表,其中包含对客户端结构的引用。例如,

typedef struct {
  Client *client;
  Visitor *next;
  Visitor *prev;
} Visitor;

可以是该列表的节点之一。对于列表的头部或尾部,您可以指定NULL值来区分不同的极端情况,但这取决于实现。

列表本身:

typedef struct {
    Visitor *head;
    Visitor *tail;
} VisitorList;

这种结构的缺点是访问者的数量具有线性复杂性,这可能不是您想要的。

答案 2 :(得分:0)

答案是,有很多方法可以做到这一点,各有利弊。如果你关心性能并且你的数据大于数百并且数以千计,那么你可能会开始担心你使用什么类型的数据结构,这会成为关于数据结构和你如何处理的问题正在寻找名字。如果您不那么担心性能,可以使用数组实现,在其中创建Clients数组,如下所示:声明可以为其分配值的200个客户端数组。

Clients array[200];

如果你获得的Clients比你分配的内存更多malloc,那么你可能需要struct更多的内存才能适应它。

或者,您可以使用链接列表实现并创建某种typedef struct { Client *client; node *next; node *prev; } node; 来表示具有相应函数的节点来操作它。

enum

但这需要编写更多代码来添加和删除节点。

所以,它确实是你想要的问题。

编辑: 如果您只想添加一种方法来了解某个客户是否在超市中,为什么不创建client并将其添加到struct enum?我更喜欢这个而不是bool,因为如果你想将某人放在另一个地方,那么你可以选择将它添加到enum place { supermarket, none };

sendSearchRequest