假设我有一个存储结构的书和下一个节点指针链表:
struct book {
unsigned short size_of_content;
unsigned short price;
unsigned char *content;
};
struct list {
struct book p;
struct list *next;
};
而当我构建链表,我将检查本新书的价格是一样的已被链接的一本书的价格。 基本上确保没有重复的价格。
我有构建价格阵列的一个想法,比较新的价格与现有的。 然而,由于C不支持数组的大小不受限制,我不认为我的方式是一个好主意。 我该怎么办? 谢谢
而不是创建一个数组或所有的爵士乐,你可以只检查,如果价格在链表中已经存在。 另一种方法可能是新增的价格因为你是它使用malloc函数添加到链表动态大小的数组。 http://www.cplusplus.com/reference/cstdlib/malloc/
但是,这似乎是低效的,因为你将不得不检查数组甚至因为它的增长到n的大小每一次。
我认为这将是更好的方式来做到这一点。
你甚至可以使用它是基于一个链表和其称为跳跃列表上更好的数据结构。
读到这里的跳跃列表http://en.wikipedia.org/wiki/Skip_list这些其实都是真的很酷。 可能是值得尝试和实施这样的时间。
编辑 :正如其他人评论过的二叉搜索树将是这个问题的一个更好的数据结构。
如果你的价格是一个整数,这将是很容易:分配一些字节,它们初始化为0,你之前添加一个新的书的价格男 ,检查m位的这些字节,如果是1,那么你就已经有价格; 如果不加这本书,并设置m个位为1。在这种情况下,你不需要去通过链表一次又一次地发现价格,也是存储成本是有限的。