一,栈

public class MyStack {

//底层实现是一个数组

private long[] arr;

private int top;

/**

* 默认的构造方法

*/

public MyStack() {

arr = new long[10];

top = -1;

}

/**

* 带参数构造方法,参数为数组初始化大小

*/

public MyStack(int maxsize) {

arr = new long[maxsize];

top = -1;

}

/**

* 添加数据

*/

public void push(int value) {

arr[++top] = value;

}

/**

* 移除数据

*/

public long pop() {

return arr[top--];

}

/**

* 查看数据

*/

public long peek() {

return arr[top];

}

/**

* 判断是否为空

*/

public boolean isEmpty() {

return top == -1;

}

/**

* 判断是否满了

*/

public boolean isFull() {

return top == arr.length - 1;

}

}

测试:

public class TestMyStack {

public static void main(String[] args) {

MyStack ms = new MyStack(4);

ms.push(23);

ms.push(12);

ms.push(1);

ms.push(90);

System.out.println(ms.isEmpty());

System.out.println(ms.isFull());

System.out.println(ms.peek());

System.out.println(ms.peek());

while(!ms.isEmpty()) {

System.out.print(ms.pop() + ",");

}

System.out.println(ms.isEmpty());

System.out.println(ms.isFull());

}

}

二,队列

public class MyQueue {

//底层使用数组

private long[] arr;

//有效数据的大小

private int elements;

//队头

private int front;

//队尾

private int end;

/**

* 默认构造方法

*/

public MyQueue() {

arr = new long[10];

elements = 0;

front = 0;

end = -1;

}

/**

* 带参数的构造方法,参数为数组的大小

*/

public MyQueue(int maxsize) {

arr = new long[maxsize];

elements = 0;

front = 0;

end = -1;

}

/**

* 添加数据,从队尾插入

*/

public void insert(long value) {

arr[++end] = value;

elements++;

}

/**

* 删除数据,从队头删除

*/

public long remove() {

elements--;

return arr[front++];

}

/**

* 查看数据,从队头查看

*/

public long peek() {

return arr[front];

}

/**

* 判断是否为空

*/

public boolean isEmpty() {

return elements == 0;

}

/**

* 判断是否满了

*/

public boolean isFull() {

return elements == arr.length;

}

}

三,循环队列

public class MyCycleQueue {

//底层使用数组

private long[] arr;

//有效数据的大小

private int elements;

//队头

private int front;

//队尾

private int end;

/**

* 默认构造方法

*/

public MyCycleQueue() {

arr = new long[10];

elements = 0;

front = 0;

end = -1;

}

/**

* 带参数的构造方法,参数为数组的大小

*/

public MyCycleQueue(int maxsize) {

arr = new long[maxsize];

elements = 0;

front = 0;

end = -1;

}

/**

* 添加数据,从队尾插入

*/

public void insert(long value) {

if(end == arr.length - 1) {

end = -1;

}

arr[++end] = value;

elements++;

}

/**

* 删除数据,从队头删除

*/

public long remove() {

long value = arr[front++];

if(front == arr.length) {

front = 0;

}

elements--;

return value;

}

/**

* 查看数据,从队头查看

*/

public long peek() {

return arr[front];

}

/**

* 判断是否为空

*/

public boolean isEmpty() {

return elements == 0;

}

/**

* 判断是否满了

*/

public boolean isFull() {

return elements == arr.length;

}

}

测试:

public class TestMyQueue {

public static void main(String[] args) {

MyCycleQueue mq = new MyCycleQueue(4);

//MyQueue mq = new MyQueue(4);

mq.insert(23);

mq.insert(45);

mq.insert(13);

mq.insert(1);

System.out.println(mq.isFull());

System.out.println(mq.isEmpty());

System.out.println(mq.peek());

System.out.println(mq.peek());

while (!mq.isEmpty()) {

System.out.print(mq.remove() + " ");

}

System.out.println();

mq.insert(23);

mq.insert(45);

mq.insert(13);

mq.insert(1);

while (!mq.isEmpty()) {

System.out.print(mq.remove() + " ");

}

}

}

转载于:https://blog.51cto.com/8169085/1696275

