
栈相当于一个箱子,入栈像放书,先进后出(取第一本书出来的时候,要把上面的先取走)
栈的基本使用自定义栈类和栈的基本使用
public class MyStack {
// 这里栈的底层使用数组来存储数据
private int[] elements;
public MyStack() {
elements = new int[0];
}
// 自定义方法1:压入元素,输入要压入的元素element
public void push(int element) {
// 创建一个长度+1新数组来存储旧数组的数据
int[] newArr = new int[elements.length+1];
// 循环遍历elements赋值给newArr
for(int i = 0;i < elements.length;i++) {
newArr[i] = elements[i];
}
// newArr[elements.length]为压入的元素
newArr[elements.length] = element;
// 把newArr地址赋给elements,完成旧数组elements的更新
elements = newArr;
}
// 自定义方法2:取出栈顶元素,返回栈顶元素
public int pop() {
// 对栈顶元素去出的操作中,如果没有元素则抛出异常stack is empty
if(elements.length == 0) {
throw new RuntimeException("stack is empty");
}
//栈顶元素即是数组的最后一个元素,先用变量存储方便后面取出栈顶元素返回其值
int element = elements[elements.length- 1];
//创建长度-1的新数组来存储旧数组的数据,方便之后更新旧数组elements
int[] newArr = new int[elements.length - 1];
for(int i = 0;i < newArr.length;i++) {
newArr[i] = elements[i];
}
//替换数组
elements = newArr;
return element;
}
// 自定义方法3:查看栈顶元素
public int peek() {
// 放回最后一个元素就是栈顶
return elements[elements.length - 1];
}
// 自定义方法4:判断栈是否为空
public boolean isEmpty() {
if(elements.length == 0) {
return true;
}
return false;
}
}
Test测试类用来测试MyStack
public class Test {
public static void main(String[] args) {
// 创建一个空栈
MyStack ms = new MyStack();
// 测试是否抛出空栈取出栈顶元素失败的异常
// ms.pop(); //输出结果:stack is empty
ms.push(1); //第一入栈元素:1
ms.push(3); //第二个入栈元素:3
ms.push(7); //第三个入栈元素:7
System.out.println(ms.pop()); //取出此时栈顶元素7
System.out.println(ms.pop()); //取出此时栈顶元素3
System.out.println("经过两次取出栈顶元素后,此时栈顶元素为"+ms.peek());
System.out.println(ms.isEmpty());//判断栈是否为空
}
}
什么是队列
队列,相当于排队买票一样,先进先出
自定义队列类和队列的基本使用
public class MyQueue {
private int[] elements;
public MyQueue() {
elements = new int[0];
}
//入队
public void add(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;
//将newArr的地址值赋给elements,实现对elements的更新
elements = newArr;
}
//出队思路:newArr[i] = elements[i+1],把elemens[0]去掉,i+1错开赋值就行
public int poll() {
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() {
//如果数组elements长度length == 0,则为空
return elements.length == 0;
}
}
Test测试类用来测试MyQueue
public class Test {
public static void main(String[] args) {
MyQueue mq = new MyQueue();
mq.add(11);
mq.add(22);
mq.add(33); //此时11,22,33
System.out.println(mq.poll()); //出队为11
mq.add(44); //此时22,33,44
System.out.println(mq.poll()); //出队为22
System.out.println(mq.isEmpty()); //此时为33,44
mq.poll();
mq.poll();
System.out.println(mq.isEmpty()); //此时为空
}
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)