Java数据结构_3.栈
程序员文章站
2022-05-15 14:36:32
...
一、入栈图
二、代码实现
package com.xianxing.stack;
/**
* 栈
*
* @author l1
*
*/
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 String show() {
String stackString = "";
for (int i = elements.length - 1; i >= 0; i--) {
stackString += elements[i] + " ";
}
return stackString;
}
// 出栈(取出栈顶元素)
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() {
if (elements.length == 0) {
throw new RuntimeException("stack is empty!");
}
return elements[elements.length - 1];
}
// 判断栈是否为空
public boolean isEmpty() {
return elements.length == 0;
}
}
package com.xianxing.stack;
public class TestMyStack {
public static void main(String[] args) {
// 创建一个栈
MyStack ms = new MyStack();
// 入栈
ms.push(9);
ms.push(8);
ms.push(7);
ms.push(6);
// 查看栈中所有元素
System.out.println(ms.show());// 6 7 8 9
// 出栈
System.out.println(ms.pop());// 6
System.out.println(ms.pop());// 7
// 查看栈顶元素
System.out.println(ms.peek());// 8
ms.pop();
System.out.println(ms.peek());// 9
// 判空
System.out.println(ms.isEmpty());// false
ms.pop();
System.out.println(ms.isEmpty());// true
}
}