java中基于数据的栈实现
程序员文章站
2022-07-10 20:28:41
...
在java中利用数组来实现栈以及相关操作。
首先我们要新建一个类,该类中new一个固定大小的数组,来充当我们的栈,来容纳入栈的数据。
在该类中我们可以对栈进行出栈入栈,扩容,和获取栈顶元素等操作。在该类中我们使用了泛型
和Object类来创建数组,以便能让我们的栈存放任意类型的一类数据,而不仅仅局限于一种数据
类型。
入栈操作:
在入栈操作时,我们首先会判断栈空间是否足够,若栈已经满了,则我们会动态的增加栈的容量,
然后将push入栈的数据放入数组中。
public E push(E item) {
ensureCapacity(size + 1);
stack[size++] = item;
return item;
}
动态增加栈容量:
/**
* 当栈满的时候,对栈进行扩容
* */
private void ensureCapacity(int size) {
int len = stack.length;
if(size > len) { //数组已满
int newLen = 10; //每次数组扩充的容量
stack = Arrays.copyOf(stack, newLen);
}
}
出栈操作:
在出栈操作的时候,首先会判断该栈中元素个数是否大于零(即是否是空栈),若是空栈则返回空,
若栈不为空,则返回栈顶数据,并且将出栈的位置置为空。
public E pop() {
E e = peek(); //取得栈顶数据
if(size > 0) { //检查栈中是否有数据
stack[size - 1] = null; //将出栈后的位置置为空
size--; //将栈中元素个数减一
}
return e;
}
下面是具体实现和测试:
package com.wp.datastruct;
import java.util.Arrays;
/**
* 使用泛型,以便栈中能够存储我们想要的数据
* 基于数组的栈实现
* */
public class MyStack1<E> {
private Object[] stack;
private int size; //栈中元素的个数
private MyStack1() {
stack = new Object[10]; //初始长度为10
}
//判断栈是否为空
public boolean isEmpty() {
return size == 0;
}
/**
* 返回栈顶的一个元素,但是不进行出栈操作
* */
public E peek() {
if(isEmpty()) {
return null;
}
return (E)stack[size -1]; //返回栈顶元素
}
public E pop() {
E e = peek(); //取得栈顶数据
if(size > 0) { //检查栈中是否有数据
stack[size - 1] = null; //将出栈后的位置置为空
size--;
}
//将栈中元素个数减一
return e;
}
public E push(E item) {
ensureCapacity(size + 1);
stack[size++] = item;
return item;
}
/**
* 当栈满的时候,对栈进行扩容
* */
private void ensureCapacity(int size) {
int len = stack.length;
if(size > len) { //数组已满
int newLen = 10; //每次数组扩充的容量
stack = Arrays.copyOf(stack, newLen);
}
}
/**
* 打印出栈中所有的数据
* */
public void printStack() {
System.out.println("开始进行出栈:");
while(size > 0) {
System.out.println("出栈:" + pop());
}
System.out.println("出栈操作结束!");
}
//测试栈操作
public static void main(String[] args) {
MyStack1<Integer> stack1 = new MyStack1<>();
stack1.push(1);
stack1.push(2);
stack1.push(3);
System.out.println("栈顶元素为:" + stack1.peek());
System.out.println("栈中元素个数为:" + stack1.size);
stack1.printStack();
System.out.println("栈中元素个数为:" + stack1.size);
}
}
上一篇: Java实现"栈"结构
下一篇: java实现带min()方法的栈