一.栈的特点
其实我们计算机科学中,一种思想是“先进后出的思想”。在很多算法或应用中,需要用到“先进后出或者是后进先出 的思想”,我们可以考虑用栈来实现。
abcde 这组数按照顺序入栈
二.栈的存储结构
顺序存储: 在Java中 会提供给我们一个Stack类它的底层就是数组,就是一个顺序表
链式存储:用地址不连续的空间来存储数据元素,可能需要额外开辟一些空间,来存储“数据元素之间的逻辑关系"。
三.栈的基本操作
在Java提供的Stack类中会有这几中方法
1.push() : 入栈把一个元素放入栈中
2.pop() : 出栈把栈顶元素移除(删除掉) 同时也会返回被删除的值
3.peek() : 得到栈顶的一个元素
4.empty() : 判断栈是否为空 如果为空返回 true 不为空返回 false
5 . serch() : 查询一个值在栈中的位置
public class MyStack {
public static void main(String[] args) {
//实例化Stack类
Stack<Integer> stack = new Stack<>();
//将 12 23 入栈
stack.push(12);
stack.push(23);
//移除栈顶元素并且返回它的值
Integer popNum = stack.pop();
System.out.println("被删除的数为:" + popNum);
//得到栈顶元素 不删除
Integer peekNum = stack.peek();
System.out.println("栈顶的元素为 : " + peekNum);
//判断栈是否为空
System.out.println(stack.empty());
//查询12在栈中的位置 不存在则返回-1
int index = stack.search(12);
System.out.println( "12在栈中的位置: " + index);
//查询23在栈中的位置 不存在则返回-1
int index1 = stack.search(23);
System.out.println("23在栈中的位置 : " + index1);
}
}
运行结果为:
我们也可以自己实现一个栈 下面代码供大家理解:
import java.util.Arrays;
public class MyStack {
int[] elem;
int usedSize; // 使用usedSize来记录栈的有效数字
//这里通过构造方法来给数组初始化
//初始化长度设置为5
public MyStack() {
elem = new int[5];
}
//入栈
public void push(int val) {
if (isFull()) {
//如果满了 就给它进行2倍扩容
this.elem = Arrays.copyOf(this.elem, this.elem.length * 2);
}
this.elem[usedSize++] = val;
}
//出栈
public int pop() {
if (isEmpty()) {
//如果空 就抛异常
throw new RuntimeException("栈为空");
}
int oldVal = this.elem[--usedSize];
return oldVal;
}
//获得栈顶元素
public int peek() {
if (isEmpty()) {
//如果空 就抛异常
throw new RuntimeException("栈为空");
}
return this.elem[usedSize - 1];
}
//判断是不是空
public boolean isEmpty() {
return this.usedSize == 0;
}
//判断栈(数组)有没有满
public boolean isFull() {
return usedSize == this.elem.length;
}
}
//测试类
public class Test {
public static void main(String[] args) {
MyStack myStack = new MyStack();
myStack.push(123);
myStack.push(789);
System.out.println("删除栈顶元素: " + myStack.pop());
System.out.println("获得栈顶元素: " + myStack.peek());
//判断栈是不是空
System.out.println(myStack.isEmpty());
}
}
运行结果为:
总的来说栈是由数组实现的 只不过它的特点是后进先出
希望能帮助到大家.