为什么在c风格的语言中运行时堆被用于动态内存分配,而数据结构都被称为“堆”?有什么关系吗?
当前回答
问:堆是什么? A.堆是放在彼此上面的对象的集合。
回答你的问题: 内存堆和二进制堆都使用相同的概念。 数据以堆的形式存储在内存中,顺序与程序中写入的顺序相同,而二进制堆是一种数据结构,它遵循以堆的形式有序存储数据的相同概念(数据在其他数据之上)。 请在评论区告诉我你的想法。
其他回答
Donald Knuth说(《计算机编程艺术》,第三版,第1卷,第435页):
1975年左右,一些作者开始将可用内存池称为“堆”。
他没有说哪些作者,也没有给出任何特定论文的参考文献,但他确实说了,与优先级队列相关的术语“堆”的使用是这个词的传统意义。
The name collision is unfortunate, but not all that mysterious. Heap is a small, common word used to mean a pile, collection, group, etc. The use of the word for the data structure pre-dates (I'm pretty sure) the name of the pool of memory. In fact, pool would have been a much better choice for the latter, in my opinion. Heap connotes a vertical structure (like a pile), which fits with the data structure, but not the memory pool. We don't think of a memory-pool heap as hierarchical, whereas the fundamental idea behind the data structure is keeping the largest element at the top of the heap (and sub-heaps).
堆的数据结构可以追溯到60年代中期;堆积记忆池,70年代初。术语堆(指内存池)至少早在1971年由Wijngaarden在Algol的讨论中使用。
可能最早使用堆作为数据结构是在 威廉姆斯,1964年。“算法232 -堆排序”,ACM通信7(6):347-348
也许第一个实现的内存堆是由堆结构管理的?
它们有相同的名字,但实际上并不相似(甚至在概念上)。内存堆被称为堆,就像你把洗衣篮称为“一堆衣服”一样。这个名字用来表示一个有点混乱的地方,可以随意分配和释放内存。数据结构(正如你参考的维基百科链接所指出的)是完全不同的。
问:堆是什么? A.堆是放在彼此上面的对象的集合。
回答你的问题: 内存堆和二进制堆都使用相同的概念。 数据以堆的形式存储在内存中,顺序与程序中写入的顺序相同,而二进制堆是一种数据结构,它遵循以堆的形式有序存储数据的相同概念(数据在其他数据之上)。 请在评论区告诉我你的想法。
推荐文章
- 什么是“参数依赖查找”(又名ADL,或“Koenig查找”)?
- 公共朋友交换成员函数
- 如何在Go中使用c++
- 自定义c++分配器的引人注目的例子?
- RAII和c++中的智能指针
- 如何构建和使用谷歌TensorFlow c++ api
- 堆与二叉搜索树(BST)
- 断言是邪恶的吗?
- 下面这些短语在c++中是什么意思:0 -,default-和value-initialization?
- 在STL地图中,使用map::insert比[]更好吗?
- C++ Linux的想法?
- 如何为Fedora安装g++ ?
- Std::cin输入空格?
- c++标准是否要求iostreams的性能很差,或者我只是在处理一个糟糕的实现?
- gcc在哪里查找C和c++头文件?