Java 栈数据结构实现 - Stack 类详解
public abstract class Istack {
int MAX_SIZE = 5; /*最大栈长度。为5表示栈中最大容纳5个元素*/
public abstract boolean push(int data); /*元素进栈,如果栈满返回false*/
public abstract int pop(); /*从栈中取数据。如果栈已为空返回Integer.MIN_VALUE*/
public abstract boolean isEmpty();/*判断栈是否为空*/
/*显示栈中所有元素
* 1. 如果栈不为空,显示:
* 栈中元素有:
* <显示每个元素,空格分隔,最后一个元素后换行>
* 2. 如果栈为空,显示:
* 栈为空
*/
public abstract void display();
}
public class Stack extends Istack {
private int[] data; //栈中存储数据的数组
private int top; //栈顶指针,指向栈顶元素的下标
public Stack() {
data = new int[MAX_SIZE]; //初始化数组大小
top = -1; //栈顶指针初始化为-1,表示栈为空
}
@Override
public boolean push(int data) {
if (top == MAX_SIZE - 1) { //判断栈是否已满
return false;
}
this.data[++top] = data; //栈顶指针加1,并将元素存入栈中
return true;
}
@Override
public int pop() {
if (top == -1) { //判断栈是否为空
return Integer.MIN_VALUE;
}
int result = this.data[top--]; //取出栈顶元素,并将栈顶指针减1
return result;
}
@Override
public boolean isEmpty() {
return (top == -1); //判断栈是否为空
}
@Override
public void display() {
if (isEmpty()) {
System.out.println("栈为空");
} else {
System.out.print("栈中元素有:");
for (int i = 0; i <= top; i++) {
System.out.print(this.data[i] + " ");
}
System.out.println();
}
}
}
//测试代码
public static void main(String[] args) {
System.out.println("************栈测试开始************");
Stack stack = new Stack();
int v = stack.pop();
if (v == Integer.MIN_VALUE) {
System.out.println("弹出失败,栈为空");
} else {
System.out.println("弹出数据为:" + v);
}
stack.display();
stack.push(1);
stack.push(2);
stack.push(3);
stack.push(4);
stack.push(5);
if (!stack.push(6)) {
System.out.println("压栈失败,栈已满。失败的数据为:6");
stack.display();
}
for (int i = 0; ; i++) {
if (stack.isEmpty()) break;
System.out.println(i + ". 弹出元素为:" + stack.pop());
stack.display();
}
System.out.println("**************栈测试结束**************");
}
原文地址: https://www.cveoy.top/t/topic/nOOj 著作权归作者所有。请勿转载和采集!