栈、队列 java代码实现

文章目录

  • 普通队列
    • 数组实现
    • java代码实现
      • 单元测试
      • 控制台打印
    • 链表实现
      • java代码实现
      • 单元测试
      • 控制台打印
    • LinkedList队列使用
    • 优先队列:PriorityQueue使用
    • 数组实现
      • java代码实现
      • 单元测试
      • 控制台打印
    • 链表实现
      • java代码实现
      • 单元测试
      • 控制台打印

普通队列

概念:先入先出

数组实现

java代码实现

package csdn.dreamzuora.queue;/*** @author weijie* @date 2020/10/15 19:54* Description: 先入先出*/
public class ArrayQueue {int[] queue;/*** 队头*/int head = 0;/*** 队尾*/int tail = 0;/*** 初始化* @param size*/public ArrayQueue(int size) {this.queue = new int[size];}/*** 入栈* @param data*/public boolean enqueue(int data){if (tail >= queue.length){return false;}queue[tail++] = data;return true;}/*** 出栈* @return*/public int dequeue(){return queue[head++];}public boolean isEmpty(){/*** 队头等于队尾此时表示队列为空*/if (head == tail){return true;}return false;}}

单元测试

package csdn.dreamzuora.queue;import org.junit.Test;import static org.junit.Assert.*;/*** Title:* Description:** @version 1.0* @author: weijie* @date: 2020/10/16 10:25*/
public class ArrayQueueTest {ArrayQueue queue = new ArrayQueue(10);@Testpublic void enqueue() {System.out.print("入队列:");for (int i = 0; i < 10; i++){System.out.print("->" + i);queue.enqueue(i);}System.out.println();System.out.print("出队列:");while (!queue.isEmpty()){System.out.print("->" + queue.dequeue());}}
}

控制台打印

在这里插入图片描述

链表实现

java代码实现

package csdn.dreamzuora.queue;/*** Title: Node* Description:** @version 1.0* @author: weijie* @date: 2020/10/16 9:54*/
public class Node {int data;Node next;public Node(int data) {this.data = data;}
}
package csdn.dreamzuora.queue;/*** @author weijie* @date 2020/10/15 19:56* Description:*/
public class LinkedQueue {Node head;Node tail;/*** 入栈* @return*/public void enqueue(int data){Node appendNode = new Node(data);if (tail == null){tail = appendNode;head = appendNode;}else {tail.next = appendNode;tail = appendNode;}}/*** 出栈*/public int dequeue(){int data = head.data;head = head.next;return data;}public boolean isEmpty(){if (head == null){return true;}return false;}
}

单元测试

package csdn.dreamzuora.queue;import org.junit.Test;import java.util.LinkedList;import static org.junit.Assert.*;/*** Title:* Description:** @version 1.0* @author: weijie* @date: 2020/10/16 10:25*/
public class LinkedQueueTest {LinkedQueue queue = new LinkedQueue();@Testpublic void enqueue() {System.out.print("入队列:");for (int i = 0; i < 10; i++){System.out.print("->" + i);queue.enqueue(i);}System.out.println();System.out.print("出队列:");while (!queue.isEmpty()){System.out.print("->" + queue.dequeue());}}
}

控制台打印

在这里插入图片描述

LinkedList队列使用

package csdn.dreamzuora.queue;import org.junit.Test;import java.util.LinkedList;/*** Title: 链表当作队列使用* Description:** @version 1.0* @author: weijie* @date: 2020/10/19 16:52*/
public class LinkedListTest {@Testpublic void example(){LinkedList<Integer> queue = new LinkedList<>();/*** 入队*/queue.offer(1);queue.offer(2);queue.offer(3);/*** 出队*/while (!queue.isEmpty()){System.out.println(queue.poll());}}}

优先队列:PriorityQueue使用

package csdn.dreamzuora.queue;import org.junit.Test;import java.util.Comparator;
import java.util.PriorityQueue;/*** Title: 优先队列* Description:** @version 1.0* @author: weijie* @date: 2020/10/23 15:43*/
public class PriorityQueueTest {@Testpublic void example(){PriorityQueue<Integer> queue = new PriorityQueue<>(10);for (int i = 10; i > 0; i--){queue.add(i);}System.out.println(queue);System.out.println(queue.poll());}@Testpublic void compare(){PriorityQueue<Student> priorityQueue = new PriorityQueue<>(new Comparator<Student>() {@Overridepublic int compare(Student o1, Student o2) {return Integer.compare(o2.getAge(), o1.getAge());}});for (int i = 0; i < 10; i++){Student student = new Student(i, "name-" + i);priorityQueue.add(student);}System.out.println(priorityQueue.peek());System.out.println("---------------------");for (int i = 20; i < 25; i++){priorityQueue.add(new Student(i, "name-" + i));}while (!priorityQueue.isEmpty()){System.out.println(priorityQueue.poll());}}class Student{Integer age;String name;public Student() {}public Student(Integer age, String name) {this.age = age;this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}@Overridepublic String toString() {return "Student{" +"age=" + age +", name='" + name + '\'' +'}';}}
}

