首页 > 其他分享 >单链表与队列和栈

单链表与队列和栈

时间:2022-12-19 19:11:51浏览次数:42  
标签:head 单链 队列 节点 表与 null public size

单链表与队列和栈

使用单链表实现队列

队列是一个先进先出的数据结构,它包括进队、出队、获取队列大小等功能。

代码:

/**
 * 使用单链表实现队列
 * 队列是一个先进先出的数据结构,有进队列出队列,计算队列的大小等
 */
public class LinkedListImplementsQueue {
    //1.定义一个单链表的节点信息类
    public static class Node<V>{
        public V value;
        public Node<V> next;
        public Node(V v){
            value = v;
            next = null;
        }
    }

    //2.定义一个队列信息类
    public static class MyQueue<V>{
        //1.队列的头
        private Node<V> head;
        //2.队列的尾
        private Node<V> tail;
        //3.队列的大小
        private int size;
        public MyQueue(){
            head = null;
            tail = null;
            size = 0;
        }

        //1.判断队列是否为空
        public boolean isEmpty(){
            return size == 0;
        }
        //2.队列大小
        public int size(){
            return size;
        }
        //3.节点入队
        public void offer(V v) {
            //1.首先应该定义一个节点来接受新入队列的节点
            Node<V> current = new Node<>(v);
            //2.如果队列的尾部为空说明此时该队列是一个空队列,那么就让头部和尾部都指向该节点
            if(tail == null){
                head = current;
                tail = current;
            }else {
                //如果队列不为空
                tail.next = current;
                tail = current;
            }
            size++;
        }
        //4.节点出队列
        public V poll() {
            //首先定义一个变量接收出队列节点的值
            V ans = null;
            //出队列是从头部开始出因为队列是先进先出
            if(head != null){
                //首先记录头节点的值
                ans = head.value;
                //然后head向下走 不用管之前头节点的指针因为当它没有引用的时候jvm会自动回收
                head = head.next;
                //然后大小减一
                size--;
            }
            //最后返回出节点的值
            return ans;
        }
        //5.获取当前头节点的值
        public V peek() {
            V ans = null;
            if (head != null) {
                ans = head.value;
            }
            return ans;
        }
    }
}

单链表实现栈

栈是一个先进后出的数据结构,它包括进栈、出栈、获取栈的大小等功能。

代码:

/**
 * 使用单链表实现栈,栈是一个先进后出的数据结构
 */
public class LinkedListImplementsStack {
    //1.定义一个单链表的节点信息类
    public static class Node<V>{
        public V value;
        public Node<V> next;
        public Node(V v){
            value = v;
            next = null;
        }
    }
    //2.定义一个栈的信息类
    public static class MyStack<V> {
        private Node<V> head;
        private int size;
        public MyStack(){
            head = null;
            size = 0;
        }

        //1.栈的大小是否为空
        public boolean isEmpty(){
            return size == 0;
        }
        //2.栈的大小
        public int size(){
            return size;
        }
        //3.进栈
        public void push(V v) {
            //1.首先定义一个节点用来接收进栈节点信息
            Node<V> current = new Node<>(v);
            //如果栈为空就将头节点指向此时进栈的节点
            if (head == null) {
                head = current;
            }else {
                //首先将新进入节点的next指向原来的head
                current.next = head;
                //再将原来的head指向新进入的节点
                head = current;
            }
            //最后size加一
            size++;
        }
        //4.出栈
        public V pop() {
            //1.首先定义一个变量用来接收出栈节点的值
            V ans = null;
            //2.当head!=null的时候进行出栈
            if(head!=null){
                //先记录head节点的值
                ans = head.value;
                //然后head指向head的下一个节点
                head = head.next;
                //最后size--
                size--;
            }
            //最后返回ans
            return ans;
        }
        //5.获取栈顶节点的值
        public V peek() {
            return head != null ? head.value : null;
        }
    }
}

标签:head,单链,队列,节点,表与,null,public,size
From: https://www.cnblogs.com/ygstudy/p/16992855.html

相关文章

  • 基础算法汇总之堆和优先队列
    一.简述这篇文章将介绍几种常见的队列,本文将重点介绍优先队列以及优先队列底层的二叉堆并且实现基础算法(go实现),最后还会介绍一样Java并发包中的四种最常用的队列,分析其源码......
  • [leetcode]第 1 天 栈与队列(简单)
    09用两个栈实现队列思路栈:先进后出要求:先进先出。在队尾加,从队首删假设有栈A栈B,添加时压入栈A,删除时将栈A元素出栈,压入栈B,实现倒序,进而实现从队首删classCQueue{......
  • 如何处理消息队列消费过程中的重复消息
    在MQTT协议中,给出了三种传递消息时能够提供的服务质量标准,这三种服务质量从低到高依次是:​​Atmostonce​​:至多一次。消息在传递时,最多会被送达一次。换一个说法就......
  • 基于消息队列实现分布式事务
    注意:本文把消息队列与购物车系统看作同一个事务目标:掌握消息队列的事务场景:订单系统产生订单,购物车系统减购物车中的商品。实现思路:订单系统在消息队列上开启一个事务......
  • 队列总结_legend
    队列总结:Queue (1)队列的基本知识:        (1.1)特点:尾进头出,先进先出。(rearinfrontout)         (1.2)与线性表比较:        队列......
  • 架构设计(六):引入消息队列
    架构设计(六):引入消息队列作者:Grey原文地址:博客园:架构设计(六):引入消息队列CSDN:架构设计(六):引入消息队列消息队列是一个支持持久化的组件,数据存储在内存中,支持异步通信。它......
  • cpp优先队列(priority_queue)
    优先队列的概念在优先队列中,队列中的每个元素都与某个优先级相关联,但是优先级在队列数据结构中不存在。优先队列中具有最高优先级的元素将被首先删除,而队列遵循FIFO(......
  • 链表与数组的区别
    原文链接:https://baijiahao.baidu.com/s?id=1743478279629141019物理存储结构不同链表与数组在计算机中存储元素采用不同的物理存储结构,数组是顺序存储结构,链表是链式......
  • 单调队列——本质上和单调栈是一样的思路
    算法学习笔记(66):单调队列https://zhuanlan.zhihu.com/p/346354943“如果一个选手比你小还比你强,你就可以退役了。”——单调队列的原理好久没写笔记了,先补......
  • (六) 分库分表与集群
    分库分表一、为什么要分库分表关系型数据库以MySQL为例,单机的存储能力、连接数是有限的,它自身就很容易会成为系统的瓶颈。当单表数据量在百万以里时,我们还可以通过添加从......