基于Java的栈实现

在 Ubuntu 上安装和配置 PostgreSQL 实录 本文介绍了在Ubuntu系统上安装和配置PostgreSQL数据库的完整步骤。主要内容包括:1)通过官方源或PPA源安装最新版本;2)修改配置文件(postgresql.conf和pg_hba.conf)以允许远程访问;3)设置postgres用户密码;4)创建新用户并配置权限;5)防火墙设置和重启服务;6)验证安装和远程连接方法。文章提供了详细的命令行操作指导,帮助用户完成从安装到远程访问的全部配置过程。 阅读详情

栈的定义

栈是计算机科学中非常基础和重要的一种数据结构,它在计算机相关领域中有着广泛的应用,典型的编程语言中的函数调用,编译器便是采取栈这种结构来组织环境的。数据结构就是数据的组织方式,不同的组织方式,对于集合中元素的选取存在差异。

实现

package org.util.ds;

import java.util.Random;

/**
 * 栈
 * @author Weibing Long
 * @since 2018.04.16
 * @param <Item> 泛型
 */
public class Stack<Item> {
    private Node root;  // 根节点
    private int n;  // 栈元素个数

    public static void main(String[] args) {
        Stack<Integer> stack = new Stack<Integer>();
        Random random = new Random();
        System.out.println("进栈");
        for (int i = 0; i < 100; i++) {
            int x = random.nextInt();
            stack.push(x);
            System.out.println(x);
        }
        System.out.println("出栈");
        while (stack.size() > 0)
            System.out.println(stack.pop());
    }

    /**
     * 进栈
     * @param item 进栈元素
     */
    public void push(Item item) {
        if (item == null)
            throw new NullPointerException("参数不能为空");
        if (root == null) {
            root = new Node();
            root.item = item;
            root.next = root;
        } else {
            Node temp = root;
            root = new Node();
            root.item = item;
            root.next = temp;
        }
        n++;
    }

    /**
     * 出栈
     * @return 出栈元素
     */
    public Item pop() {
        if (n == 0)
            throw new NullPointerException("栈中元素为空!");
        Item item = root.item;
        root = root.next;
        n--;
        return item;
    }

    /**
     * 栈中元素的个数
     * @return 元素个数
     */
    public int size() {
        return n;
    }

    // 定义节点
    private class Node {
        private Item item;
        private Node next;  
    }
}

一些细节

代码中定义了节点类

private class Node {
        private Item item;
        private Node next;  
}

然后利用单链表来实现,节点的定义体现了单链表结构,即值与指向另一个节点的指针(这里用引用更恰当,但其他资料一般说为指针)。
至于本代码是头插法还是尾插法我也不区别了,因为关键在于理解内部原理和区分引用和在内存中的对象,不然容易报空指针异常。

同时,代码使用的泛型这一高级属性,提高了代码的重用率,可以包容几乎所有的对象。当然,所有的对象类型必须一致。

实现二

上面的代码是基于单链表的栈实现,下面是基于数组的实现:

/** 
 * 数组实现 
 * @author Wee bing 
 * @param <Item> 
 */  
public class MyStack<Item> {  

    private Object[] myArray = null;//元素容器  
    private int capacity = 0;//元素容量  
    private int n = 0;//元素个数  

    public MyStack() {  
        capacity = 2;  
        myArray = new Object[capacity];  
    }  

    public MyStack(int capacity) {  
        this.capacity = capacity;  
        myArray = new Object[capacity];  
    }  

    //插入元素  
    public void push(Item item) {  
        if (n >= capacity/2) {  
            capacity *= 2;  
            Object[] temp = new Object[capacity];  
            for (int i = 0; i < capacity/2; i++)  
                temp[i] = myArray[i];  
            myArray = temp;  
        }     
        myArray[n++] = item;  
    }  

    public Item peek() {  
        if (n == 0)  
            return null;  
        Item item = (Item) myArray[n-1];  
        return item;  
    }  

    //删除元素  
    public Item pop() {   
        if (isEmpty()) throw new NullPointerException();  
        Item item = (Item) (myArray[--n]);  
        myArray[n] = null;  
        return item;  
    }  

