Java基于链表实现栈的方法详解
作者:WFaceBoss 发布时间:2022-07-02 11:39:20
标签:Java,链表,栈
本文实例讲述了Java基于链表实现栈的方法。分享给大家供大家参考,具体如下:
在上几小节中我们实现了基本的链表结构,并在上一节的底部给出了有关链表的源码,此处在贴一次吧,猛戳
在开始栈的实现之前,我们再来看看关于链表的只在头部进行的增加、删除、查找操作,时间复杂度均为O(1),基于链表的这几个优势,我们在此基础上实现栈。
前言,在写本小节之前,我们已经实现了一个基于静态数组的栈,转到查看。此处我们实现基于链表的栈。
1.链表类拷贝到Stack 包下:
在实现基于静态数组的栈的时候,我们已经新建了一个package,此时我们将已经实现的链表类拷贝到该package下,目录结构为:
2.实现栈
新建一个LinkedListStack类,实现Stack接口,相关代码如下:
Stack接口:
package Stack;
public interface Stack<E> {
//栈中元素个数
int getSize();
//栈中元素个数是否为空
boolean isEmpty();
//进栈
void push(E e);
//出栈
E pop();
//查看栈顶元素
E peek();
}
个LinkedListStack类:
package Stack;
public class LinkedListStack<E> implements Stack<E> {
private LinkedList<E> list;
public LinkedListStack() {
list = new LinkedList<E>();
}
//栈中元素个数
@Override
public int getSize() {
return list.getSize();
}
//栈中是否为空
@Override
public boolean isEmpty() {
return list.isEmpty();
}
//在栈中添加元素
@Override
public void push(E e) {
list.addFirst(e);
}
//从栈中删除第一个元素
@Override
public E pop() {
return list.removeFirst();
}
//查看栈中第一个元素
@Override
public E peek() {
return list.getFirst();
}
//主要是便于输出给对象信息
@Override
public String toString() {
StringBuilder res = new StringBuilder();
res.append("Stack: top ");
res.append(list);
return res.toString();
}
}
3.添加测试代码
为了测试的简单,我们在已经实现了Stack接口的LinkedListStack类中建立以main()方法,main中代码如下:
//测试
public static void main(String[] args) {
LinkedListStack<Integer> stack = new LinkedListStack<Integer>();
for (int i = 0; i < 5; i++) {
stack.push(i);
System.out.println(stack);
}
System.out.println("出栈一个元素:");
stack.pop();
System.out.println(stack);
}
结果为:
到此我们实现了底层是链表的栈。
关于本小节,若您觉得还行、还过得去,记得给个推荐哦~,谢谢!!
本节源码 https://github.com/FelixBin/dataStructure/blob/master/src/Stack/LinkedListStack.java
希望本文所述对大家java程序设计有所帮助。
来源:https://www.cnblogs.com/wfaceboss/p/10643690.html


猜你喜欢
- 本文实例讲述了Android编程实现调用相册、相机及拍照后直接裁剪的方法。分享给大家供大家参考,具体如下:package com.cvte.
- 首先我们发现现在我们所用的android智能手机大部分都有当你在打电话时按power键来挂断电话,一般都是在设置中。 我主要是在原生源码中添
- 什么是线程同步? 当使用多个线程来访问同一个数据时,非常容易出现线程安全问题(比如多个线程都在操作同一数据导致数据不一致),所以我们用同步机
- 目标依赖<!-- poi工具类--> <dependency>
- 本文实例为大家分享了Android实现定时器和倒计时的具体代码,供大家参考,具体内容如下直接上代码,相信都看得懂。Android已经帮封装好
- 前言看标题好像很简单的样子,但是针对使用jar包发布SpringBoot项目就不一样了。当你使用tomcat发布项目的时候,上传文件存放会变
- java8分组计算数量和计算总数package com.pig4cloud.pigx.admin.api.vo;import lombok.
- Java的SPI机制实例详解SPI的全名为Service Provider Interface.普通开发人员可能不熟悉,因为这个是针对厂商或
- 顺序结构我们之前写的大多代码都是顺序结构的,即按照代码的顺序一行一行的执行代码1 System.out.println("you&
- 本文实例为大家分享了java数据库唯一id生成工具类的具体代码,供大家参考,具体内容如下import java.io.File;import
- 基于C#的Aforge类调用简单示例,供大家参考,具体内容如下由题,本程序是使用Aforge类库调用摄像头的demo。功能:1.预览2.前后
- 我们在使用C# 语言的Assembly.Load 来加载托管程序集并使用反射功能时,一般需要先通过Assembly.Load()
- 使用字典存储事件实例accessor-declarations 的一种用法是公开很多事件但不为每个事件分配字段,而是使用字典来存储这些事件实
- 1、SQLite介绍SQLite,是一款轻型的数据库,是遵守的ACID关系型数据库管理系统,它包含在一个相对小的C库中。它的设计目标嵌入式是
- 本文实例为大家分享了C语言实现扫雷游戏的具体代码,供大家参考,具体内容如下前言一、游戏规则介绍扫雷是一个十分经典的游戏,一张棋盘中有很多个不
- 问题现象:HTTP Status 403-Invalid CSRF Token 'null' was found on th
- 本文实例讲述了Android编程之绘图canvas基本用法。分享给大家供大家参考,具体如下:MainActivity的代码如下:packag
- 微信分享接口的java开发的一些小步骤,具体内容如下1.配置接口信息进行验证代码如下: /** * 访问没认证的地
- 前言想必大家对c语言的动态内存分配并不陌生,忘了的小伙伴也可以看看我的这篇文章C语言动态内存分配c语言的动态内存分配由于有些地方用起来比较麻
- JSR303简介JSR-303 是 JAVA EE 6 中的一项子规范,叫做 Bean Validation,官方参考实现是Hibernat