这是我参与8月更文挑战的第7天,活动详情查看:8月更文挑战
1. 栈
1.1 堆和栈的关系
- 堆通常是一个可以被看做一棵树的数组对象。堆总是满足下列性质
- 堆中某个节点的值总是不大于或不小于其父节点的值
- 堆总是一棵完全二叉树
- 数据结构是二叉树
- 堆是在程序运行时,而不是在程序编译时,申请某个大小的内存空间,即动态分配内存
- 应用对堆的访问和对一般内存的访问没有区别。
- 堆是指程序运行时申请的动态内存,而栈只是指一种使用堆的方法【先进后出】
1.2 栈 Stack
- 栈也称为堆栈,是一种线性表。
- Stack - First In Last Out (FILO) 先进后出
- 实现方式:Array数组 或 LinkedList链表
- 常用操作方法:
- push() 入栈
- pop() 出栈
- peek() 查询栈顶元素
2. 队列
2.1 队列 Queue
- 一种特殊的线性表结构
- Queue - First In First Out (FIFO) 先进先出
- 在队尾添加元素,在队头删除元素
- 实现方式:Array数组 或 LinkedList链表
- 常用操作方法:
- push() 入队列
- pop() 出队列
2.2 优先队列
- PriorityQueue - 优先队列
- 优先队列具有队列的所有特性,包括基本操作,只是在这基础上添加了内部的一个排序。
- 特点:正常入、按照优先级出
- 优先队列实现机制:
- 第1种 Heap (Binary, Binomial, Fibonacci)
- 第2种 Binary Search Tree
2.3 堆排序与优先队列
- 堆排序是用堆实现的一个【算法】
- 优先队列是用堆实现的【数据结构】
- 堆排序仅仅是排序,优先队列可以随时取队中最大值,插入等,手动实现也可以一定程度上实现删除