研磨数据结构与算法-03栈与队列相关推荐

  1. 数据结构与算法--利用栈实现队列

    利用栈实现队列 上一节中说明了栈的特点 后进先出,我们用数组的方式实现了栈的基本操作api,因此我们对栈的操作是不考虑排序的,每个api的操作基本都是O(1)的世界,因为不考虑顺序,所以找最大,最小值 ...

  2. 数据结构与算法(2)——栈和队列

    前言:题图无关,只是好看,接下来就来复习一下栈和队列的相关知识 前序文章: 数据结构与算法(1)--数组与链表(https://www.jianshu.com/p/7b93b3570875) 栈 什么 ...

  3. 【数据结构与算法】栈与队列

    栈 一.什么是栈? 1.后进者先出,先进者后出,这就是典型的"栈"结构. 2.从栈的操作特性来看,是一种"操作受限"的线性表,只允许在端插入和删除数据. 二.为 ...

  4. 数据结构与算法之栈与队列:java实现

    闻理似悟,遇境则迷!!! 栈与队列来说也算是一种特殊的线性表,栈的特点是后进先出,队列的特点是先进先出. 栈 栈的特点是后进先出,栈的操作只有出栈和入栈(也叫压栈),除此之外,还包含栈顶与栈底的指向以 ...

  5. 【数据结构与算法】栈与队列【C语言版】

    目录 3.1 栈和队列的定义和特点 3.2 栈.队列与一般线性表的区别 3.3 栈的表示和操作的实现 顺序栈与顺序表 ================= 顺序栈的表示 顺序栈初始化 判断顺序栈是否为空 ...

  6. 用JS描述的数据结构及算法表示——栈和队列(基础版)

    前言:找了上课时数据结构的教程来看,但是用的语言是c++,所以具体实现在网上搜大神的博客来看,我看到的大神们的博客都写得特别好,不止讲了最基本的思想和算法实现,更多的是侧重于实例运用,一边看一边在心里 ...

  7. 数据结构与算法(二) 栈与队列(代码示例)

    数据结构与算法 栈与队列 1. 数组和链表实现栈 2. 用O(1)的时间复杂度求栈中的最小元素 3. 链表和数组实现队列 4. 用两个栈模拟队列操作 1. 数组和链表实现栈 链表的方式: /*** 描 ...

  8. 数据结构与算法 | 用栈实现队列

    之前的几章我讲解了栈和队列的基本特性和一些基本的操作方法,那么如何能利用栈来实现队列呢? 下面我来讲解下具体思路,栈的特性先进后出,队列是先进先出,如果要模拟队列的这个特性,我们就必须用到两个栈. 一 ...

  9. Python数据结构与算法(六)--栈和队列

    栈和队列 栈(stack),有些地方称为堆栈,是一种容器,可存入数据元素.访问元素.删除元素,它的特点在于只能允许在容器的一端(称为栈顶端指标,英语:top)进行加入数据(英语:push)和输出数据( ...

最新文章

  1. C#:异步编程和线程的使用(.NET 4.5 ),异步方法改为同步执行
  2. python语言变量命名规则有什-以下选项中,符合Python语言变量命名规则的是_学小易找答案...
  3. Ubuntu apt安装/卸载软件和设置软件源
  4. Vue前端-Flask后台跨域访问问题的处理
  5. 获取系统版本号_数据库系统原理
  6. 180326新闻:创客授牌仪式新闻稿
  7. windows环境下nginx的入门配置跳转tomcat
  8. Linux 用户 和 用户组 管理 (添加、删除、修改)及说明
  9. 苹果挥刀,iPhone 12 mini要换处理器了,无缘A14!
  10. 拳王虚拟项目公社:闲鱼操作卖资源如何赚钱?闲鱼怎么卖虚拟资源?卖什么资源赚钱?
  11. 快速搭建Web环境 Angularjs + Express3 + Bootstrap3
  12. AD2017破解步骤
  13. html做出文字凹凸效果,css3怎么实现字体凹陷凸出效果?(附代码)
  14. 硬件知识:网线的分类知识笔记,看完你就懂了!
  15. 2000-2018年各省研发投入面板数据
  16. 计算机录制视频的方法,怎么录制电脑屏幕视频步骤(电脑录屏的方法有4种)...
  17. java xheditor_xhEditor与Java结合使用
  18. JAVA基础-多线程中锁机制
  19. 2019年区块链安全事件总结,全球损失超60亿美元 | 盘点
  20. WIFI:802.11协议帧格式

热门文章

  1. 超详细深度学习debug指南,国外小哥手把手教你如何调试模型 | 附PPT
  2. Google猜画小歌升级:现在可以跟好友对战了
  3. 训练AI太辛苦?OpenAI新方法:不如让AI之间互教吧
  4. 哈佛MIT联手出品 | 造价低于1美元的机械臂,可承自身重量千倍
  5. [1]elasticsearch源码编译
  6. 防火墙在setup进入不了
  7. 聊聊 rel=noopener
  8. Linux文件和目录的属性及权限
  9. clojure 使用Lazy-seq创建斐波那契数列
  10. Convert.ToInt32()与int.Parse()的区别