基于链表实现Java 自定义Stack栈

基于链表的栈算法实现(Java) 栈(Stack)是一种常用的数据结构,遵循先进后出(Last-In-First-Out,LIFO)的原则。本文将介绍如何使用链表实现一个简单的栈,并提供相应的源代码。接下来,我们可以定义一个栈类(Stack),其中包含一些基本的操作方法,如入栈(push)、出栈(pop)、获取栈顶元素(peek)等。通过使用链表作为底层数据结构,我们能够实现栈的基本操作,如入栈、出栈和获取栈顶元素等。现在,我们已经完成了基于链表的栈的实现。可以看到,我们成功地使用链表实现了一个基本的栈结构,并进行了相应的测试。 阅读详情

接下来让我们看看,如何利用单链表结构来实现栈与队列。由于栈的操作只限于栈顶元素,而单链表只有对首元素才能在O(1)时间内完成插入和删除,故这里把单链表的首节点作为栈顶,其余元素依次排列。此外,为了保证getSize()方法也能够在O(1)时间内完成,还需借助一个实例变量来动态记录栈中元素的数目。具体的实现如 代码二.12 所示。

Node类 Java代码见( Java 实现链表)

StackLink 类:

package com.list.stack;

import java.util.Arrays;

import com.stack.ExceptionStackEmpty;
import com.list.stack.Node;

public class StackList {

    //Declared size of stack list
    private static int size;
    //Declared element 
    private static Node top;
    public StackList() {
        this.size = 0;
        this.top = null;
    }

    // Get the size of stack
    public int getSize() {
        if(isEmpty())
            return 0;
        else
            return size;
    }

    // Get whether stack is empty
    public boolean isEmpty() {
        return size == 0;
    }

    // Get the top element of stack
    public Object top() throws ExceptionStackEmpty {
        if(isEmpty())
            throw new ExceptionStackEmpty("Stack is empty!");
        return top.getElement();
    }

    // Push element to stack
    public void push(Object element){
        Node newNode = new Node(element,top);
        top = newNode;
        size ++;
    }

    // Pop element from stack
    public Object pop() throws ExceptionStackEmpty {
        if(isEmpty())
            throw new ExceptionStackEmpty("Stack is empty!");
        Object container = top.getElement();
        top = top.getNext();
        size --;
        return container;
    }

    // Get the all elements of stack
    public void getAllElements() throws ExceptionStackEmpty {
        Node travelTop;
        travelTop = top;
        Object[] array = new Object[getSize()];

        for(int i = 0;i < array.length;i ++ ){
            array[i] = travelTop.getElement();
            travelTop = travelTop.getNext();
        }
        System.out.println("Get all elemnt: " + Arrays.toString(array));
    }
}

StackLinkTest 类:

package com.list.stack;

import com.stack.ExceptionStackEmpty;

public class StackListTest {

    public static void main(String[] args) throws ExceptionStackEmpty {

        //Test Class StackList
        StackList sl = new StackList();
        System.out.println("Size of stack list: " + sl.getSize());
        System.out.println("Is emplty? : " + sl.isEmpty());
        sl.push(12);
        sl.push(13);
        sl.push(15);
        sl.push(17);
        sl.push(2);
        sl.push(6);
        sl.getAllElements();
        System.out.println("Size of stack list: " + sl.getSize());
        System.out.println("Is emplty? : " + sl.isEmpty());
        //sl.getAllElements();
        System.out.println(sl.pop());
        System.out.println(sl.pop());
        System.out.println(sl.pop());
        System.out.println(sl.pop());
        System.out.println(sl.pop());
        System.out.println(sl.pop());
        System.out.println("Size of stack list: " + sl.getSize());
        System.out.println("Is emplty? : " + sl.isEmpty());

    }

}

测试结果:

Size of stack list: 0
Is emplty? : true
Get all elemnt: [6, 2, 17, 15, 13, 12]
Size of stack list: 6
Is emplty? : false
6
2
17
15
13
12
Size of stack list: 0
Is emplty? : true

转载请注明出处,谢谢!
http://blog.youkuaiyun.com/github_27609763/article/details/46476917

嵌入式常用通信协议 #概述 嵌入式通信协议 阅读详情

相关推荐

【rotors】多旋翼无人机仿真(五)——多无人机仿真

如何创建多个无人机仿真

caiqidong321的博客 2392

Java数据结构--栈(基于链表+数组)

在实现栈之前,我们要先知道栈怎么进行使用?它有什么方法?这样对于我们初学者来说可以更好的了解栈。下面我们来对Stack类中的方法来运行一下。

m0_74808313的博客 937

2025浏览器指纹伪装终极指南:Playwright修改WebGL+时区+分辨率,小红书爬1000条零验证

