java栈--数据结构


前言

java实现数据结构栈:用顺序表存储的栈和数组存储的栈。


本文源代码网址:https://gitee.com/zfranklin/java/tree/master/dataStructure/src/com/njupt/stack

https://gitee.com/zfranklin/java/tree/master/dataStructure/src/com/njupt/stack

栈的性质

数据先进后出。

好比一个瓶子,口径刚好装下一块方糖:

每次存数据只能在瓶子上方存,取数据也只能从瓶子上方一个一个取,顺序不能错。

数组栈

我们学过了 顺序存储(数组/顺序表)和链式存储(链表)。如果选用数组来表示栈。成员变量有一个数组,一个top表示栈顶(瓶口)数据的下标。

java 复制代码
public class ArrayStack<T> {
	 private T values[];
	 private int top;

和顺序表一样,采用泛型,支持任何数据类型。构造函数也和顺序表类似,有无参和有参两种。这里top要初始化为-1,因为top表示的是栈顶数据的下标,而顺序表的size表示的是数据个数,当然这个根据自己喜好设定top的意义。比如我设定为下标,当有第一个数据进来时this.top++;this.top就变成了0,也就是第一个数据的下标。

栈添加数据叫做push,取出数据叫pop,获得栈顶数据但不取出叫top,约定俗成。push依然要考虑扩容。还增加了isEmpty和isFull判断是否空,是否满的方法。

链表栈

链表栈和数组栈相比也就是存储方式不同。既然是链式存储,少不了结点Node,在链式栈类中写一个Node类,同样是泛型 < T >。

java 复制代码
class Node<T>
{
	T value;
	Node<T> next;
	
	public Node(T value)
	{
		this.value = value;
		this.next = null;
	}
}

栈的成员变量只需要头结点即可,头结点进行push--头插、pop--头删。

由于链式存储按需分配,不需要初始化时提前分配空间。无需自写构造方法。

push就是头插,在C语言专栏--链表里讲过,java大同小异;pop就是头删;top就是获取头结点的值;判空就是判断head头结点是否为null。没有判满一说,因为链式存储按需分配。

总结

两种方法表示 数据结构--栈。都比较简洁明了。

相关推荐
明月_清风17 分钟前
从二叉树到 B+ 树:一文搞懂工程中「树」的演化之道
数据结构·算法·go
渡我白衣20 分钟前
并查集:基础认识与模拟实现
android·java·javascript·数据结构·c++·算法·并查集
天下无敌笨笨熊24 分钟前
C#Modbus串口开发心得
开发语言·c#
电商API_1800790524724 分钟前
电商商品价格监控工具淘宝京东商品价格抓取API项目实操分享
java·大数据·开发语言·前端·数据挖掘
zzzll111126 分钟前
深度剖析:HashMap 并发死循环与 ConcurrentHashMap 两代演进全解
java·开发语言
如意猴28 分钟前
【C++】001--C++入门(1)
开发语言·c++
秋名RG37 分钟前
2026/5/27 生产事故复盘与整改方案
java
zyf1044161 小时前
暑期实践日志 Day47:复盘第七章内容,规整对应成果
学习·计算机网络·剪辑·暑期实践·课题任务
传奇开心果编程1 小时前
【Rust入门知识点学与练】第10课:Option 和 Result(错误处理入门)
开发语言·学习·rust
喵的前端路1 小时前
《EDVAC》学习记录(第二部分)
学习