5、链表队列(java实现)

1、图例

2、链表节点

public class Node<T> {
    public T data;
    public Node next;
}

3、具体实现

public class LinkQueue<T> {
    private static Node head;
    private static Node tail;
    private static int size;

    /**
     * 初始化
     */
    public void initQueue() {
        Node node = new Node();
        node.data = null;
        node.next = null;
        head = tail = node;
        size = 0;
    }

    /**
     * 是否空
     *
     * @return
     */
    public static boolean isEmpty() {
        return head == tail;
    }

    /**
     * 入队列
     *
     * @param element
     */
    public void insertQueue(T element) {
        Node temp = new Node();
        temp.data = element;

        tail.next = temp;   //放节点
        tail = temp;        //移动尾指针
        size++;
    }

    /**
     *
     */
    public void popQueue() {
        if (isEmpty()) {
            System.out.println("队列已空,!!!");
            return;
        }
        Node temp = head.next;         //创建节点指向头结点所指向
        System.out.println("出队列: "+temp.data);
        head.next = temp.next;
        if (tail == temp) {
            tail = head;
        }
        size--;
    }

    /**
     * 元素个数
     */
    public static void sizeQueue() {
        System.out.println("元素个数:"+size);
    }

    /**
     * 遍历元素
     */
    public static void printQueue() {
        for (Node current = head.next;current != null;current = current.next){
            System.out.print(current.data+" ");
        }
        System.out.println();
    }
    public static void main(String[] args) {
        LinkQueue linkQueue = new LinkQueue();
        linkQueue.initQueue();

        linkQueue.insertQueue(1);
        printQueue();
        linkQueue.insertQueue(2);
        printQueue();
        linkQueue.insertQueue(3);
        printQueue();
        linkQueue.insertQueue(4);
        printQueue();

        linkQueue.popQueue();
        printQueue();
        linkQueue.popQueue();
        printQueue();
        linkQueue.insertQueue(5);
        printQueue();

        sizeQueue();

    }

4、实现结果

1
1 2
1 2 3
1 2 3 4
出队列: 1
2 3 4
出队列: 2
3 4
3 4 5
元素个数:3

原文地址:https://www.cnblogs.com/karrya/p/11031574.html

时间: 2024-11-08 08:18:57

5、链表队列(java实现)的相关文章

数据结构之链表及其Java实现

数据的存储一般分线性存储结构和链式存储结构两种.前者是一种顺序的存储方式,在内存中用一块连续的内存空间存储数据,即逻辑上相连的物理位置相邻,比较常见的就是数组:后者是一种链式存储方式,不保证顺序性,逻辑上相邻的元素之间用指针所指定,它不是用一块连续的内存存储,逻辑上相连的物理位置不一定相邻.本篇主要介绍链式存储结构基于链表的实现,使用的语言为Java. 链表是一种递归的数据结构,它要么为空(null),要么指向是指向一个结点(node)的引用,该节点含有一个泛型元素(该泛型元素可以是任意数据类型

链表队列

接下来把链表队列的代码分享给大家.因为还是链表操作,不做其他介绍. lqueue.h #ifndef _QUEUE_H #define _QUEUE_H #define MAXSIZE 10 typedef struct node { int data; struct node * next; } Node; typedef struct queue { Node * front; Node * rear; int size; } Queue; void q_init(Queue * queue

【C/C++学院】0802-链式栈/链表队列以及优先队列/封装链表库

链式栈 // stacklinknode.h #define datatype int struct stacknode { int num;//编号 datatype data;//数据 struct stacknode *pNext;//指针域 }; typedef struct stacknode StackNode;//简化 StackNode * init(StackNode * phead);//初始化 StackNode * push(StackNode * phead, int

java中使用FIFO队列:java.util.Queue实现多台服务器发邮件的代码

代码下载地址:http://www.zuidaima.com/share/1838230785625088.htm 原文:java中使用FIFO队列:java.util.Queue实现多台服务器发邮件的代码 最近由于zuidaima.com注册用户的增多,qq企业邮箱发送邮件会被封禁账号导致注册后面的用户收不到周总结,所以紧急开发了一套多账号,多服务器发送邮件的程序. 大概的设计思路如下: 1.服务器可以无限扩展,但由于qq企业邮箱是限定域名,所以要想多服务器还得有多域名,多账号也不行. 2.最

数组队列 与 链表队列

做了些实验,感觉 用链表实现队列 比 用数组实现队列 性能好 进出队的每秒操作数比较 数组队列 enqueue 37,037 dequeue 4,166,666 链表队列 enqueue 277,778 dequeue 666,667 先入队n次,再出队n次的运行时间比较,单位是秒 出入队次数 | 数组队列运行时间 | 链表队列运行时间 1,000 0.01 0.01 10,000 0.04 0.04 100,000 2.7 0.4 1,000,000 4 最后一组,数组队列的半天没运行出来 下

C语言实现链表队列(基本操作及图示)

-------------------------------------------- 基本概念: 和栈相反,队列是一种先进先出(FIFO)的线性表.只允许在一端插入,在另一端删除. 允许插入的叫"队尾"(rear),允许删除的叫"队头"(front). 使用场景:操作系统的作业排队.在允许多道程序运行的计算机系统中,同时有几个作业运行.如果运行结果都需要通道输出,则按照请求输出的先后次序排队.每当通道传输完毕可以接受新的输出任务时,队头的作业先从队列中退出作输出

基于链表实现Java 自定义Stack队列

接下来让我们看看,如何利用单链表结构来实现栈与队列.由于栈的操作只限于栈顶元素,而单链表只有对首元素才能在O(1)时间内完成插入和删除,故这里把单链表的首节点作为栈顶,其余元素依次排列.此外,为了保证getSize()方法也能够在O(1)时间内完成,还需借助一个实例变量来动态记录栈中元素的数目.具体的实现如 代码二.12 所示. Node类 Java代码见( Java 实现链表) StackLink 类: package com.list.stack; import java.util.Arra

基于链表实现Java 自定义Queue队列

与栈一样,我们也可以借助单链表来实现队列ADT.同样地,出于效率方面的考虑,我们将以单链表的首(末)节点作为队列的首(末)节点??这样,可以回避单链表在尾部进行删除操作时效率低下的缺陷.此外,还需要两个实例变量分别指示表的首.末节点. java代码如下: QueueList: package com.list.queue; import java.util.Arrays; import com.list.stack.Node; import com.list.stack.ExceptionSta

基于双链表 实现Java Queue队列

除了可以通过一维数组,单链表实现queue队列,还可以通过双链表实现queue队列. 在基于NLNode类实现双向链表的时候,为了使编程更加简洁,通常我们都要在最前端和最后端各设置一个哑元节点( Dummy node ).这两个节点分别称作头节点( Header node )和尾节点( Trailer node) ㈠,起哨兵( Sentinel)的作用.也就是说,它们并不存储任何实质的数据对象,头(尾)节点的next( prev)引用指向首(末)节点,而prev(next)引用为空.如此构成的双

Java算法入门-数组&amp;链表&amp;队列

算法就是解决问题的步骤,在一般的项目中可能用不上,但是一旦涉及到高并发,高性能时,就不得不考虑算法的优劣. 设计原则和特性 设计原则:正确性,可读性,健壮性,高效率和低存储 特性:有穷性,确定性,可行性,有输入,有输出. 算法题入门体验 如何判断是一个数是2的整数次幂?常规方法使用循环,但是在学习了二进制的基础知识后,发现可以使用模运算来实现. 1 import java.util.Scanner; 2 3 public class base { 4 5 public static void m