标签:地址 target 指针 元素 因此 描述 栈和队列 双向 内存
什么是队列?
队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。
与栈不同的是队列遵循“先进后出”,即数据从一端插入,另一端弹出。两端分别进行不同的操作。
注:如果将栈和队列结合,即可以实现双向队列,即两端都可以插入,也都可以弹出。本文仅仅针对单向队列描述。
队列的实现方式
1、数组实现
1.1 插入元素
将rear指针向后移动一个位置,并且将插入的数据放入rear指向地址空间。(如果数组容量不够需要扩容,同栈扩容原理一致)
1.2 弹出元素
数组元素弹出的实现方式有两种
1.2.1 直接移动指针
如上图所示,直接将front指针向后移动一位,数组实际没有发生变化。(内存空间浪费,无效空间无法被GC回收)
1.2.2 数组整体往前移动,删除顶部元素
如上图所示,数组整体向前移动一个位置,front指向位置不变,rear指向位置向前移动一位。(需要频繁的进行数组移动,浪费了性能)
2、链表实现
2.1 插入元素
如上图所示,通过链表实现队列只需要将元素6的下一个节点指针指向新的元素节点7,同时将rear指向新的节点7即可。(不需要提前申请空间,也不需要向数组一样扩容)
2.2 弹出元素
如上图所示,链表弹出元素将元素节点1与元素节点2断开,同时将front指向元素节点2。
3、对比总结
标签:地址 target 指针 元素 因此 描述 栈和队列 双向 内存
原文地址:https://www.cnblogs.com/xiaolangabc/p/10821655.html