栈
栈是一种运算受限的线性表,是一种先进后出的数据结构,限定只能在一端进行插入和删除操作,允许操作的一端称为栈顶,不允许操作的称为栈底。
package com.wzc;/*
*@date 2021/3/1
* @author wzc
*/
public class MyStack {
//栈的底层我们用数组存储数据
int[] elements;
public MyStack() {
elements = new int[0];
}
//压入元素
public void push(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 pop(){
if (elements.length ==0){
throw new RuntimeException("stack is Empty");
}
//取出数组中最后一个元素
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 com.wzc;/*
*@date 2021/3/1
* @author wzc
*/
public class StackTest {
public static void main(String[] args) {
MyStack ms = new MyStack();
ms.push(3);
ms.push(6);
ms.push(4);
ms.push(45);
System.out.println("栈顶元素是"+ms.peek());
ms.pop();
System.out.println("栈顶元素是"+ms.peek());
System.out.println(ms.isEmpty());
}
}
编译结果:
队列
队列是一种先进先出(First in First Out)的线性表,简称FIFO。允许插入的一端称为队尾,允许删除的一端称为队头。
代码与栈有些类似:
package com.wzc;/*
*@date 2021/3/1
* @author wzc
*/
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 poll(){
if (elements.length == 0){
throw new RuntimeException("queue is Empty");
}
int element = elements[0];
int[] newArr = new int[elements.length - 1];
for (int i = 0; i < elements.length - 1; i++) {
newArr[i] = elements[i+1];
}
elements = newArr;
return element;
}
public boolean isEmpty(){
return elements.length == 0;
}
}
测试:
package com.wzc;/*
*@date 2021/3/1
* @author wzc
*/
public class Queuetest {
public static void main(String[] args) {
MyQueue mq = new MyQueue();
mq.add(1);
mq.add(4);
mq.add(5);
mq.add(45);
System.out.println(mq.poll());
System.out.println(mq.poll());
System.out.println(mq.poll());
System.out.println(mq.poll());
System.out.println(mq.isEmpty());
}
}
编译结果: