1.用 Java 模拟栈
1.1 栈是什么
栈是一种数据结构,它按照后进先出的原则来存储和访问数据。这意味着最后添加到栈中的元素最先被访问和移除,而最先添加到栈中的元素最后被访问和移除。
栈的基本操作包括入栈(push)
,即将元素添加到栈顶;出栈(pop)
,即将栈顶元素移除;以及访问栈顶元素(peek)
。
1.2 模拟栈
(1)在Java
中,Stack
的底层是用数组来装数据,所以我们这里就用数组来模拟。
public class MyStack { //装数据 private int[] data; //栈中的数据个数 public int useSize;//初始值为0 public MyStack(){ //初始空间为 10 data = new int[10]; } //返回栈中的元素个数 public int size(){ return useSize; } }
(2)入栈:当空间满了后扩容。
//扩容 public void capacity(){ this.data = Arrays.copyOf(this.data, (int) (1.5 * this.data.length)); } //判断是否满了, public boolean isFull () { return useSize == this.data.length; } //入栈,返回插入成功的值 public int push(int val){ if(isFull()){ capacity(); } this.data[useSize] = val; useSize++;//useSize 始终指向的是栈顶元素的下一个位置。 return val; }
(3)出栈:
//判断是否为空 public boolean isEmpty() { return useSize == 0; } //出栈,返回出栈的值 public int pop(){ if(isEmpty()){ throw new NullPointerException("栈空"); } return this.data[--useSize]; }
(4)查看栈顶元素:
//查看栈顶元素 public int peek(){ if(isEmpty()){ throw new NullPointerException("栈空"); } return this.data[useSize - 1]; }
1.3 汇总
public class MyStack { //装数据 private int[] data; //栈中的数据个数; private int useSize; public MyStack(){ //初始空间为 10 this.data = new int[10]; } //扩容 public void capacity(){ this.data = Arrays.copyOf(this.data, (int) (1.5 * this.data.length)); } //判断是否满了, public boolean isFull () { return useSize == this.data.length; } //入栈,返回插入成功的值 public int push(int val){ if(isFull()){ capacity(); } this.data[useSize] = val; useSize++;//useSize 始终指向的是栈顶元素的下一个位置。 return val; } //判断是否为空 public boolean isEmpty() { return useSize == 0; } //出栈,返回出栈的值 public int pop(){ if(isEmpty()){ throw new NullPointerException("栈空"); } return this.data[--useSize]; } //查看栈顶元素 public int peek(){ if(isEmpty()){ throw new NullPointerException("栈空"); } return this.data[useSize - 1]; } //返回栈中的元素个数 public int size(){ return useSize; } }
2.Stack 类的介绍
2.1 Stack 的常用方法
在Java
中,Stack
是一个类,表示栈数据结构的实现。它继承自Vector
类,因此具有Vector
类的所有方法,并且还提供了堆栈操作的额外方法。Stack
类实现了栈数据结构的基本操作,包括将元素压入栈顶、从栈顶弹出元素、查看栈顶元素等。
构造方法 | 描述 |
---|---|
Stack() | 创建一个空堆栈 |
方法 | 描述 |
---|---|
E push(E item) | 将元素压入栈顶部 |
E pop() | 移除栈顶部的元素并返回该元素 |
E peek() | 返回栈顶部的元素而不移除它 |
int size() | 获取栈中有效元素个数 |
boolean empty() | 测试栈是否为空 |
int search(Object o) | 返回对象在堆栈中的位置,以 1 为基数 |
search(Object o)
方法用于查询栈中给定元素 o
在该栈中出现的位置。若该元素存在于栈中,则返回该元素在栈中的距离栈顶的位置。栈顶位置为 1,往下递增。
public static void main(String[] args) { // 创建一个堆栈 Stack<String> stack = new Stack<>(); // 将元素压入堆栈 stack.push("Java"); stack.push("Python"); stack.push("C++"); // 查找元素在堆栈中的位置 int index1 = stack.search("Java"); int index2 = stack.search("Python"); int index3 = stack.search("C++"); // 输出元素在堆栈中的位置 System.out.println("Java在堆栈中的位置是:" + index1); System.out.println("Python在堆栈中的位置是:" + index2); System.out.println("C++在堆栈中的位置是:" + index3); }
结果:
到此这篇关于详解Java模拟栈的实现以及Stack类的介绍的文章就介绍到这了,更多相关Java栈与Stack类内容请搜索好代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持好代码网!