    //元素个数  
    public int size() {  
        return n;  
    }  

    //是否为空  
    public boolean isEmpty() {  
        return n == 0;  
    }  

    //测试  
    public static void main(String[] args) {  

    }  
} 

https://blog.youkuaiyun.com/github_37412255/article/details/69202769 是这个代码一开始的文章,我不想把这个文章删了(原因:又少了10个积分 哈哈),又想将两种方法放到一块,所以放在这里了。

迫零均衡前与迫零均衡后眼图对比附Matlab代码 迫零均衡(Decision Feedback Equalization,DFE)是一种常用的数字通信技术,用于抑制信号传输中的多径干扰。迫零均衡(Decision Feedback Equalization,DFE)是一种常用的数字通信技术,用于抑制信号传输中的多径干扰。眼图是一种常用的信号质量评估工具,通过绘制接收到的信号在时域上的波形,可以直观地观察到噪声、失真和干扰等问题。眼图是一种常用的信号质量评估工具,通过绘制接收到的信号在时域上的波形,可以直观地观察到噪声、失真和干扰等问题。 阅读详情

相关推荐

dify1.3.1应用服务与数据服务分离,附件及插件包迁移至minio,实现离线部署,保证插件正常运行

dify1.3.1应用服务与数据服务分离,附件及插件包迁移至minio,实现离线部署,保证插件正常运行

Time_1023的博客 1873

Java数据结构 | 栈及其应用

栈及相关应用详解

m0_56361048的博客 2389

信号完整性SI-PI

SI设计的主要难点在于需要综合信号的幅度、噪声、边沿、延时等影响信号质量的多种因素,并且这种因素常常相互依赖、互相影响,交叉在一起。1.1、信号过冲 (欠阻尼状态,可并联一个合适的电容):过冲会造成强烈的电磁干扰,另一方面会损伤后面的电路的输入及,甚至失效。信号完整性SI:是指电路系统中信号的质量,如果在要求的时间内,信号能不失真的从源端传输到接收端。优点:提供较慢的上升时间,减少反系量,产生更小的EMI,从而降低过冲,增加信号质量。导线之间的间距过小, 就会产生串扰,间距越小、串扰越大。

weixin_42304393的博客 4871

[Java]栈的详解及基础操作

栈作为一种线性的数据结构同时拥有链表的许多特征,由于栈的底部逻辑是线性表,所以我们可以将其看做一个只有一边能进一边能出的数组。栈的特性为固定一端进行入栈操作和出栈操作,在可以入栈和出栈的一端,我们称之为栈顶,另一端不能进不能出的我们称之为栈底。栈是一种线性数据结构,虚拟栈是内存分配时需要在内存开辟的空间,栈帧则是内存空间开辟后的单块小内存空间。从图中我们可以清楚的看到栈的出入规律,最先进去的元素却后出栈,我们可以称之为后进先出。栈的操作包括创建,入栈出栈,获取栈顶元素等,接下来我会用代码来挨个演示。

sjhdaj的博客 1488

IC面试常考题 Verilog三分频电路设计(占空比50%,三分之一,三分之二)

实现三分频电路最简单的是: 利用计数器实现。 时序图分析(本人比较懒,平常科研忙,所以直接手画时序图了,懒得用软件画了): 直接上图分析:利用计数器每隔三个周期信号翻转一次,同时在不同的计数下翻转得到的同步信号 clk_1和clk_2,再利用异或即可实现出一个不同占空比的三分频信号(同样的方法也可扩展到其他奇数分频设计中)。 例如占空比50%: module Div_three( input clk, input rst_n, output div_three ); reg

qq_41884662的博客 1万+

从零到一:手把手教你用YonBuilder for NCC搭建NC Cloud 2021.11开发环境(含避坑指南)

本文详细指导如何使用YonBuilder for NCC搭建NC Cloud 2021.11开发环境,涵盖硬件要求、软件安装、YonBuilder配置及常见故障排除。特别提供避坑指南,帮助开发者快速上手NCC开发,确保环境配置的原子化分解和开发思维的体系化建立。

