为什么在某些应用程序中链表优先于数组?
Why are linked lists preferred over arrays in some applications?
为什么我不能使用指针运算和 malloc()
并使用空字符来表示列表的末尾(就像在数组中一样)将所有内容存储在连续的内存中?
我所指的教科书建议我使用链表来存储多项式项或非常大的数字。为什么我不能对这些应用程序使用上述方法?
Why is linked lists better than arrays?
他们不是。他们在某些方面更好,而在其他方面则不太好。
链表的优点:
- 在常数时间内添加和删除元素。但是,这需要您找到执行操作的位置。查找 n:th 元素是 O(n)
- 不需要连续的内存块
数组的优点:
- 需要更少的内存(每个元素一个或两个指针)
- 缓存更友好(所有数据都是连续的)
- 在常数时间内查找 n:th 元素
有一些妥协可以将两个世界中的许多结合起来。如果你有一个过度分配的数组和一个指向第一个和最后一个元素的指针,你可以在常数时间内添加和删除端点。至少有一段时间。
Why can't I store everything in contiguous memory using pointer arithmetic and malloc()
你可以
and using null character to represent end of list (like in array)?
通常不会这样做,但定义为以 null 结尾的 c 字符串除外。但是这种方法通常对于数组并不常见,尽管它是可能的。
为什么我不能使用指针运算和 malloc()
并使用空字符来表示列表的末尾(就像在数组中一样)将所有内容存储在连续的内存中?
我所指的教科书建议我使用链表来存储多项式项或非常大的数字。为什么我不能对这些应用程序使用上述方法?
Why is linked lists better than arrays?
他们不是。他们在某些方面更好,而在其他方面则不太好。
链表的优点:
- 在常数时间内添加和删除元素。但是,这需要您找到执行操作的位置。查找 n:th 元素是 O(n)
- 不需要连续的内存块
数组的优点:
- 需要更少的内存(每个元素一个或两个指针)
- 缓存更友好(所有数据都是连续的)
- 在常数时间内查找 n:th 元素
有一些妥协可以将两个世界中的许多结合起来。如果你有一个过度分配的数组和一个指向第一个和最后一个元素的指针,你可以在常数时间内添加和删除端点。至少有一段时间。
Why can't I store everything in contiguous memory using pointer arithmetic and malloc()
你可以
and using null character to represent end of list (like in array)?
通常不会这样做,但定义为以 null 结尾的 c 字符串除外。但是这种方法通常对于数组并不常见,尽管它是可能的。