菜鸟苦练数据结构---java中栈的自实现(初学者进)
作者:互联网
栈(stack):又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。
直接贴代码吧!!
/**
*
* @author springwave
*
*/
public class MyStack<E>{
//栈的底层使用数组来存放元素,数组的头相当于栈底,数组的尾相当于栈顶(先进后出)
private Object[] elements;
public MyStack() {
elements = new Object[0];
}
//压入元素
public void push(E element) {
//创建一个新数组
Object[] newArr = new Object[elements.length+1];
//把原数组中的元素复制到新数组中
for (int i = 0; i < elements.length; i++) {
newArr[i] = elements[i];
}
//把需要添加的元素放入新数组中
newArr[elements.length] = element;
//使用新数组替换旧数组
elements = newArr;
}
//取出栈顶元素
@SuppressWarnings("unchecked")
public synchronized E pop() {
//判断栈中是否存在元素,若不存在则抛出异常
if (elements.length == 0) {
throw new RuntimeException("stack is empty!");
}
//取出数组的最后一个元素
E element = (E) elements[elements.length-1];
//创建一个新数组
Object[] newArr = new Object[elements.length-1];
//除了取出的栈顶元素,将其余的元素拷贝到新数组中
for (int i = 0; i < elements.length-1; i++) {
newArr[i] = elements[i];
}
//使用新数组替换旧数组
elements = newArr;
//返回栈顶元素
return element;
}
//查看栈顶元素
@SuppressWarnings("unchecked")
public synchronized E peek() {
//判断栈中是否存在元素,若不存在则抛出异常
if (elements.length == 0) {
throw new RuntimeException("stack is empty!");
}
return (E) elements[elements.length-1];
}
//判断栈是否为空
public boolean isEmpty() {
return elements.length == 0;
}
}
测试类
public class MyStackTest {
public static void main(String[] args) {
MyStack<String> stack = new MyStack<>();
stack.push("11");
stack.push("22");
stack.push("33");
System.out.println(stack.pop());
System.out.println(stack.pop());
System.out.println(stack.pop());
System.out.println(stack.isEmpty());
System.out.println(stack.peek());
}
}
结果:
标签:elements,java,菜鸟,元素,栈顶,中栈,length,数组,stack 来源: https://blog.csdn.net/qq_40974552/article/details/100066832