weixin_42523326的博客 345

【数据结构】Java实现栈

栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈 顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。

qq_53869058的博客 5215

Jaspersoft Studio安装与配置全攻略:从下载到首个报表生成

本文提供Jaspersoft Studio从下载、安装到创建首个报表的完整实战指南。详细介绍了如何获取安装包、配置工作空间,并通过可视化设计器创建报表模板、添加参数与字段,最终实现数据预览与PDF导出。帮助Java开发者快速掌握这一强大的开源报表工具,提升报表开发效率。

weixin_28826521的博客 704

数据结构(Java)—— 栈(Stack)

本文主要讲了栈的构造方法、使用方法、栈功能的模拟实现以及栈的应用场景

wx2023_10_15的博客 1521

全志 mipi屏幕和触摸驱动调试记录

mipi屏幕与触摸调试记录

u011996684的博客 3220

Aras Innovator系统配置-01对象类(一)

对象类配置-对象类属性说明

企业信息化(PLM,ERP.MES) 2032

【Java】轻松掌握栈的基本操作

轻松掌握栈的基本操作1、栈的基本概念2、栈的实现3、栈常见的算法题目 1、栈的基本概念 如何理解栈 对于栈,首先列举一个生活案例,家里的厨房通常都放有很多盘子。每次洗好的盘子总是堆叠在一起,如图所示,ABC三个盘子: 我们在洗碗的时候,先洗好的放在下面,后洗好的放在上面 反过来每次使用盘子的时候,总是先拿上面的盘子,后拿下面的盘子 如果用专业术语表示,则为:后进先出、先进后出,这就是栈的特性 2、栈的实现 栈的使用场景非常广泛,所以在编程各类语言中都有栈的实现,例如在 Java 中,栈的数据结构类是

叮当猫的博客 8834

**Coffin-Manson 模型**在半导体功率循环测试中的理论背景、数学形式、应用场景,以及如何使用 **C#** 编程语言进行具体实现

Coffin-Manson 模型最初用于描述金属材料在低周疲劳(Low-Cycle Fatigue, LCF)下的寿命,后来被广泛应用于半导体功率器件(如 IGBT、MOSFET)的可靠性分析,特别是在功率循环测试中。如果你有具体数据(如 CSV 文件)、更复杂的模型要求(如 Bayerer 模型)或特定可视化需求,请提供,我可以进一步优化代码或添加功能!以下代码实现基本模型 ( N_f = A \cdot (\Delta T_j)^{-n} ) 的拟合,生成拟合曲线并预测寿命。我会结合你之前提到的。

专注于前沿技术的探索与实践,热衷于从代码逻辑、架构设计到行业应用等多维度深挖技术本质。期待在技术之路上与你共同成长~ 481

栈的Java实现--链栈

栈的Java实现--链栈 链栈,顾名思义,就是以链表的形式实现的栈的相关操作,其实是功能弱化了的链表,如果已经阅读过链表的实现代码,那么链栈的实现显得更为容易。   链栈的基本结构: 链栈的入栈操作:  让top引用指向新的节点,新节点的next指向原来的top 记录栈内元素个数的size+1 链栈的出栈操作:  top引用指向原栈顶元素的下一个元素(top.next)...

生命在于折腾 710

精雕软件(JDpaint) 5.5 绿色版

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

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Java栈实现

