访问typedef结构中的列表

时间:2015-09-23 01:47:01

标签: c

typedef char Word[ WORD_LEN + 1 ];

typedef struct {
    Word list[ MAX_WORDS ];

} FIFO;

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

1 个答案:

答案 0 :(得分:0)

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

  1. 项目从头开始删除。
  2. 项目已添加到最后。
  3. 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代码与程序的其余部分隔离开来。