目录
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);
}
}
以上为我个人的小分享,如有问题,欢迎讨论!!!
都看到这了,不如关注一下,给个免费的赞