概念:先入后出

数组实现

java代码实现

package csdn.dreamzuora.stack;/*** @author weijie* @date 2020/10/15 16:02* Description: 先入后出*/
public class ArrayStack {int[] stack;int i = 0;/*** 初始化* @param size*/public ArrayStack(int size) {stack = new int[size];}/*** 入栈* @param data*/public boolean push(int data){if (i >= stack.length){return false;}stack[i++] = data;return true;}public boolean isEmpty(){if(i <= 0){return true;}return false;}/*** 出栈* @return*/public int pop(){return stack[--i];}}

单元测试

package csdn.dreamzuora.stack;import org.junit.Test;import static org.junit.Assert.*;/*** @author weijie* @date 2020/10/15 16:09* Description:*/
public class ArrayStackTest {ArrayStack stack = new ArrayStack(10);@Testpublic void print() {System.out.print("入栈:");for (int i = 0; i < 10; i++){stack.push(i);System.out.print("->" + i);}System.out.println();System.out.print("出栈:");while (!stack.isEmpty()){System.out.print("->" + stack.pop());}}
}

控制台打印

在这里插入图片描述

链表实现

java代码实现

package csdn.dreamzuora.stack;/*** @author weijie* @date 2020/10/15 16:19* Description:*/
public class Node {int value;Node next;public Node(int value) {this.value = value;}
}
package csdn.dreamzuora.stack;/*** @author weijie* @date 2020/10/15 16:18* Description:*/
public class LinkedListStack {private Node head;private int size = 0;public void push(Node node){if (size == 0){head = node;}else {node.next = head;head = node;}size ++;}public Node pop(){if (size != 0){Node node = head;head = head.next;size--;return node;}else {return null;}}public boolean isEmpty(){if (size <= 0){return true;}return false;}}

单元测试

package csdn.dreamzuora.stack;import org.junit.Test;import static org.junit.Assert.*;/*** @author weijie* @date 2020/10/15 16:31* Description:*/
public class LinkedListStackTest {LinkedListStack stack = new LinkedListStack();@Testpublic void print() {System.out.print("入栈:");for (int i = 0; i < 10; i++){stack.push(new Node(i));System.out.print("->" + i);}System.out.println();System.out.print("出栈:");while (!stack.isEmpty()){System.out.print("->" + stack.pop().value);}}
}

控制台打印

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/508820.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ElasticSearch入门篇

文章目录控制台RESTFULL操作REST风格说明基于REST命令说明&#xff1a;es支持的数据类型核心数据类型ik分词器使用ik_smart最少切分ik_max_word最细粒度索引操作索引库创建创建文档方式指定索引类型(以后这种方式会被弃用)不指定索引类型利用默认的_doc类型更新文档方式一&…

【待完成】并发包下常用到线程工具类汇总

文章目录并发容器BlockingQueueArrayBlockingQueueLinkedBlockingQueuePriorityBlockingDelayQueueSynchronousQueueBlockingDequeCopyOnWriteCopyOnWriteArrayListCopyOnWriteArraySetConcurrentLinkedQueue/DequeConcurrentHashMapConcurrentSkipListMap/Set同步工具类AQS实现…

爬虫中如何获取页面编码类型

获取页面的编码格式的三种方式&#xff1a; 根据Response中的header获取编码格式根据页面标签中的meta获取根据页面内容识别自动识别出编码格式&#xff0c;经过测试准确率比较高 三种方式可以结合使用&#xff0c;由于inputStream不能够被复用&#xff0c;但是inputStrem没有…

Spark集群部署与架构

在大数据时代&#xff0c;处理海量数据需要分布式计算框架。Apache Spark作为一种强大的大数据处理工具&#xff0c;可以在集群中高效运行&#xff0c;处理数十TB甚至PB级别的数据。本文将介绍如何构建和管理Spark集群&#xff0c;以满足大规模数据处理的需求。 Spark集群架构…

java核心技术-多线程并发设计原理以及常见面试题

文章目录写在前面多线程回顾Thread和Runnable面试官&#xff1a;为什么我们在项目中推荐使用使用Runnable方法而不用继承Thread&#xff1f;面试官&#xff1a;Callable为什么可以带返回值&#xff0c;你知道底层原理&#xff1f;面试题&#xff1a;线程了解&#xff1f;给我讲…

java核心技术-jvm基础知识

文章目录JVM回顾JVM、JRE、JDK之间关系&#xff1f;Java程序执行过程&#xff1f;面试官&#xff1a;解释执行和JIT(及时编译)两种执行方式有什么区别&#xff1f;java虚拟机内存管理jvm整体架构JVM只是定义内存划分规范等&#xff0c;具体实现依赖不同虚拟机实现&#xff0c;如…

多线程场景下利用ThreadLocal是线程安全?