数组实现的栈一:优点:插入和删除很快,缺点:长度有限 public class Stack { private int top = -1; private Object[] objs; public Stack() throws Exception{ this(10); } public Stack(int capacity) throws Exceptio

怀揣梦想,努力前行 2万+

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

java实现栈_Java实现一个栈就这么简单

栈定义栈是一种基于后进先出(LIFO)策略的集合类型。本章讨论如何使用Java语言实现一个基本的栈。一个栈容器要求提供入栈操作,出栈操作,获取栈大小和判断栈是否为空操作。抽象数据类型可定义为:publicinterfaceStack{/**判断栈是否为空。*/publicbooleanisEmpty();/**获取栈大小。*/publicintsize();...

weixin_34816303的博客 497

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

java栈的实现

一.数组实现的栈,能存储任意类型的数据。 /** * java 使用数组来实现栈,能存储任意数据 * * @author Linging * @date 2019/2/10 * */ import java.lang.reflect.Array; public class ArrayStack&amp;lt;T&amp;gt; { private final static int DEFA...

Linging_24的博客 2508

java栈的实现_Java栈实现

1. 定义栈所有方法接口:package com.dataStructure.stack;/*** 类功能描述:** @version 1.0.0* @auther Create by Barry* @date Create on 2018/3/12.* @history*/public interface Stack {public boolean push(Object element);pu...

weixin_34319902的博客 142

Java实现栈

Java基于数组实现栈: /** * Java基于数组实现栈 */ public class MyStack<T> { //定义一个数组 private Object[] stack; //模拟栈针 private int needle; //初始化栈 MyStack(){ stack = new Object[10];//初始化容量是10 } //取栈顶元素 public T peek(){

小小周的博客 163

两个栈实现队列+两个队列实现栈----java

两个栈实现队列+两个队列实现栈----java 一.两个栈实现一个队列 思路:所有元素进stack1,然后全部出stack1并进入stack2.实现队列的先进先出即:若stack2非空,我们需要的恰好再栈顶,出栈;若要给队列添加元素,即先进sack1,要出队时,若stack2不为空就出栈,为空时就把stack1全部进栈到stack2 二.两个队列实现一个栈 ps:图

毛毛虫的小哈 1万+

用栈实现队列 && 队列实现栈(Java)

思路:最新来的一定要在出栈口(一个个叠加),用que2作为存放新来的队列。解释:每次push新元素时,都将其放入一个空队列,然后将另一个队列的所有元素转移到这个队列中,最后交换两个队列的引用。基本思路:使用两个栈(输入栈和输出栈共同完成一个队列),保证把进栈数据全部导入到输出栈(注意是全部导入)。写博客的目的是每日督促并记录刷题,也欢迎大家批评指正~(day12)注意:在push方法里就要随时进行这种变化。注意:将相近功能的代码抽象出来。

m0_72833525的博客 782

Java栈和队列的实现

Java栈和队列的实现

2301_80288511的博客 896

Java实现链栈

一、分析   栈是限定仅在表的一端进行插入或删除操作的线性表,对于栈来说,操作端称为栈顶,另一端则称为栈底,栈的修改是按照后进先出的原则进行的,因此又称为后进先出的线性表。   链栈是指采用链式存储结构实现的栈,通常用单链表来表示,在单链表表头进行栈的操作。   一个标准的链栈具有如下的基本操作:     1、初始化链栈     2、销毁链栈     3、清空链栈     4、检测链...

weixin_30858241的博客 404

Java实现栈与队列

本文详细介绍了Java中栈和队列这两种数据结构的实现原理与应用场景。文章首先讲解了栈的后进先出(LIFO)特性,通过数组和链表两种方式实现栈结构,并分析了栈在递归转循环、括号匹配、逆波兰表达式等场景的应用。随后介绍了队列的先进先出(FIFO)特性及其实现方式,重点讨论了循环队列和双端队列这两种特殊队列的实现原理。最后通过LeetCode题目示例,展示了如何用队列实现栈和用栈实现队列的相互转换方法,提供了完整的代码实现。全文通过理论讲解与代码实践相结合的方式,帮助读者深入理解这两种基础数据结构的特点与应用。

su17643217590的博客 6737

栈的java实现_栈 的java实现

栈的java实现,链栈的实现,其节点的声明方式,与结构体不大相同,只一点需要注意,还有泛型的擦除。使用泛型时,对泛型是不分配内存空间的 ,只是栈中引用指向他,使用new 分配空间的都会在堆中。/***数组栈的java实现*/class ArrayStack{private static final int DEFAULT_CAPACITY=10;AnyType []array;int size;i...

weixin_33121737的博客 95
上一篇: 查找算法实现
下一篇: 基于java的队列实现
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值