返回顶部
首页 > 资讯 > 后端开发 > Python >教你怎么用Java数组和链表实现栈
  • 263
分享到

教你怎么用Java数组和链表实现栈

2024-04-02 19:04:59 263人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

目录一、何为栈?二、用数组实现栈三、链表实现栈四、测试一、何为栈? 栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对

一、何为栈?

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

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

二、用数组实现栈

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

在这里插入图片描述

1.定义一个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());
    }
}
测试结果:
c
b
2

到此这篇关于教你怎么用Java数组和链表实现栈的文章就介绍到这了,更多相关Java数组和链表实现栈内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 教你怎么用Java数组和链表实现栈

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

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

猜你喜欢
  • 教你怎么用Java数组和链表实现栈
    目录一、何为栈?二、用数组实现栈三、链表实现栈四、测试一、何为栈? 栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对...
    99+
    2024-04-02
  • java中栈的数组和链表实现
    栈的介绍栈,是一种先进后出(FILO)的线性数据结构,主要操作为入栈和出栈。栈底:最早进入的元素存放的位置。栈顶:最后进入元素存放的位置(有些栈中将栈顶表示为栈顶元素的下一位置)。免费在线学习视频推荐:java视频栈的数组的实现示例如下:p...
    99+
    2014-09-11
    java教程 java 数组 链表 实现
  • 如何使用Java数组和链表实现栈
    小编给大家分享一下如何使用Java数组和链表实现栈,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、何为栈?栈(stack)又名堆栈,它是一种运算受限的线性表。限...
    99+
    2023-06-15
  • C++数组模拟之单链表与双链表和栈和队列的实现过程
    目录前引一、数组模拟实现单链表1.1 数组模拟的单链表解析1.2 数组模拟实现单链表例题二、数组模拟实现双链表2.1 数组模拟实现双链表解析2.2 数组模拟实现双链表例题三、数组模拟...
    99+
    2023-02-13
    C++数组模拟单链表 C++数组模拟双链表 C++数组模拟队列
  • JAVA中怎么实现链表和双向链表
    这篇文章给大家介绍JAVA中怎么实现链表和双向链表,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。JAVA基础:语言中链表和双向链表的实现(转)[@more@]链表是一种重要的数据结构,在程序设计中占有很重要的地位。C语...
    99+
    2023-06-03
  • java中关于队列的数组和链表实现
    队列的介绍队列是一种先进先出(FIFO)的线性的数据结构,队列的主要操作为入队和出队。队头:队列的出口端,队尾:队列的入口端,通常在数组中表示为最后入队元素的下一个位置。在用数组实现时,注意:若队头不断有元素出队,那么队列的可用空间就会变小...
    99+
    2022-04-06
    java教程 java 队列 数组 链表 实现
  • PHP中怎么利用数组实现单链表
    本篇文章为大家展示了PHP中怎么利用数组实现单链表,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。PHP数组实现单链表结构此类主要是依靠PHP强大的数组系统来模拟出单链表类型的数据结构。 本人完全凭借...
    99+
    2023-06-17
  • java数据结构中的循环链表和栈是什么
    这篇文章主要讲解了“java数据结构中的循环链表和栈是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“java数据结构中的循环链表和栈是什么”吧!目录循环链表:实现思路:代码实现:栈:实现...
    99+
    2023-06-20
  • 怎么用C语言实现链式栈
    这篇文章给大家分享的是有关怎么用C语言实现链式栈的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。堆栈的基本概念堆栈是只能在一端增删元素的表结构,该位置称为栈顶堆栈的基本运算是压入和弹出,前者相当于插入,而后者则是删...
    99+
    2023-06-22
  • C++线性表深度解析之动态数组与单链表和栈及队列的实现
    目录一、线性表介绍线性表性质二、动态数组1)分析与设计2)实现三、单链表(企业设计方式)1)分析与设计2)实现四、栈(受限线性表)1)利用数组实现栈2)利用单链表实现栈3)栈的应用&...
    99+
    2024-04-02
  • 教你怎么使用Java实现WebSocket
    目录一、WebSocket简介1.1 WebSocket协议1.2 WebSocket支持的消息类型二、创建一个WebSocket程序2.1 生命周期方法2.2 业务逻辑方法2.3 ...
    99+
    2024-04-02
  • java双向链表怎么实现
    Java中的双向链表可以通过定义一个Node类来实现,该类包含一个值和两个指针,分别指向前一个节点和后一个节点。具体实现如下: pu...
    99+
    2023-10-22
    java
  • 基于数组或链表实现Map的方法教程
    本篇内容介绍了“基于数组或链表实现Map的方法教程”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!前言JAVA中的Map主要就是将一个键和一个...
    99+
    2023-06-15
  • Java中怎么实现栈和队列
    这期内容当中小编将会给大家带来有关Java中怎么实现栈和队列,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。栈的创建:我们接下来通过链表的形式来创建栈,方便扩充。代码实现:public class Stac...
    99+
    2023-06-17
  • 怎么用java代码实现双向链表
    这篇文章主要介绍“怎么用java代码实现双向链表”,在日常操作中,相信很多人在怎么用java代码实现双向链表问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么用java代码实现双向链表”的疑惑有所帮助!接下来...
    99+
    2023-06-30
  • 利用java怎么实现一个单链表
    本文章向大家介绍利用java怎么实现一个单链表的基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。Java的特点有哪些Java的特点有哪些1.Java语言作为静态面向对象编程语言的代表,实现了面向对象理论,允许程序员...
    99+
    2023-06-06
  • java怎么实现单链表反转
    要实现单链表的反转,可以使用迭代或递归两种方法。 迭代法: public ListNode reverseList(ListNo...
    99+
    2023-10-26
    java
  • C++怎么用数组模拟链表
    这篇文章的内容主要围绕C++怎么用数组模拟链表进行讲述,文章内容清晰易懂,条理清晰,非常适合新手学习,值得大家去阅读。感兴趣的朋友可以跟随小编一起阅读吧。希望大家通过这篇文章有所收获!前言链表是指由一系列储存在非连续储存空间 结点组成的储存...
    99+
    2023-06-26
  • 怎么在java项目中实现一个链栈存储
    本篇文章给大家分享的是有关怎么在java项目中实现一个链栈存储,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。如下所示:package com.learn.algorithm.l...
    99+
    2023-05-31
    java 链栈存储 ava
  • 利用Java怎么实现一个反转链表
    今天就跟大家聊聊有关利用Java怎么实现一个反转链表,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。定义一个函数,输入一个链表的头结点,反转该链表并输出反转后的链表的头结点。链表结点如...
    99+
    2023-05-31
    java ava
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作