栈:先进后出
队列:先进先出
都是数组存放,但是删除的时候不是删除了数组中的数据,而是使用增加游标标识的方式实现删除,“游标标识”加加或者减减完成删除操作,查看的时候,也不是直接查看栈和队列的数组元素,而是使用游标的方式向外查看。
栈的实现
package com.example.deer; public class MyStack { private long[] arr; private int top; /** * 默认构造函数 */ public MyStack(){ arr = new long[10]; top = -1; } /** * 带参数构造函数 * @param maxsize */ public MyStack(int maxsize){ arr = new long[maxsize]; top = -1; } /** * 新增数据 * @param value */ public void push(int value){ arr[++top] = value; } /** * 移除数据 * @return */ public long pop(){ return arr[top--]; } /** * 查看数据 * @return */ public long peek(){ return arr[top]; } /** * 判断是否为空 * @return */ public boolean isEmpty(){ return top == -1; } /** * 判断是否满了 * @return */ public boolean isFull(){ return top == arr.length - 1; }}队列的实现
package com.example.deer; 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; } /** * 带参数的构造方法,参数为数组大小 * @param maxsize */ 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; }}循环队列主要解决的问题是:队列一旦存满了或者删的超过队列长度,将会出现角标越界的问题。循环队列实现
package com.example.deer; 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; } /** * 带参数的构造方法,参数为数组大小 * @param maxsize */ public MyQueue(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; }}
原文地址:https://www.cnblogs.com/xiaohualu/p/11775708.html
时间: 2024-08-17 23:27:16