gpt4 book ai didi

c - 访问 typedef 结构中的列表

转载 作者:行者123 更新时间:2023-11-30 21:10:00 25 4
gpt4 key购买 nike

typedef char Word[ WORD_LEN + 1 ];

typedef struct {
Word list[ MAX_WORDS ];

} FIFO;

所以我有一个指向 FIFO 结构的指针,我很好奇访问内部列表的最佳方法是什么。我必须能够在列表中添加和删除单词。任何帮助都会很棒,谢谢!

最佳答案

让我们谈谈您对表示 FIFO 的选择,这将消除您对如何访问数据的困惑。 FIFO 是一种抽象数据类型,具有两种行为:

  1. 项目从一开始就被删除。
  2. 项目添加到末尾。

一个 FIFO 工具应该跟踪它的开始和结束,所以让我们更新你的 FIFO 结构。

typedef struct {
unsigned int begin; /* index to first element */
unsigned int end; /* index to last element */
Word list[ MAX_WORDS ];
} FIFO;

现在,我们需要两个函数来实现上述两种行为。我们将它们称为 fifo_add 和 fifo_remove。 (这些不完整)

void fifo_add(FIFO * fifo, Word w)
{
fifo.list[fifo->end] = w;
fifo->end++;
}

Word fifo_remove(FIFO * fifo)
{
int i = fifo->begin;
fifo->begin++;

return fifo->list[i];
}

我故意让这些函数不完整,但我希望这能让您朝着正确的方向思考(请参阅 this page about circular buffers )。我需要强调的是这只是 FIFO 的一种可能实现。许多人更喜欢基于 FIFO 的链表,其结构如下:

typedef struct {
Word w;
Node * next;
} Node;

typedef struct {
Node * head;
Node * tail;
} FIFO;

无论您使用哪种实现,fifo_add 和 fifo_remove 都将具有相同的接口(interface),它将您的 FIFO 代码与程序的其余部分隔离。

关于c - 访问 typedef 结构中的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32729726/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com