检查c中的链表中是否已存在元素

时间:2014-02-12 23:09:54

标签: c file pointers struct linked-list

假设我有一个存储book结构和下一个节点指针的链表:

struct book {
    unsigned short  size_of_content;
    unsigned short  price;
    unsigned char  *content;
};

struct list {
    struct book p;
    struct list *next;
};

当我构建链表时,我会检查新书的价格是否与其中一本已链接的书的价格相同。基本上要确保没有重复的价格。

我有一个构建价格数组并将新价格与现有价格进行比较的想法。但是,由于C不支持无限大小的数组,我不认为我的方式是个好主意。我该怎么办?感谢

2 个答案:

答案 0 :(得分:1)

您可以只检查链接列表中是否已存在价格,而不是创建阵列或所有爵士乐。另一种方法是在使用 malloc 函数将链接列表添加到动态大小的数组时添加价格。 http://www.cplusplus.com/reference/cstdlib/malloc/

但这似乎效率低下,因为你必须每次检查数组,即使它增长到n大小。

我认为这是更好的方法。

您甚至可以使用更好的数据结构,该结构基于链表并称为跳过列表。

在此处阅读跳过列表http://en.wikipedia.org/wiki/Skip_list 这些真的很酷。可能值得花时间尝试这种方式。

编辑:正如其他人所评论的那样,二元搜索树对于这个问题来说是一个更好的数据结构。

答案 1 :(得分:0)

如果您的价格是整数,那将很容易:分配一些字节,将它们初始化为0.在添加价格 m 的新书之前,请检查这些字节中的第m位如果它是1,那么你已经有了价格;如果没有,请添加此书并将第m位设置为1.在这种情况下,您无需一次又一次地浏览链表以查找价格,并且存储成本也是有限的。

相关问题