1 package struct;
2
3 interface IQueue{
4 //入队列
5 void add(Object obj);
6 //出队列
7 Object remove();
8 //队列中元素个数(栈大小)
9 int size();
10 //判断队列是否为空
11 boolean isEmpty();
12 //取队头元素
13 Object getQueueHead();
14 //取队尾元素
15 Object getQueueTail();
16 //清空队列
17 void clear();
18 }
19 class Factory3{
20 private Factory3(){}
21 public static IQueue getIQueueInstance(){
22 return new LinkQueueImpl();
23 }
24 }
25 class LinkQueueImpl implements IQueue{
26 Node head;//队列的头
27 Node tail;//队列的尾
28 int size;
29 class Node{
30 Node prev;
31 Node next;
32 Object data;
33 public Node(Object data) {
34 super();
35 this.data = data;
36 }
37 }
38 //入队列(头插)
39 public void add(Object obj) {
40 Node newNode = new Node(obj);
41 //空队列
42 if(head == null){
43 head = newNode;
44 tail = newNode;
45 size++;
46 }else{
47 Node node = tail;
48 newNode.next = node;
49 node.prev = newNode;
50 tail = newNode;
51 size++;
52 }
53 }
54 //出队列(尾删)
55 public Object remove() {
56 if(isEmpty()){
57 return "无要删除元素";
58 }else if(head == tail){
59 //只有一个元素的队列
60 size--;
61 return head.data;
62 }else{
63 Node node = head;
64 head = node.prev;
65 node.prev = null;
66 size--;
67 return head.data;
68 }
69 }
70 //求队列长度
71 public int size() {
72 return size;
73 }
74 //求队列是否为空
75 public boolean isEmpty() {
76 return (size()==0);
77 }
78 //取队首元素
79 public Object getQueueHead() {
80 return head.data;
81 }
82 //取对尾元素
83 public Object getQueueTail() {
84 return tail.data;
85 }
86 //打印队列
87 public void print(){
88 myPrint(head);
89 }
90 //队首到对尾打印元素
91 private void myPrint(Node head){
92 for(Node node = head;node!=null;node = node.prev){
93 System.out.print(node.data+" ");
94 }
95 }
96 //置空队列
97 public void clear() {
98 if(head == null){
99 System.out.println("空队列");
100 }else{
101 //非空队列
102 Node node1 = tail;
103 Node node = head;
104 for(node = head;head!=tail;){
105 head = head.prev;
106 node.prev = null;
107 node.data = null;
108 size--;
109 }
110 node1.next = null;
111 node1.data = null;
112 size--;
113 }
114 }
115 }
116 public class LinkQueue {
117 public static void main(String[] args) {
118 IQueue queue = Factory3.getIQueueInstance();
119 //向下转型
120 LinkQueueImpl queue1 = (LinkQueueImpl)queue;
121 System.out.println("以下为空队列测试情况");
122 System.out.println("================remove测试函数==================");
123 System.out.println(queue.remove());
124 System.out.println("================size测试函数==================");
125 System.out.println(queue.size());
126 System.out.println("================isEmpty测试函数==================");
127 System.out.println(queue.isEmpty());
128 System.out.println("以下为非空队列测试情况");
129 System.out.println("================add和print测试函数==================");
130 queue.add("hello");
131 queue.add("world!");
132 queue.add("hi");
133 queue.add("陕科大!");
134 queue.add("today");
135 queue.add("is");
136 queue.add("4月18号!");
137 queue1.print();
138 System.out.println();
139 System.out.println("================getQueueHead测试函数==================");
140 System.out.println(queue.getQueueHead());
141 System.out.println("================getQueueTail测试函数==================");
142 System.out.println(queue.getQueueTail());
143 System.out.println("================remove测试函数==================");
144 System.out.println(queue.remove());
145 System.out.println(queue.remove());
146 System.out.println("================remove后print测试函数==================");
147 queue1.print();
148 System.out.println();
149 System.out.println("================size测试函数==================");
150 System.out.println(queue.size());
151 System.out.println("================isEmpty测试函数==================");
152 System.out.println(queue.isEmpty());
153 System.out.println("================clear测试函数==================");
154 queue.clear();
155 System.out.println(queue.size());
156 }
157 }

