算法与数据结构笔记9——栈(stack)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/chengxu_kuangrexintu/article/details/86773348

前言

相信学习编程的小伙伴们都有听说过栈,那什么是栈呢?要什么清晰表达呢?这篇博客将为大家分享“栈”。

栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。

在这里插入图片描述

栈的代码示例

1.创建一个栈的类MyStack

package com.wyb.demo;

public class MyStack {

	// 栈的底层用数组来存储数据
	int[] elements;

	public MyStack() {
		elements = new int[0];
	}

	// 压入元素
	public void push(int element) {
		// 创建一个新的数组
		int[] newArr = new int[elements.length + 1];
		// 把原数组中的元素复制到新数组中
		for (int i = 0; i < elements.length; i++) {
			newArr[i] = elements[i];
		}
		// 把添加的元素放入新数组中
		newArr[elements.length] = element;
		// 使用新数组替换旧数组
		elements = newArr;
	}

	// 取出栈顶元素
	public int pop() {
		// 栈中没有元素
		if (elements.length == 0) {
			throw new RuntimeException("stack is empty");
		}
		// 取出数组最后一个元素
		int element = elements[elements.length - 1];
		// 创建一个新的数组
		int[] newArr = new int[elements.length - 1];
		// 原数组中除了最后一个元素的其他元素都放入新数组中
		for (int i = 0; i < elements.length - 1; i++) {
			newArr[i] = elements[i];
		}
		// 替换数组
		elements = newArr;
		return element;
	}

	// 查看栈顶元素
	public int peek() {
		// 栈中没有元素
		if (elements.length == 0) {
			throw new RuntimeException("stack is empty");
		}
		return elements[elements.length - 1];
	}

	// 判断栈是否为空
	public boolean isEmpty() {
		return elements.length == 0;
	}
}

2.创建一个测试类TestMyStack

package com.wyb.demo;

public class TestMyStack {

	public static void main(String[] args) {
		// 创建一个栈
		MyStack ms = new MyStack();
		// 压入元素
		ms.push(9);
		ms.push(8);
		ms.push(7);
		// 取出栈顶元素
//		System.out.println(ms.pop());
//		System.out.println(ms.pop());
//		System.out.println(ms.pop());
		// 查看栈顶元素
		System.out.println(ms.peek());
		// 判断栈是否为空
		System.out.println(ms.isEmpty());
	}
}

猜你喜欢

转载自blog.csdn.net/chengxu_kuangrexintu/article/details/86773348