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

本文详细介绍了栈(stack)的基本概念,一种运算受限的线性表,仅允许在一端进行插入和删除操作。通过具体示例,展示了栈的Java实现,包括创建、压栈、出栈、查看栈顶元素及判断栈是否为空等关键操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

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

栈(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());
	}
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值