栈和队列

栈(Stack)

栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈
顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。
压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。
出栈:栈的删除操作叫做出栈。出数据在栈顶

. 利用顺序表实现,即使用尾插 + 尾删的方式实现

  1. 利用链表实现,则头尾皆可

相对来说,顺序表的实现上要更为简单一些,所以我们优先用顺序表实现栈。
public class MyStack {
// 简单起见,我们就不考虑扩容问题了
private int[] array = new int[100];
private int size = 0;
public void push(int v) {
array[size++] = v;
}
public int pop() {
return array[–size];
public int peek() {
return array[size - 1];
}
public boolean isEmpty() {
return size == 0;
}
public int size() {
return size;
}
}

队列(Queue)

队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出FIFO(First
In First Out) 入队列:进行插入操作的一端称为队尾(Tail/Rear) 出队列:进行删除操作的一端称为队头
(Head/Front)

实现

class Node {int val;
Node next;
Node(int val, Node next) {this.val = val;
this.next = next;
}
Node(int val) {this(val, null);
}
}
public class MyQueue {private Node head = null;
private Node tail = null;
private int size = 0;
public void offer(int v) {Node node = new Node(v);
if (tail == null) {head = node;
} else {tail.next = node;
}
tail = node;
size++;
}
public int poll() {if (size == 0) {throw new RuntimeException("队列为空");
}
Node oldHead = head;
head = head.next;
if (head == null) {tail = null;
}
size--;
return oldHead.val;
}
public int peek() {if (size == 0) {throw new RuntimeException("队列为空");
}
return head.val;
}
public boolean isEmpty() {return size == 0;
}
public int size() {return size;
}
}

队列也可以数组和链表的结构实现,使用链表的结构实现更优一些,因为如果使用数组的结构,出队列在数组头上
出数据,效率会比较低

循环队列

实际中我们有时还会使用一种队列叫循环队列。如操作系统课程讲解生产者消费者模型时可以就会使用循环队列。
环形队列通常使用数组实现

数组下标循环的小技巧

  1. 下标最后再往后(offset 小于 array.length):

  2. index = (index + offset) % array.length

  3. 下标最前再往前(offset 小于 array.length):

  4. index = (index + array.length - offset) % array.length


如何区分空与满

1. 通过添加 size 属性记录
2. 保留一个位置

双端队列 (Deque)

概念
双端队列(deque)是指允许两端都可以进行入队和出队操作的队列,deque 是 “double ended queue” 的简称。
那就说明元素可以从队头出队和入队,也可以从队尾出队和入队。

Stack
方法 解释
E push(E item) … 压栈
E pop() … 出栈
E peek() …查看栈顶元素
boolean empty() … 判断栈是否为空

Queue
错误处理// / 抛出异常 /// 返回特殊值
入队列 add(e) // offer(e)
出队列 remove() / poll()
队首元素 /element() peek()

不理解栈和队列?知道子弹上膛和火车穿隧道就好相关推荐

  1. 【剑指offer - C++/Java】5、用两个栈实现队列

    学习交流加 个人qq: 1126137994 个人微信: liu1126137994 学习交流资源分享qq群: 962535112 牛客网题目链接:用两个栈实现队列 文章目录 1.题目分析 2.代码 ...

  2. 剑指Offer的学习笔记(C#篇)-- 用两个栈实现队列

    题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 一 . 概念! 首先要理解栈和队列的概念. 1. 栈:咱可以简单的把栈理解成装羽毛球的球桶.或者我们吃的 ...

  3. java 栈队列区别是什么意思_java栈和队列的区别

    Java中用LinkedList实现栈和队列_IT/计算机_专业资料.笔记摘录 栈和队列是两种特殊的线性表,它们的逻辑结构和线性表相同,只是其运算规则 较线性表有更多的限制,故...... 闽江学院电 ...

  4. 图解数据结构:栈和队列

    前言 阅读此篇之前,强烈建议先仔细阅读上一篇 图解数据结构:数组和单链表 ,会有事半功倍的效果,并且此篇的代码,基本上是复用上一篇的实现. 上一篇主要讲解了数组和链表这两种线性结构的特点.区别.时间复 ...

  5. C语言数据结构【手抄版】第三章 栈和队列

    注意:文中彩色代码均在Visual Studio 2022编译器中编写,本文为C语言数据结构手抄版,文中有部分改动,非原创. 目录 注意:文中彩色代码均在Visual Studio 2022编译器中编 ...

  6. 数据结构栈与队列的应用之汽车轮渡问题——自己的一些理解

    本题摘自王道数据结构栈与队列的应用的课后题,题目如下: 某汽车轮渡口,过江渡船每次能载10辆汽车过江.过江车辆分为客车类和货车类,上渡船有如下规定:同类车先到先上船,客车先于货车上船,且每上4辆客车, ...

  7. 数据结构中堆、栈和队列的理解

    一.堆 堆是一种经过排序的树形数据结构,每个节点都有一个值,通常我们所说的堆的数据结构是指二叉树.所以堆在数据结构中通常可以被看做是一棵树的数组对象.而且堆需要满足一下两个性质: (1)堆中某个节点的 ...

  8. 保存数组_面试官:讲一讲你对据结构——数组、链表、栈、队列的理解

    一.解释定义 1. 数据结构: 数据结构是指相互之间存在一种或多种特定关系的数据元素的集合.再简单描述一下:数据结构就是描述对象间逻辑关系的学科. 如果还是不太清楚下面会举例说明的. 2. 数据存储结 ...

  9. 《大话数据结构》读书笔记-栈与队列

    写在前面:本文仅供个人学习使用.<大话数据结构>通俗易懂,适合整体做笔记输出,构建体系.并且文中很多图片来源于该书. 文章目录 4.2栈的定义 4.2.1 栈的定义 4.2.2 进栈出栈变 ...

最新文章

  1. 通过仿真和综合认识D触发器(Verilog HDL语言描述D触发器)
  2. intelij idea java.lang.ClassNotFoundException
  3. IOS Masonry自动布局
  4. 清空mysql注册表步骤_完全卸载MySQL 数据库清空MySql注册表
  5. python做Linux进程运行,Python实现在Linux系统下更改当前进程运行用户
  6. cad打印字体颜色很淡_收藏|50个CAD技巧,常画电路图的你一定得知道
  7. 浅谈php7的重大新特性_PHP7的新特性和源码结构
  8. mysql自带加密解密字符集问题
  9. js中报错 ajax不存在,AJAX
  10. 有人问我:Linux下命令行里 password:的时候 用键盘密码打不了
  11. Python学习之路9☞面向对象的程序设计
  12. anylogic和java_Anylogic各个版本的功能对比
  13. PCB设计经典资料学习汇总
  14. Xcode6 中URL Scheme的具体使用
  15. workman定时器使用
  16. 液晶显示器画面模糊有毛边解决方法
  17. 名帖337 张旭 草书《古诗四帖》
  18. 安装PS 无法选择路径
  19. mosquitto使用的基本流程以及一些遇见的问题
  20. 专题三:羊毛党络绎不绝,电商行业防不胜防

热门文章

  1. 静电耳机与普通动圈或动铁耳机有什么区别
  2. 敏捷开发框架的开发运用之ERP系统开发
  3. 组合逻辑电路一——数字逻辑实验
  4. SAP市场模拟使用手册
  5. [复现]在colab上实现HistoSegNet
  6. 微商靠什么引流?微商有哪些平台可以精准引流?
  7. 软件的接口设计图_软件的生命周期amp;测试基本流程
  8. 【设计模式】单例(Singleton)
  9. The Mana World 有感
  10. EAUML日拱一卒 总目录