在C中存储单词和行列表的最佳数据类型是什么?

时间:2012-06-14 05:23:53

标签: c malloc

我正在制作一个小程序,它读取文本文件并将其存储在内存中。然后,它允许用户在文件中添加另一行,替换一行,在特定行添加另一个单词等...

最后,用户可以将内存中的内容保存回文件。 我在Python中使用相同的程序并使用了多维数组,因此数组中的每个元素都是一个单词数组。 这使得访问特定行中的特定单词非常容易被其他东西替换

现在我正在尝试用C做同样的事情并且感到困惑。在一点点搞乱后,我更倾向于拥有一个有char字[]的结构。这样我就可以通过解除前一个到下一个的NextNode来删除一个特定的行。

我有两个问题: 这是实现目标的好方法吗? 2.如何制作具有固定大小的链接列表(例如,不使用malloc)。例如,如果我想要最多10行,我如何只生成10个节点并避免使用malloc?

2 个答案:

答案 0 :(得分:1)

首先,为什么你想要固定尺寸?

很容易制作一个具有固定大小的链表(例如不使用malloc),它被称为结构数组:)

如果您可以创建结构,请说“node”:

#define MAXLEN   100
typedef struct node
{
  int nLinenum;
  char Data[MAXLEN];

};

你可以写:

node static_linked_list[10];

但是你需要编写一些复杂的代码来删除特定的节点。与从链接列表中删除节点(使用malloc)相比,这并不简单。

答案 1 :(得分:0)

以下是最简单的方法:(仅列出结构定义)。

    struct word {
        char m_word[MAX_WORD_LENGTH];
    };

    struct line {
        struct word[MAX_WORDS_PER_LINE];
    };

    struct _node {
        struct line m_line;
        struct _node *next;
    };

使用固定尺寸的DS无法满足您的需求。 稍后您还应该使用链接列表替换数组(m_​​word& line-> word)。