数据结构-2-[栈与队列]

213 阅读2分钟

这是我参与8月更文挑战的第7天,活动详情查看:8月更文挑战

1. 栈

1.1 堆和栈的关系

  • 堆通常是一个可以被看做一棵树的数组对象。堆总是满足下列性质
    • 堆中某个节点的值总是不大于或不小于其父节点的值
    • 堆总是一棵完全二叉树
    • 数据结构是二叉树
  • 堆是在程序运行时,而不是在程序编译时,申请某个大小的内存空间,即动态分配内存
  • 应用对堆的访问和对一般内存的访问没有区别。
  • 堆是指程序运行时申请的动态内存,而栈只是指一种使用堆的方法【先进后出】

1.2 栈 Stack

image.png

  • 栈也称为堆栈,是一种线性表。
  • Stack - First In Last Out (FILO) 先进后出
  • 实现方式Array数组LinkedList链表
  • 常用操作方法:
    • push() 入栈
    • pop() 出栈
    • peek() 查询栈顶元素

2. 队列

2.1 队列 Queue

image.png

  • 一种特殊的线性表结构
  • Queue - First In First Out (FIFO) 先进先出
  • 在队尾添加元素,在队头删除元素
  • 实现方式Array数组LinkedList链表
  • 常用操作方法:
    • push() 入队列
    • pop() 出队列

2.2 优先队列

  • PriorityQueue - 优先队列
  • 优先队列具有队列的所有特性,包括基本操作,只是在这基础上添加了内部的一个排序。
  • 特点:正常入、按照优先级出
  • 优先队列实现机制
    • 第1种 Heap (Binary, Binomial, Fibonacci)
    • 第2种 Binary Search Tree

2.3 堆排序与优先队列

  • 堆排序是用堆实现的一个【算法】
  • 优先队列是用堆实现的【数据结构】
  • 堆排序仅仅是排序,优先队列可以随时取队中最大值,插入等,手动实现也可以一定程度上实现删除

3. 常见算法复杂度

image.png image.png 图片来源:www.bigocheatsheet.com/

参考地址