单链表实现栈

数据结构与算法--用单向链表实现栈(C++实现) 栈是基本的数据结构。其特点是添加和删除(访问)数据都在线性表的一端(头端)。数据访问遵循先进后出(FILO)的原则。栈一般用数组或者链表来实现。数组需要静态分配数据空间,占用空间比较大。链表则根据实际需要动态分配数据空间,占用空间相对小一些。本文用单向链表实现栈。程序用C++实现。 阅读详情

用链表实现栈的先进后出,实现栈的push,pop,peak方法

定义一个链表结构

public class ListNode {
        int val;
        ListNode next;
        ListNode(int x) { val = x; }
}

用链表实现栈内部方法:

public class StackListNode {

    /**
     * 栈顶元素
     */
    ListNode node ;
    /**
     * 栈内元素个数
     */
    int elementCount;
    /**
     * 栈的空间大小
     */
    int size;

    /**无参构造*/
    public StackListNode(){
        node = new ListNode(-1);
        elementCount = 0;
        size = 0;
    }

    /**
     * 构造方法设置栈的空间大小
     * @param size
     */
    public StackListNode(int val ,int size){
        node = new ListNode(val);
        elementCount = 0;
        this.size = size;
    }

    /**
     * 判断栈是否满员
     * @return
     */
    public Boolean isFull(){
        if(size == elementCount){
            return true;
        }
        return false;
    }

    /**
     * 判断栈是否为空
     * 判断栈值的个数
     * @return
     */
    public Boolean isEmpty(){
        if(elementCount==0){
            return true;
        }
        return false;
    }

    public void push(int value){
        if(isFull()){
            throw new RuntimeException("Stack is Full");
        }
        ListNode val = new ListNode(value);
        ListNode temp = node;//临时节点指向链表节点。
        node =val;//node指向新节点节点。
        node.next = temp;//最新数据(也就是头结点)指向temp节点,头插法
        elementCount++;
    }

    public int pop(){
        if(isEmpty()){
            throw new RuntimeException("Stack is empty");
        }
        int i = node.val;
        node = node.next;
        elementCount--;
        return i;
    }

    public int peek(){
        if (this.isEmpty()) {
            throw new RuntimeException("Stack is empty");
        }
        return node.val;
    }

}

 main方法测试:

public static void main(String[] args) {
        StackListNode stackListNode = new StackListNode(-1,5);
        stackListNode.push(1);
        stackListNode.push(2);
        stackListNode.push(3);
        stackListNode.push(4);
       while (!stackListNode.isEmpty()){
            System.out.println(stackListNode.pop());
        }
}

结果: 

