园林设计公司网站it培训机构推荐
目录
1.栈的概念
2.栈的模拟实现
1.栈的方法
2.模拟栈用(整型)数组的形式呈现
2.1栈的创建
2.2压栈
2.3栈是否为空
2.4出栈
2.5获取栈中有效元素个数
2.6获取栈顶元素
2.7完整代码实现
1.栈的概念
从上图中可以看到, Stack 继承了 Vector , Vector 和 ArrayList 类似,都是动态的顺序表,不同的是 Vector 是线程安 全的。
(1)栈 :一种特殊的线性表,其 只允许在固定的一端进行插入和删除元素操作 。进行数据插入和删除操作的一端称为栈 顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO ( Last In First Out )的原则。(2)压栈:栈的插入操作叫做进栈 / 压栈 / 入栈, 入数据在栈顶 。(3)出栈:栈的删除操作叫做出栈。 出数据在栈顶 。


总结:先进后出
2.栈的模拟实现
1.栈的方法
2.模拟栈用(整型)数组的形式呈现
2.1栈的创建
public class MyStack {public int[] arr;public int size;public MyStack() {this.arr = new int[10];}
}
2.2压栈
(1)首先对现有栈进行判断是否为满,若满则需要进行扩容
扩容:
private void ensureCapacity(){if(size==arr.length){arr= Arrays.copyOf(arr,size*2);}}
(2)向数组添加
public int push(int x){ensureCapacity();arr[size++]=x;return x;
}
2.3栈是否为空
public boolean empty(){return 0 == size;}
2.4出栈
(1)首先得判断栈是否为空,若为空我们需要抛出异常
自定义一个异常为EmptyException如下:
public class EmptyException extends RuntimeException{public EmptyException() {}public EmptyException(String message) {super(message);}
}
(2)合法出栈
public int pop() {if(empty()) {throw new EmptyException("栈是空的!");}return arr[--size];}
2.5获取栈中有效元素个数
public int size(){return size;}
2.6获取栈顶元素
public int peek(){if(empty()) {throw new EmptyException("栈是空的!");}return arr[size-1];}
2.7完整代码实现
import java.util.Arrays;public class MyStack {public int[] arr;public int size;public MyStack() {this.arr = new int[10];}private void ensureCapacity(){if(size==arr.length){arr= Arrays.copyOf(arr,size*2);}}public int push(int x){ensureCapacity();arr[size++]=x;return x;}public boolean empty(){return 0 == size;}public int pop() {if(empty()) {throw new EmptyException("栈是空的!");}return arr[--size];}public int size(){return size;}public int peek(){if(empty()) {throw new EmptyException("栈是空的!");}return arr[size-1];}
}
EmptyException
public class EmptyException extends RuntimeException{public EmptyException() {}public EmptyException(String message) {super(message);}
}
以上为我个人的小分享,如有问题,欢迎讨论!!!
都看到这了,不如关注一下,给个免费的赞