目录
栈是指一种后入先出的特殊数据结构,在Java集合框架中名为Stack(如今此类已过时,可以用集合类LinkedList实现)其包括入栈,出栈,获取栈顶元素,获取栈内有效元素个数,判断栈是否空的方法。本文将以数组为底层结构实现栈(顺序栈)及相关方法。除此之外,栈也可以通过单链表或者双向链表实现,名为链式栈,具体思路如法炮制,结合链表相关操作即可,读者可自行尝试。
一、代码结构
1.MyStack:用于实现栈的数据结构。
2.PopEmptyException:自定义运行时异常,用于栈判空时进行非法操作抛出异常。
3.Test:测试类,其main方法用于测试Mystack的相关方法。
二、程序源码
1.PopEmptyException类
public class PopEmptyException extends RuntimeException{
public PopEmptyException() {
super();
}
public PopEmptyException(String message) {
super(message);
}
}
注意,PopEmptyException属于运行时异常,应当继承于RuntimeException,同时重写相关方法。
2.Stack类
(1)定义
public class MyStatck
(2)成员变量
//数组引用,对应数组存储栈的元素
private int[]elem;
//记录栈内有效元素个数
private int usedSize;
(3)相关方法
1)构造方法
//构造方法
public MyStatck(){
this.elem=new int[10];
}
2)入栈方法(包括判满的底层方法)
//底层方法:判满方法
private boolean isFull(){
return usedSize== elem.length;
}
//入栈方法
public int push(int val){
//判满扩容
if(isFull()){
elem= Arrays.copyOf(elem,2*elem.length);
}
elem[usedSize]=val;
usedSize++;
return val;
}
3)出栈方法(包括判空抛出异常的底层方法)
//出栈判空抛出异常方法
private void checkEmpty(){
if(isEmpty()){
throw new PopEmptyException();
}
}
//出栈方法
public int pop(){
//判空抛出异常
try{
checkEmpty();
}catch (PopEmptyException e){
e.printStackTrace();
}
int val=elem[usedSize-1];
usedSize--;
return val;
}
4)获取栈顶元素的方法(调用判空抛出异常的底层方法)
//获取栈顶元素方法
public int peek(){
//判空抛出异常
try{
checkEmpty();
}catch (PopEmptyException e){
e.printStackTrace();
}
return elem[usedSize-1];
}
5)获取栈有效元素个数的方法
//获取栈有效元素个数方法
public int size(){
return usedSize;
}
6)判空方法
//判空方法
public boolean isEmpty(){
return usedSize==0;
}
三、测试案例
Test类源码如下:
public class Test {
public static void main(String[] args) {
MyStatck myStatck=new MyStatck();
//入栈操作
myStatck.push(1);
myStatck.push(2);
myStatck.push(3);
//获取栈顶元素
System.out.println("当前栈顶元素为"+myStatck.peek());
System.out.println("**********************");
//出栈操作
System.out.println(myStatck.pop());
System.out.println("当前栈顶元素为"+myStatck.peek());
System.out.println("**********************");
//获取有效元素个数
System.out.println("当前有效元素个数为"+myStatck.size());
System.out.println("**********************");
//判断栈是否为空
System.out.println(myStatck.isEmpty());
}
}
运行结果如下:
以上便是通过Java实现栈Stack的全部内容,如有不当,敬请斧正!