栈与队列解析
这篇文章主要写一关于栈与队列的内容,及一些实现机制,方法设计,等等之类的
栈结构
Stack
特点:先进后出
例:手枪压子弹,先打出去的是最后面存上的一个
这里使用数组实现栈结构
public class MyStack{
//栈的底层这里使用数组来存储
int[] elements;
public MyStack(){
elements = new int[0];
}
//压入元素
public void push(int element){
//创建一个新数组,原长度+1
int[] newArr = new int[elements.length+1];
//把原数组中的元素复制到新数组中
for(int i=0;i<elements.length;i++){
newArr[i] = elements[i];
}
//把要添加的元素放入新数组中
newArr[elements.length] = element;
//使用新数组替换旧数组
elements = newArr;
}
//取出栈顶元素
public int pop(){
//取出数组的最后一个元素
int element = elements[elements.length-1];
//创建一个新数组
int[] newArr = new int[elements.length-1];
//把原数组中的元素复制到新数组中
for(int i=0;i<elements.length-1;i++){
newArr[i] = elements[i];
}
//替换数组
elements = newArr;
//返回栈顶元素
return element;
}
//查看栈顶元素
public int peek(){
return elements[elements.length-1];
}
//判断是否为空
public boolean isEmpty(){
return elements.length==0;
}
}
测试类
package lx2;
public class TestStack {
public static void main(String[] args) {
MyStack ms = new MyStack();
//压入数组元素
ms.push(1);
ms.push(2);
ms.push(3);
System.out.println( ms.isEmpty());
//取出栈顶元素
System.out.println(ms.pop());
System.out.println(ms.pop());
System.out.println(ms.pop());
System.out.println( ms.isEmpty());
}
}
队列
Queue
特点:先进先出
First in First Out(FIFO)
例:食堂打饭,先吃到饭的是最前面排队的那一个
public class MyQueue{
int[] elements;
public MyQueue(){
elements = new int[0];
}
//入队
public void add(int element){
//创建一个新数组
int[] newArr = new int[elements.length+1];
//原数组复制到新数组
for(int i = 0;i<elements.length;i++){
newArr[i] = elements[i];
}
//待添加的元素加入新数组中
newArr[elements.length] = element;
//替换
elements = newArr;
}
//出队
public int pull(){
//把数组中的第0个元素取出来
int element = elements[0];
//创建一个新新数组
int[] newArr = new int[elements.length-1];
//原数组复制到新数组
for(int i=0;i<newArr.length;i++){
//注意这里上下两行的细节
newArr[i] = elements[i+1];
}
//替换数组
elements = newArr;
return element;
}
//判断队列是否为空
public boolean isEmpty(){
//为空则返回true
return elements.length==0;
}
}
测试类
public class TestQueue{
public static void main(String[] args){
//创建一个队列
MyQueue mq = new MyQueue();
//入队
mq.add(1);
mq.add(2);
mq.add(3);
System.out.println(mq.isEmpty());
//出队
System.out.println(mq.pull());
System.out.println(mq.pull());
System.out.println(mq.pull());
System.out.println(mq.isEmpty());
}
}