栈是一种后进先出(LIFO)的数据结构,常用于表达式求值、递归调用等场景。本文介绍了栈的基本概念,包括栈顶、栈底,以及栈的两种常见实现方式:数组实现和链表实现。在数组实现中,通过动态调整数组大小以适应栈的变化,而链表实现则通过链表头部作为栈顶,方便入栈和出栈操作。
摘要由CSDN通过智能技术生成

原文参考:
(1)http://www.cnblogs.com/skywang12345/p/3562239.html
(2)http://c.biancheng.net/view/3351.html
(3)http://c.biancheng.net/view/3350.html

什么是栈(stack)

栈(stack )又称堆栈,它是运算受限的线性表,其限制是仅允许在表的一端进行插入和删除操作,不允许在其他任何位置进行插入、查找、删除等操作。 表中进行插入、删除操作的一端称为 栈顶(top),栈顶保存的元素称为 栈顶元素。相对的,表的另一端称为栈底(bottom)
栈的示意图:
在这里插入图片描述
栈中的数据依次是 30 --> 20 --> 10

当栈中没有数据元素时称为空栈;向一个栈插入元素又称为 进栈或 入栈;从一个栈中删除元素又称为 出栈或 退栈。由于栈的插入和删除操作仅在栈顶进行,后进栈的元素必定先出栈,所以又把堆栈称为 后进先出表(Last In First Out,简称 LIFO)
在这里插入图片描述
出栈示意图:
在这里插入图片描述
出栈前:栈顶元素是30。此时,栈中的元素依次是 30 --> 20 --> 10
出栈后:30出栈之后,栈顶元素变成20。此时,栈中的元素依次是 20 --> 10

入栈示意图:
在这里插入图片描述
入栈前:栈顶元素是20。此时,栈中的元素依次是 20 --> 10
入栈后:40入栈之后,栈顶元素变成40。此时,栈中的元素依次是 40 --> 20 --> 10

栈的基本操作

堆栈的基本操作除了进栈、出栈操作外,还有判空、取栈顶元素等操作。下面给出堆栈的抽象数据类型定义:

序号 方法 功能描述
getSzie () 输入参数:无 返回参数:非负整数 功能:返回堆栈的大小,即数据元素的个数。
isEmpty () 输入参数:无 返回参数:boolean 功能:如果堆栈为空返回 true,否则返回 false。
push(e) 输入参数:Object 对象 e 返回参数:无 功能:数据元素 e 入栈。
pop() 输入参数:无 返回参数:Object 对象 功能:栈顶元素出栈。
peek() 输入参数:无 返回参数:Object 对象 功能:获取栈顶元素,但不出栈

java 中栈的接口:

public interface Stack {
   
	//返回堆栈的大小
	public int getSize();
	//判断堆栈是否为空
	public boolean isEmpty();
	//数据元素 e 入栈
	public void push(Object e);
	//栈顶元素出栈
	public Object pop() throws StackEmptyException;
	//取栈顶元素
	public Object peek() throws StackEmptyException;
}

栈的存储实现

堆栈有两种基本的存储结构:顺序存储结构和链式存储结构。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值