我正在用C实现一个字谜游戏的版本。该程序当然是多客户端服务器类型。因此,我完成了几乎所有程序,但只有一件事。我希望我的程序保留每个连接并在服务器上玩游戏的玩家的历史记录(当客户端连接时,命令行参数之一是玩家的用户名)。我不知道我该怎么做,我的意思是什么是更好的方法和更优化的实现方法。我是否使用像这样的玩家列表来做到这一点:
typedef struct player
{
char *username;
int score;
} player_t;
typedef struct playerList
{
int size;
player_t* players_list;
} playerList_t;
或者这样做是更好的方法:
struct Player
{
char *username;
int score;
Player *next;
};
或者还有比这些更好的方法。当然,我想将此数据存储到文件中,以便在服务器崩溃的情况下不会丢失数据。预先谢谢你。
我建议您使用Linux内核双链表,因为它的计算复杂度为O(1),并且非常快。
您可以在Linux kernel doubly linked-list for user space中找到提到的用户空间实现>
花费一些时间来理解它;但是在那之后,您将永远永远不会实现老式的链表。例如,您可以看到my question
一些优点是:
list.h
list.h
的列表操作速度(计算复杂度)为O(1),这意味着链接列表的结构有多大并不重要;当您扩大结构时,搜索整个列表不会增加]typedef struct
的新链表时,您都不需要执行列表操作(搜索,添加,删除等)。不再。您需要做的只是在链接中添加新行struct list_head myLinkedList
。然后其他所有工作都已经完成了:),这是代码扩展的一项很酷的功能