下面给出了可以在堆栈上执行的2个基本操作。请参考图3,以更好地了解堆栈操作。· Push 推送:在堆栈顶部插入一个元素。· Pop 弹出:删除最上面的元素并返回。Fig 3. Visualization of basic Operations of Stacks此外,为堆栈提供了以下附加功能,以检查其状态。· Peep 窥视:返回堆栈的顶部元素而不删除它。· isEmpty:检查堆栈是否为空。· isFull:检查堆栈是否已满。
名为哈希函数(h)的特殊函数用于克服直接寻址中的上述问题。在直接访问中,带有密钥k的值存储在插槽k中。使用哈希函数,我们可以计算出每个值都指向的表(插槽)的索引。使用给定键的哈希函数计算的值称为哈希值,它表示该值映射到的表的索引。· h:哈希函数· k:应确定其哈希值的键· m:哈希表的大小(可用插槽数)。一个不接近2的精确乘方的素数是m的一个不错的选择。Fig 5. Representation of a Hash Function · 1→1→1· 5→5→5· 23→23→3· 63→63→3从上面给出的最后两个示例中,我们可以看到,当哈希函数为多个键生成相同的索引时,就会发生冲突。我们可以通过选择合适的哈希函数h并使用链接和开放式寻址等技术来解决冲突。
堆是二叉树的一种特殊情况,其中将父节点与其子节点的值进行比较,并对其进行相应排列。让我们看看如何表示堆。堆可以使用树和数组表示。图7和8显示了我们如何使用二叉树和数组来表示二叉堆。Fig 7. Binary Tree Representation of a Heap Fig 8. Array Representation of a Heap 堆可以有2种类型。· 最小堆-父项的密钥小于或等于子项的密钥。这称为min-heap属性。根将包含堆的最小值。· 最大堆数-父项的密钥大于或等于子项的密钥。这称为max-heap属性。根将包含堆的最大值。
[1]算法简介,第三版,作者:托马斯·H·科门(Thomas H. Cormen),查尔斯·E·雷森(Charles E. Leiserson),罗纳德·L·里维斯特(Ronald L. Rivest)和克利福德·斯坦(Clifford Stein)。[2]来自Wikipedia的数据结构列表(本文翻译自Vijini Mallawaarachchi的文章《8 Common Data Structures every Programmer must know》,参考:https://towardsdatascience.com/8-common-data-structures-every-programmer-must-know-171acf6a1a42)