文章目录背景多线程场景测试代码结论背景 ThreadLocal原理以及基本概念这里我就不介绍了&#xff0c;这里我们主要关注ThreadLocal是否是线程安全吗&#xff1f;其实如果我们知道ThreadLocal原理我们肯定知道它是线程安全的&#xff0c;但是我在开发的时候不放心做了个测试&am…

深入剖析线程池基本原理以及常见面试题详解

文章目录面试官&#xff1a;能给我讲讲线程池的实现原理&#xff1f;线程池类继承关系ThreadPoolExecutor核心数据结构面试官&#xff1a;给我讲讲线程池的有哪些参数&#xff1f;面试官&#xff1a;如何优雅的关闭线程&#xff1f;线程的生命周期面试官&#xff1a;线程池哪五…

设计模式七大设计原则

文章目录设计模式七大设计原则开闭原则里氏替换原则依赖倒置原则接口隔离原则迪米特法则-最少知道原则单一职责原则合成复用原则设计模式 面向对象的三个基本特征&#xff1a; 继承封装多态 设计模式体现了代码的耦合性、内聚性、可维护性、可扩展性、重用性、灵活性。 代码…

从框架源码中学习结构型设计模式

文章目录从框架源码学习结构型设计模式适配器模式应用实例案例一&#xff1a;dubbo框架日志适配器Logger接口日志实现类Logger适配器接口LoggerAdapter实现类Logger日志工厂桥接模式应用场景案例&#xff1a;dubbo源码-远程调用模块channelHandler设计ChannelHandler是一个SPI拓…

MDC日志logback整合使用

MDC日志logback整合使用 为什么使用MDC记录日志&#xff1f; 场景&#xff1a; 由于我的搜索服务并发量比较高&#xff0c;而处理一次搜索请求需要记录多个日志&#xff0c;因此日志特别多的情况下去查一次搜索整个日志打印情况会比较复杂。 解决方案&#xff1a; 可以使用用…

如何合理的配置线程数?

文章目录题记Java并发编程实战美团技术团队追求参数设置合理性线程池参数动态化题记 我想不管是在面试中、还是工作中&#xff0c;我们总会面临这种问题&#xff0c;那么到底有没有一种计算公式去告诉我们如何去配置呢&#xff1f; 答案是&#xff1a;没有 想要合理的配置线…

基于CompletableFuture并发任务编排实现

文章目录并发任务编排实现不带返回值/参数传递任务串行执行并行执行并行执行-自定义线程池阻塞等待&#xff1a;多并行任务执行完再执行任意一个任务并发执行完就执行下个任务串并行任务依赖场景带返回值/参数传递任务带返回值实现串行执行多线程任务串行执行对任务并行执行&am…

搜索研发工程师需要掌握的一些技能

文章目录基础语言数据结构与算法工程方面搜索相关搜索主要模块电商搜索流程分词相关搜索召回相似度算法相关词推荐排序相关国美搜索搜索算法工程师需要掌握的技能基础 语言 大部分公司用的是Solr、ElasticSearch&#xff0c;都是基于Java实现的&#xff0c;因此熟悉掌握Java语…

Flink入门看完这篇文章就够了

文章目录第一章&#xff1a;概述第一节&#xff1a;什么是Flink&#xff1f;第二节&#xff1a;Flink特点&#xff1f;第三节&#xff1a;Flink应用场景&#xff1f;第四节&#xff1a;Flink核心组成第五节&#xff1a;Flink处理模型&#xff1a;流处理和批处理第六节&#xff…

word小结

域代码/域结果显示设置 word选项---->>高级------>>显示域代码而非域值将样式传给其它文件使用 首先启动Word打开包含这些样式的一个文件&#xff0c;然后选择“工具”---->“模板和加载项”。在弹出的对话框中单击“管理器”按钮。在弹出的“管理器”对话框中&…

线程属性总结

今天面试那哥们问起线程属性&#xff0c;me竟然就说出了一个&#xff0c;囧 学习&#xff1a;http://blog.csdn.net/zsf8701/article/details/7842392 http://blog.csdn.net/jxhnuaa/article/details/3254299 http://blog.sina.com.cn/s/blog_9bd573450101hgdr.html int pthre…

百度2015校园招聘软件开发笔试题及答案

简单题&#xff08;本题共30分&#xff09; 请简述Tcp-ip的3次握手以及4次挥手过程&#xff1f;并解释为何关闭连接需要4次挥手(10分) 详细答案参见TCP/IP协议三次握手与四次握手流程解析 TCP三次握手、四次挥手过程如下: 通常情况下&#xff0c;一个正常的TCP连接&#xf…

linux ps 命令使用

Linux中的ps命令是Process Status的缩写。ps命令用来列出系统中当前运行的那些进程。ps命令列出的是当前那些进程的快照&#xff0c;就是执行ps命令的那个时刻的那些进程&#xff0c;如果想要动态的显示进程信息&#xff0c;就可以使用top命令。 linux上进程有5种状态 ps命令使…