2025年小红书的反爬已经进入“多维校验”时代,单纯修改某一个指纹维度已失效。本文方案的核心是“让所有特征都一致且合理”——WebGL+Canvas+时区+分辨率+UA+行为,形成一个完整的“真实用户画像”,让小红书的反爬系统无法区分是爬虫还是真人。这套方案不仅适用于小红书,也可迁移到知乎、抖音、跨境电商等其他高反爬平台,只需替换对应的指纹库和数据提取逻辑。记住:指纹伪装的本质不是“欺骗”,而是“模拟真实”,把每个细节都做到和人类一致,自然就能实现“零验证”爬取。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 3069

Java基于链表的栈的实现

1、什么是栈 栈(Stack)是一种线性存储结构,它具有如下特点: (1)栈中的数据元素遵守”先进后出”(First In Last Out)的原则,简称FILO结构。 (2)限定只能在栈顶进行插入和删除操作。 2、栈的基本操作 栈主要有以下几种基本操作: (1)empty(): 如果栈为空返回true,否则返回false; (2)size(): 返回栈内元素的大小; (3)push(): 向栈内压入一个成员; (4)pop(): 从栈顶弹出一个成员; 3、具体代码(我们使用链表来完成基本操作,并且使

timewilltell12的博客 2221

欧拉 openEuler 20.03安装配置tigervnc-server

欧拉 openEuler 20.03安装配置tigervnc-server openEuler VNC

郭亚望 8951

机器学习: 共轭梯度算法(PCG)

今天介绍数值计算和优化方法中非常有效的一种数值解法,共轭梯度法。我们知道,在解大型线性方程组的时候,很少会有一步到位的精确解析解,一般都需要通过迭代来进行逼近,而 PCG 就是这样一种迭代逼近算法。 我们先从一种特殊的线性方程组的定义开始,比如我们需要解如下的线性方程组: Ax=bAx=b 这里的 A(n×n)A(n×n) 是对称,正定矩阵, b(n×...

weixin_30807677的博客 3180

【Java】使用单链表实现栈

单链表又一新玩法,还不冲?

Jaye513的博客 1059

Jetson AGX Orin边缘AI实战:用YOLOv8做目标检测,我的环境配置踩坑与优化记录

本文详细记录了在Jetson AGX Orin上部署YOLOv8目标检测模型的环境配置与优化过程。从JetPack版本确认、PyTorch安装陷阱到Torchvision编译技巧,再到YOLOv8部署和系统级优化,提供了完整的实战指南。特别针对边缘AI设备的特性,分享了CUDA加速、内存管理等性能调优经验,帮助开发者高效完成工业级AI应用部署。

weixin_30839881的博客 374

Java 数据结构篇-用链表、数组实现栈

【代码】Java 数据结构篇-用链表、数组实现栈。

2401_86450001的博客 1259

ADB详细(从下载安装到灵活运用)

ADB(Android Debug Bridge)是一种允许模拟器或已连接的 Android 设备进行通信的命令行工具,它可为各种设备操作提供便利,如安装和调试应用,并提供对 Unix shell(可用来在模拟器或连接的设备上运行各种命令)的访问。可以在Android SDK/platform-tools中找到 adb 工具或下载ADB Kits。

LiuYong_01的博客 10万+

vsomeip3 双机通信文件配置

验证环境 vsomeip地址Android运行命令,红色的地方需要和配置文件一样Linux运行命令,红色的地方需要和配置文件一样Linux service配置文件 ,红色的地方需要更改Android client配置文件,红色的地方需要更改,蓝色的地方可不要 ...

m0_37132481的博客 5222

JAVA——栈的基本用法

文章目录 一、基本介绍 栈:(先进后出) 一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。 压栈: 栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。 出栈: 栈的删除操作叫做出栈。出数据在栈顶。 二、栈自带的基本操作 向栈中存放元素:stack.push(); 获取栈顶元素:stack.peek(); 删除栈顶元素(返回值为删除的元素):stack

SwitchD的博客 6977

28、沉浸式体验技术:概念、类型与应用

本文全面介绍了沉浸式体验技术的概念、类型与应用。从双边滤波器的图像处理原理切入,系统阐述了VR、AR、MR、ER及数字孪生等核心技术的特点与区别,并通过丰富案例展示了其在商业、医疗、教育、旅游、房地产、物流等多个领域的实际应用。文章还分析了技术融合趋势、硬件升级方向、应用场景拓展潜力,同时探讨了数据处理、网络延迟、隐私安全等挑战及应对策略,最后以流程图和对比表格总结技术发展脉络,展望沉浸式技术推动社会进步的广阔前景。

wind6的博客 378

Java中栈的实现---Stack、Deque、自定义实现

this(10);top = -1;// 入栈//扩容resize();// 出栈// 查看栈顶元素// 判断栈是否为空// 栈中有多少元素// 判断栈是否已满更加定制化,我增加了一个扩容机制还有一个基于链表的栈实现// 入栈// 出栈// 查看栈顶元素// 判断栈是否为空int data;

gwndjsh的博客 598

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Java中使用顺序表ArrayList和链表LinkedList方式实现栈Stack

首先我们应该知道栈: 遵循后进先出/先进后出的原则。最先放入栈中的元素 — 栈底元素,最后放入栈中的元素 — 栈顶元素。将元素放入栈中 ---- 入栈/压栈,将元素从栈中取出 ---- 出栈/弹栈。 import java.util.Stack; public class StackDemo { public static void main(String[] ...

u010199356的博客 850

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Java中的栈与队列

总结java中栈和队列的几种实现和使用方式

qq_59109986的博客 203

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

自定义实现Java Stack栈

写在前面 从某种角度来说,栈的FILO(first in last out)特性是一个非常有用的特性,正是这样的特性,让栈变得格外重要。 所谓的FILO就是先进后出,先进来的元素后出去,后进来的元素先出去,就如同下图中一般。 而在Java中,Java类库已经为我们提供来了Stack类来实现栈,并且这个Stack类是范型类,它可以存储不同的数据类型。 那么接下来我们就来看一下,Java为我们提供了哪些Stack类方法。 ...

野犬17的博客 768

java自定义栈的使用(push与pop操作)

java自定义栈的使用(push与pop操作) 1.Node类的创建 /* * 定义一个链表 * */ public class Node { public int date; public Node next; public Node() { } public Node(int date) { this.date = date; } public Node(int date, Node next) { this

qq_43713040的博客 1202

如何基于链表数组实现栈-算法通关村

我们在设计自己的栈的时候,不管用数组还是链表,都要实现上面几个方法。如果想测试一下自己对栈是否理解,做一下这道题就够了:入栈顺序为1234,所有可能的出栈序列是什么?采用顺序表实现的的栈,内部以数组为基础,实现对元素的存取操作。在应用中还要注意每次入栈之前先判断栈的容量是否够用,如果不够用,可以进行扩容。top有的地方指向栈顶元素,有的地方指向栈顶再往上的一个空单位,本文采用指向栈顶空位置。java 的 util 中提供了栈 Stack 类。链栈的插入和删除都在头结点。

LENG821128的博客 990

java三种栈的创建和使用方法

栈 一:栈也是一种泛型数据结构,它准确的定义是Stack,其中E表示某种数据类型。 表 Stack类的常用方法 方法 描述 push(value) 将给定的值压入栈的顶端 pop() 删除并返回栈顶的值 peek() 返回栈顶端的值,但是不将其从栈中删除 isEmpty() 如果栈为空则返回true size() 返回栈中元素的个数 package stackDemo; import java.util.Stack; public class StackDemo1 {

Boltfly的博客 1万+

算法通关村——如何基于数组(链表)实现栈

补充小知识:栈顶(top)有的地方指向栈顶元素,有的地方指向栈顶再往上的一个空单位。top先将栈顶元素取出,然后再执行top–。链表也可以实现栈,插入和删除都在头结点进行。形象比喻:子弹弹夹,第一颗的子弹最后打出。

weixin_56241562的博客 469

Java数据结构之栈

栈的底层代码和自己实现的栈

m0_46648369的博客 740

《Java小子怒闯数据结构九重天》第三重天——栈

本专栏文章主要用于帮助Java使用者快速上手数据结构,刷算法题!

apple_51673523的博客 3343

Java中的栈

栈是一种遵循后进先出(LIFO,Last In First Out)原则的数据结构。在栈中,最后进入的元素会最先被移除。这种特性使得栈在许多算法和程序设计中非常有用,例如在处理函数调用、表达式求值和内存管理等方面。在Java中,除了使用内置的Stack类,我们可以通过不同的数据结构来实现栈。栈作为一种基本的数据结构,在Java编程中扮演着重要的角色。无论是内置的Stack类,还是自定义的栈实现,都能帮助我们解决各种编程问题。理解栈的原理和应用,对于提高编程能力和解决复杂问题具有重要意义。版权声明。

ning的博客 925

算法通关村第四关-青铜挑战基于链表完成栈

大家好我是苏麟 , 今天聊聊.

sytdsqzr的博客 782

算法通关村第四关——如何基于数组(链表)实现栈

栈的基础和自定义栈

weixin_47474875的博客 305
上一篇: Java 实现链表
下一篇: 基于链表实现Java 自定义Queue队列
YatKam
博客等级 码龄12年 58粉丝 49原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值