java单链表实现栈 栈的实现方式二:使用单链表来实现栈package stack; /** * * <p> * 功能描述:java栈的链表实现方式 * 编程思想:链表栈中包括结点类和栈顶结点,初始化时将栈顶结点指向null * 1、添加结点时将新加入的结点指向原本的栈顶结点,将新的栈顶结点指向新插入的节点 * 2、出栈时栈顶出栈并将新栈顶结点指向原栈顶结点 * </p> * ... 阅读详情

相关推荐

单链表的基本操作(3):单链表实现栈

我们知道,栈是一种“后进先出”的数据结构,对栈的插入和删除操作都是在栈头位置进行的,这与在单链表的表头插入和删除元素的原理类似,因此可以用单向链表实现栈。   单链表实现栈的Java代码: package parking; import java.util.Stack; class Node { Object data; Node next; public Node(Objec...

灰太狼 2721

【数据结构】如何用单链表实现栈?

文章目录一、前言二、源码下载:持续更新中三、什么是栈?三、链表节点四、栈结构的定义五、栈空判断六、栈满判断七、入栈push(int value) 实现八、出栈pop()实现九、栈的打印(单向链表的逆序打印) 一、前言 工作之余,学习一下数据结构与算法,今天学习数据结构:“栈”。 相信各位帅气的程序员对这个栈是相当的熟悉。 但是笔者就总有一个臭毛病:一看就会,一写就拉稀。 所以今天小编就自己动手亲自用单向链表实现“栈” 二、源码下载:持续更新中 https://gitee.com/sunshineAndD

好吃的爆米花 6439

面试题----单链表实现栈

编程实现下面的栈顶操作

弓虽子 5519

用单链表实现栈

用单链表实现栈的压栈和弹栈操作,栈是一种先进后出,后进先出的数据结构(类似弹夹),top节点指向栈第一个元素

qq_51793991的博客 1368

使用单链表实现栈及其性能分析

在计算机科学中,栈(Stack)是一种特殊的线性数据结构,它遵循后进先出(LIFO,Last In First Out)的原则。这意味着最后添加到栈中的元素将是第一个被移除的元素。栈的基本操作包括PUSH(入栈)和POP(出栈),这两个操作通常需要在常数时间内完成,即O(1)时间复杂度。尽管数组可以用来实现栈,但当我们需要考虑动态内存分配时,使用单链表实现栈就成为一个不错的选择。 本文将详细介绍如何使用单链表来实现栈,并分析其性能。此外,我们将使用伪代码和C代码进行示例说明,以确保读者能够清楚地理解整个过

笔者从事电信媒体开发多年,愿意将多年的开发经验分享给同行 1290

堆栈· 用单链表实现一个堆栈

堆栈 链表堆栈· 用单链表实现一个堆栈

单链表及用单链表实现栈

单链表 package linked; import jdk.swing.interop.SwingInterOpUtils; public class SingleLinkedListTest { public static void main(String[] args) { SingleLinkedList singleLinkedList = new SingleLinkedList(); singleLinkedList.addHead("A");

执妄 218

Python经常遇到导入xlwings就出错,如何解决

Python经常在导入xlwings时遇到错误。有人建议尝试重装或升级xlwings,但这些操作后仍然无法解决导入错误问题。

felix_8的博客 1740

栈的C++单链表实现

使用C风格的实现,栈的内部使用单链表结构实现。实现接口为:创建表头、入栈、出栈、反转、打印、清空 代码结构如下: SingleList.h:数据结构的声明和定义 main.cpp:测试数据结构: SingleList.h: #pragma once #include<iostream> #include<string.h> using namespace st...

m0_38084180的博客 883

实战对比:VINS和ORBSLAM3在无人机避障中的表现(含实测数据)

本文通过实战测试,深度对比了VINS和ORBSLAM3两种主流视觉SLAM算法在无人机避障中的表现。测试聚焦于光照变化、动态遮挡和快速运动三大挑战,提供了详细的实测数据与性能分析。结果表明,VINS在计算效率和实时性上占优,而ORBSLAM3在定位精度和地图管理方面更稳健,为不同应用场景下的工程选型提供了清晰依据。

醉三国 627

手把手教你学 AI芯片 SOC软件开发专栏简介

在AI芯片(如NPU、GPU加速器)爆发式增长的今天,软件栈开发已成为AI应用落地的核心瓶颈。无论是模型推理加速、低延迟部署,还是能效优化,都依赖于对芯片底层软件的深度掌握。然而,许多开发者困于“只会调用API,不懂驱动实现”的困境,导致性能瓶颈难以突破。本专栏《手把手教你学 AI芯片 SOC软件开发》专为AI工程师、嵌入式开发者及系统架构师打造,从零基础切入,系统拆解AI芯片SOC(System on Chip)的完整软件栈,覆盖Runtime(运行时)

MHD0815的博客 172

使用单链表实现链栈

使用单链表实现链栈

思考,思考,再思考~ 2803

24届数字IC验证——SV+UVM基础知识汇总(一)

汇总整理在面试过程中常见的问题,如果都能回答下来,那么面试肯定不成问题的分别构建不同抽象级的transaction,来实现复杂的激励。(以前是单一层次的sequence,对激励复用、上层复用不塌友好)不同层级之间的sequence没有继承关系,相互之间进行转换低层次的sequence从高层次的sequencer中获取高层次的sequence,并将其转换为低层次的sequence,再通过低层次的sequencer发送出去如何连接:低层次的sequencer包含高层次sequencer的句柄。

qq_42135020的博客 3152

单链表实现一个栈

单链表实现的一个栈,只实现了栈的主要功能:push pop

FlyingPig 2708

ABAP Bits and Bytes 完全参考,理解内存、字节、位运算与类型解释

ABAP开发中业务代码与底层字节处理的差异:业务层关注采购订单、会计凭证等语义信息,而接口开发需处理十六进制、位运算等底层操作。文章通过整数变量示例说明同一段字节在不同类型解释下会呈现不同值,并介绍x类型、位运算及类型转换的实际应用。这些知识在文件接口、加密传输等场景中尤为重要,开发者需注意字节序、编码等问题。建议将底层协议处理与业务逻辑分离,以保持代码清晰和可维护性。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 142

基于若依的ruoyi-nbcio-plus支持VForm3表单字段数据保存到数据库的一种方法——全网首创(一)

基于若依的ruoyi-nbcio-plus支持VForm3表单字段数据保存到数据库的一种方法——全网首创(一)

宁波阿成的博客 662

用单链表来实现栈

用单链表来实现栈 哈哈哈,这是写的第一篇博客,还望各位提出意见和建议????,最近复习数据结构,刚好到这一块,就写了一个 import java.util.Scanner; public class LinkedListStack { public static void main(String[] args) { //用链表来表示栈测试函数 LinkedSta...

qq_44807160的博客 465

零件边界线提取处理原理详解

该程序提出了一种高效的点云边界提取方法,通过三阶段处理流程实现零件几何特征的精确提取。首先采用RANSAC算法进行坐标系标准化,包括主平面检测、点云分割和双重旋转对齐。接着使用凹包算法和RANSAC直线拟合提取底面边界。最后通过多方向密度切片分析(Z向100片、X向50片),自动选择高密度切片进行边界提取和直线拟合。算法具有鲁棒性强、处理效率高(支持OpenMP并行计算)和参数可配置等特点,能有效提取零件的几何边界特征,为后续质量检测提供基础。实验结果显示该方法能准确提取零件的多方向边界线。

weixin_45196569的博客 433

Java 单链表实现栈

最近在B站学习尚硅谷韩顺平老师的数据结构与算法,其中P32节末尾韩老师布置的用单链表实现栈,自己下来实现的代码如下 public class LinkedListStackDemo { public static void main(String[] args) { LinkedListStack stack = new LinkedListStack(); ...

qq_44173555的博客 619

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

JAVA代码实现单链表模拟栈

单链表模拟栈 今天使用java实现了用单链表模拟栈的操作,有错误之处,还望指出,我会及时改正。 package com.stack; import java.util.Scanner; /* * 单链表实现栈的基本操作 */ public class SingleLinkedListStackDemo2 { public static void main(String[] args) ...

qq_41665523的博客 1116

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

栈的单链表实现

栈的单链表实现 //listack.h #include<stdio.h> #include<malloc.h> typedef char ElemType; typedef struct linknode{ ElemType data; struct linknode *next; }LinkStNode; //初始化栈 void InitStack(LinkStNo...

退役的熬夜选手 325

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

C语言单链表实现栈

#include <stdio.h> #include <stdlib.h> /*by xuyongqi*/ /*单链表实现栈*/ typedef struct node { void* data; struct node *next; }node; typedef struct stack { node *head; int size; }stack; /*初始化*/ void* init() { stack* st = (stack*)malloc(siz

xuyongqi的博客 797
上一篇: Java概述
下一篇: 实现一个特殊的栈,返回一个最小值(最大值)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值