编程语言
首页 > 编程语言> > 菜鸟苦练数据结构---java中栈的自实现(初学者进)

菜鸟苦练数据结构---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