typedef char Word[ WORD_LEN + 1 ];
typedef struct {
Word list[ MAX_WORDS ];
} FIFO;
所以我有一个指向FIFO结构的指针,我很好奇访问里面列表的最佳方法是什么。我必须能够从列表中添加和删除单词。任何帮助都会很棒,谢谢!
答案 0 :(得分:0)
让我们谈谈您表示FIFO的选择,这将清除您对如何访问数据的困惑。 FIFO是一种抽象数据类型,它有两种行为:
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都将具有相同的接口,从而将您的FIFO代码与程序的其余部分隔离开来。