队列——Java实现的更多相关文章

  1. java中使用队列:java.util.Queue (转)

    Queue接口与List.Set同一级别,都是继承了Collection接口.LinkedList实现了Queue接 口.Queue接口窄化了对LinkedList的方法的访问权限(即在方法中的参数类 ...

  2. 队列-java代码

    public class QueueDemo { private int maxSize; private long[] queueArray; // 队列的头,实际是数组的尾 private int ...

  3. java中使用队列:java.util.Queue

    在java5中新添加了java.util.Queue接口,用以支持队列的常见操作.该接口扩展了java.util.Collection接口.Queue使用时要尽量避免Collection的add()和 ...

  4. 阻塞队列 - java基于链表的简单实现

    1.阻塞队列的原理 阻塞队列与普通队列的区别在于:阻塞队列为空时,从队列中获取元素的操作将会被阻塞,当队列为满时,往队列里添加元素的操作会被阻塞. 试图从空的阻塞队列中获取元素的线程将会被阻塞,直到其 ...

  5. 剑指offer【05】- 用两个栈实现队列(java)

    题目:用两个栈实现队列 考点:栈和队列 题目描述:用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 解题思路:每次psuh是时先将stack2清空放入stck1(保 ...

  6. java中使用队列:java.util.Queue(转)

    队列是一种特殊的线性表,是运算受到限制的一种线性表,只允许在表的一端进行插入,而在另一端进行删除元素的线性表.队尾(rear)是允许插入的一端.队头(front)是允许删除的一端.空队列是不含元素的空 ...

  7. 网站架构:消息队列 Java后端架构

    2017-01-13  一.消息队列概述 消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题.实现高性能,高可用,可伸缩和最终一致性架构.是大型分布式系统不可缺少的中间 ...

  8. redis实现消息队列-java代码实现

    转:https://blog.csdn.net/qq_42175986/article/details/88576849 pom.xml <!-- redis依赖 --> <depe ...

  9. 05.用两个栈实现队列 Java

    题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 思路 进栈: 直接进stack1 出栈: 若stack2不为空,则出栈. 否则,当stack1不为空时, ...

  10. (超详细)动手编写 — 栈、队列 ( Java实现 )

    目录 前言 栈 概念 栈的设计 编码实现 小结 队列 概念 队列的设计 编码实现 双端队列 概念 设计 编码 循环队列 循环队列 循环双端队列 声明 前言 栈 概念 什么是栈? **栈 **:是一种特 ...

随机推荐

  1. Docker 搭建 Jenkins 持续集成自动化构建环境

    1.Docker镜像拉取 Jenkins 环境命令 docker pull jenkins/jenkins:lts 查看下拉取的镜像 docker images 2.通过容器编排方式构建 Jenkin ...

  2. shell 中小括号,中括号,大括号的区别

    一.小括号,圆括号() 1.单小括号 () ①命令组.括号中的命令将会新开一个子shell顺序执行,所以括号中的变量不能够被脚本余下的部分使用.括号中多个命令之间用分号隔开,最后一个命令可以没有分号, ...

  3. LINUX系统新增及自动挂载硬盘-九五小庞

    Linux系统下,添加新硬盘后,自动挂载的方法   1,列出所有硬盘,找到需要挂载的硬盘,例如/dev/vdb.输入: fdisk -l   2,查看硬盘是不是已经被挂载.一个硬盘不能重复挂载,已经挂 ...

  4. 流媒体技术的应用,如何搭建一个SimpleNVR流媒体服务系统

    Onvif/RTSP流媒体服务 SimpleNVR Onvif/RTSP流媒体服务是一款软硬一体音视频流媒体服务软件.它是在5G.AI.云计算.大数据.物联网等网络技术大规模商用后,用户要求视频随时随 ...

  5. HydroD:辅助脚本函数

    HydroD:辅助函数 在HydroD中,使用JS脚本可以快速进行模拟参数设置,但是经过尝试,HydroD中的JS脚本语言并不支持现在JavaScript中的一些语法.所以考虑采用Matlab字符串拼 ...

  6. robot framework 常用关键字介绍

    1.log 打印所有内容 log hello word 2.定义变量 ${a} Set variable 92 log ${a}   3.连接对象 ${a} Catenate hello word l ...

  7. HTTP 缓存终极指南

    TL;DR 错误的缓存策略是如何抵消你所做的性能优化工作的. 缓存存在于客户端并且通过chrome或者其他抓包工具查看其状态信息. 客户端通过header中的各个字段做缓存的过期判断. 代理服务器上也 ...

  8. 理解PHP的运行机制

    PHP是一种纯解释型在服务端执行的可以内嵌HTML的脚本语言,尤其适合开发Web应用程序.请求一个 PHP 脚本时,PHP 会读取该脚本,并将其编译为 Zend 操作码,这是要执行的代码的一种二进制表 ...

  9. 国内首家!腾讯云正式成为 FinOps 基金会顶级会员

    11月24日,腾讯云正式宣布加入FinOps基金会,作为国内首家FinOps基金会顶级会员,腾讯云将联合FinOps基金会,全面推进对FinOps标准和最佳实践的贡献,为企业提供云财务管理的最佳解决方 ...

  10. lilypond进阶——用scheme修改乐谱细节

    lilypond对乐谱内容的修改非常自由,用户可以自由根据需要做调整 调整一般都是用\override的命令,但是会比较冗长,码代码的时候比较麻烦 重新设置一个函数来概括命令,调用的时候使用的代码更短 ...