iis服务器助手广告
返回顶部
首页 > 资讯 > 精选 >如何使用Java数组和链表实现栈
  • 877
分享到

如何使用Java数组和链表实现栈

2023-06-15 01:06:03 877人浏览 安东尼
摘要

小编给大家分享一下如何使用Java数组和链表实现栈,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、何为栈?栈(stack)又名堆栈,它是一种运算受限的线性表。限

小编给大家分享一下如何使用Java数组链表实现栈,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

一、何为栈?

栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。

栈可以类比成现实生活中的弹夹或者羽毛球桶

如何使用Java数组和链表实现栈

二、用数组实现栈

用数组模拟栈的思路分析如图:

如何使用Java数组和链表实现栈

定义一个top变量(指针)表示栈顶初始化为-1.
2.定义一个变量来记录栈的大小。
3.入栈操作有数据加入到栈中:top++; arr[top]=value;
4.出栈操作: int value=arr[top]; top–; return value;

下面看完整代码示例:

class Stack{    public int maxsize;//栈的大小    public int top=-1;//栈顶    public int[] arr;    public Stack(int maxsize) {        this.maxsize = maxsize;        arr=new int[maxsize];    }    //判断栈是否为空    public boolean isEmpty(){        return top==-1;    }    //判断栈是否满    public boolean isFull(){        return top==maxsize-1;    }    //添加一个元素    public void push(int value){        if(isFull()){            throw new RuntimeException("栈满");        }        top++;        arr[top]=value;    }    //弹出一个元素    public int pop(){        if(isEmpty())            throw new RuntimeException("栈空");        int value=arr[top];        top--;        return value;    }    //遍历栈中的元素    public void traverse(){        if (isEmpty()){            return;        }        //需要从栈顶开始显示数据        for(int i = top; i >= 0 ; i--) {            System.out.printf("stack[%d]=%d\n", i, arr[i]);        }        }    }

入栈操作 top++;arr[top]=value;其实可以直接改写为arr[++top]=value;
出栈操作可以将 int value=arr[top]; top–;return value;改为return arr[top–];

三、链表实现栈

思路分析:

入栈操作:用一个临时节点保存当前栈顶节点,将入栈的新节点作为栈顶元素,并将next域指向原来的旧节点。 node temp=top; top.setNext(temp);

出栈操作:先判断栈是否为空,不为空则将top节点的数据返回,并将top指向top的下一个next域:top=top.getNext();

public class LinkedListStack<V> {      static class Node<V>{        private V data;        private Node<V> next;        public V getData() {            return data;        }        public void setData(V data) {            this.data = data;        }        public Node<V> getNext() {            return next;        }        public void setNext(Node<V> next) {            this.next = next;        }    }    public int stackSize;//栈内元素的个数    public Node<V> top;//栈顶元素    public LinkedListStack() {        stackSize = 0;        top = null;    }    //入栈    public void push(V element){        Node<V> temp=top;        top=new Node<>();        top.setData(element);        top.setNext(temp);        stackSize++;    }    //出栈    public V pop(){        if (isEmpty())            throw new RuntimeException("empty stack");        V value=top.getData();        //栈顶指向下一个元素        top=top.getNext();        stackSize--;        return value;    }    //查看栈顶元素    public V peek(){        return top.getData();    }    //判断是否为空    public boolean isEmpty(){        return stackSize==0;    }    //查看栈内元素个数    public int getStackSize(){        return stackSize;    }    }

四、测试

public class Test {    public static void main(String[] args) {        LinkedListStack<String> stack = new LinkedListStack<>();        stack.push("a");        stack.push("b");        stack.push("c");        System.out.println(stack.pop());        System.out.println(stack.peek());        System.out.println(stack.getStackSize());    }}测试结果:cb2

Java有哪些集合

Java中的集合主要分为四类:1、List列表:有序的,可重复的;2、Queue队列:有序,可重复的;3、Set集合:不可重复;4、Map映射:无序,键唯一,值不唯一。

以上是“如何使用Java数组和链表实现栈”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网精选频道!

--结束END--

本文标题: 如何使用Java数组和链表实现栈

本文链接: https://www.lsjlt.com/news/276731.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何使用Java数组和链表实现栈
    小编给大家分享一下如何使用Java数组和链表实现栈,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、何为栈?栈(stack)又名堆栈,它是一种运算受限的线性表。限...
    99+
    2023-06-15
  • 教你怎么用Java数组和链表实现栈
    目录一、何为栈?二、用数组实现栈三、链表实现栈四、测试一、何为栈? 栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对...
    99+
    2024-04-02
  • JavaScript链表如何实现栈和队列
    这篇文章主要介绍了JavaScript链表如何实现栈和队列的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇JavaScript链表如何实现栈和队列文章都会有所收获,下面我们一起来看看吧。链表的时间复杂度 如下:接...
    99+
    2023-06-19
  • C++数组模拟之单链表与双链表和栈和队列的实现过程
    目录前引一、数组模拟实现单链表1.1 数组模拟的单链表解析1.2 数组模拟实现单链表例题二、数组模拟实现双链表2.1 数组模拟实现双链表解析2.2 数组模拟实现双链表例题三、数组模拟...
    99+
    2023-02-13
    C++数组模拟单链表 C++数组模拟双链表 C++数组模拟队列
  • Java顺序表和链表如何实现
    这篇“Java顺序表和链表如何实现”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Java顺序表和链表如何实现”文章吧。1. ...
    99+
    2023-07-04
  • java数据结构基础:循环链表和栈
    目录循环链表:实现思路:代码实现:栈:实现思路:代码实现:总结循环链表: 与单链表的最后一个节点的指针域为null不同,循环链表的最后一个节点的指针指向头结点 实现思路: 初始化时将...
    99+
    2024-04-02
  • java如何实现相交链表
    这篇文章主要为大家展示了“java如何实现相交链表”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“java如何实现相交链表”这篇文章吧。1.题目相交链表:给你两个单链表的头节点 headA 和 h...
    99+
    2023-06-25
  • Java如何实现双向链表
    本篇内容介绍了“Java如何实现双向链表”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1、双向链表1 双向链表的每个节点组成包含节点数据,上...
    99+
    2023-06-30
  • Java栈如何实现
    本篇内容介绍了“Java栈如何实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!栈栈 (Stack) 是一种运算受限的线性表, 遵循先进后出...
    99+
    2023-06-29
  • JAVA中怎么实现链表和双向链表
    这篇文章给大家介绍JAVA中怎么实现链表和双向链表,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。JAVA基础:语言中链表和双向链表的实现(转)[@more@]链表是一种重要的数据结构,在程序设计中占有很重要的地位。C语...
    99+
    2023-06-03
  • C++线性表深度解析之动态数组与单链表和栈及队列的实现
    目录一、线性表介绍线性表性质二、动态数组1)分析与设计2)实现三、单链表(企业设计方式)1)分析与设计2)实现四、栈(受限线性表)1)利用数组实现栈2)利用单链表实现栈3)栈的应用&...
    99+
    2024-04-02
  • 使用java一维数组模拟压栈弹栈
    思路 先进后出,优先解决压栈的问题,之后解决弹栈和main方法 功能 随时模拟压栈 随时模拟弹栈 防止异常和各种错误 随时可以遍历“栈”中存在的变量...
    99+
    2024-04-02
  • java项目如何使用链表
    今天就跟大家聊聊有关java项目如何使用链表,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。java 中链表的定义与使用方法Java实现链表主要依靠引用传递,引用可以理解为地址,链表的...
    99+
    2023-05-31
    java 链表 ava
  • C++如何用数组模拟链表
    目录前言1.单链表2.双链表总结前言 链表是指由一系列储存在非连续储存空间 结点组成的储存结构。每个结点由两部分组成:一是储存元素的数据域,一是储存下一个节点地址的指针域。用数组模拟...
    99+
    2024-04-02
  • Java实现顺序表和链表结构
    目录前言:顺序表定义:实现方法:代码实现:链表定义:分类:实现方法:代码实现:顺序表 & 链表总结前言: 线性表(linear list)是n个具有相同特性的数据元素的有限序...
    99+
    2024-04-02
  • Java如何实现基于数组的表
    这篇文章将为大家详细讲解有关Java如何实现基于数组的表,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。没看过 其他语言版的数据结构,但觉得java的实现方法很巧妙--用类和对象来实现.基于数组的表,思想很...
    99+
    2023-06-03
  • 如何使用JAVA实现二维数组遍历求和
    这篇文章将为大家详细讲解有关如何使用JAVA实现二维数组遍历求和,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。public class ArrayArrayDemo_3{ &...
    99+
    2023-06-02
  • java数据结构中的循环链表和栈是什么
    这篇文章主要讲解了“java数据结构中的循环链表和栈是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“java数据结构中的循环链表和栈是什么”吧!目录循环链表:实现思路:代码实现:栈:实现...
    99+
    2023-06-20
  • C++和python如何实现单链表
    这篇文章给大家分享的是有关C++和python如何实现单链表的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、链表的基本概念链表是数据元素的线性集合(Linear Collection),物理存储不连续。那么,这...
    99+
    2023-06-29
  • Java数据结构之双向链表如何实现
    这篇文章主要讲解了“Java数据结构之双向链表如何实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java数据结构之双向链表如何实现”吧!双向链表(Doubly linked list)什...
    99+
    2023-06-30
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作