栈的介绍
栈 是一种先进后出的一种数据结构。
栈的底层数据结构可以使用数组或者链表来实现。
我们使用数组来实现栈。
思路 :
- 我们需要定义数组 以及 数组的大小
- 栈需要栈帧 ,栈帧相当于指针,总是指向栈顶的元素。初始化为-1
准备工作完成,我们开始手写栈的数据结构
package com.my.Stack;
/**
* @description: 栈 先进后出的一种数据结构
* 实现 栈 具体有 出栈 入栈 判空 push pop
**/
public class MyStack<E> {
private Object[] stack; // 创建数组模拟栈
private int maxSize; // 数组的大小,其实就是栈的大小
private int top; // 用于指向栈顶的变量, 初始化应该为 -1
public MyStack() {
}
// 初始化
public MyStack(int maxSize) {
stack = new Object[maxSize];
this.maxSize = maxSize;
this.top = -1;
}
// 判断是否栈已满
public boolean isFull(){
return top == maxSize - 1;
}
// 判断是否栈空
public boolean isEmpty(){
return top == -1; // 栈为空就是top始终是 -1
}
// 入栈的方法 push
public void push(E element){
if (isFull()){
System.out.println("栈满了,无法入栈");
return ;
}
stack[++top] = element; // top先加1 再赋值。也可以分开写 。
}
// 出栈的方法 pop
public E pop() throws Exception {
if(isEmpty()){
throw new Exception("栈已空......."); // 我这里是抛出了异常,你们大可直接sout输出即可。
}
return (E) stack[top--]; // 出栈就是删除。一般我们会返回被出栈的元素。(其实后面你发现,只要是数据结构的东西,到删除这一块,都得返回被删除的数据,记着就好)
}
// 遍历栈 (这个没什么好说的)
public void print(){
if(isEmpty()){
System.out.println("栈空了");
return ;
}
for(int i = top; i >=0; i--) {
System.out.print(stack[i]+" ");
}
System.out.println();
}
}