java语言实现队列
来源:互联网 发布:淘宝客怎么打推广 编辑:程序博客网 时间:2024/06/06 16:29
队列的接口
package edu.lqstudy.chaptor.chaptor22.queue;public interface Queue {/**插入一个元素到队列尾部*/ public void enQueue(Object obj) throws Exception; /**删除队列头部的元素,并且返回其值*/ public Object deQueue() throws Exception; /**获取队列头部的值,但是不删除*/ public Object queueFront() throws Exception; /**判断队列是否为空*/ public boolean isEmpty();}
队列的实现方式
这里有两种实现方式,一种是顺序存储结构,另一种是链式存储结构
添加元素移动tail的值,删除元素移动head的值
顺序存储结构实现队列
package edu.lqstudy.chaptor.chaptor22.queue;/** * 循环队列,head指向的位置没有值,这是为了区分队列满和空的必要妥协 * * @author hacker * */public class SeqQueue implements Queue{private Object[] queue;//队列的数据区private int head = 0;//(head + 1)%size为队列的头部private int tail = 0;//队列的尾部private int size = 0;//queue数组的容量,队列的容量为size - 1/** * 无参构造函数,队列的容量默认为10 * */SeqQueue(){size = 10 + 1;queue = new Object[size];}/** * 构造函数,根据给定的n生成容量为n的队列, * * @param int n */SeqQueue(int n){queue = new Object[n + 1];size = n + 1;}@Overridepublic void enQueue(Object obj) throws Exception {// TODO Auto-generated method stubif(isFull()){throw new Exception("队列已满");}else{ tail = (tail + 1)%size;this.queue[tail] = obj;}}@Overridepublic Object deQueue() throws Exception {// TODO Auto-generated method stubObject obj = null;if(isEmpty()){throw new Exception("队列已空");}else{head = (head + 1)%size;obj = queue[head];}return obj;}@Overridepublic Object queueFront() throws Exception {// TODO Auto-generated method stubObject obj = null;if(isEmpty()){throw new Exception("队列已空");}else{int index = (head + 1)%size;obj = queue[index];}return obj;}@Overridepublic boolean isEmpty() {// TODO Auto-generated method stubreturn tail == head;}/** * 判断队列是否已满 * @return boolean */public boolean isFull(){return (tail + 1)%size == head;//如果tail在向前走一步等于head,//说明队列已经饶了一圈,则已经满了} /** * 返回队列中元素的个数 * @return int */public int getLength(){return (size + tail - head)%size;//如果tail > head,值为tail - head//如果tail < head 值为size - (head - tail),都是元素的个数}/** * 返回描述对象信息的String对象 * 格式为: * 初始大小:(int) * head值: (int) * tail值: (int) * size值: (int) * */public String toString(){String s = "初始大小" + getLength() + "\nhead值:" + head + "\ntail值: " + tail + "\nsize值: " + size;return s;//}}
链式结果实现队列
package edu.lqstudy.chaptor.chaptor22.queue;/** * 使用链式存储结构实现队列,实现了两个类: * Node类:结点类,相当于集合的元素 * LinkQueue类:相当于存储元素的集合 * @author hacker * */public class LinkQueue implements Queue{ private Node head;//指向队列头元素 private Node tail;//指向队列尾元素 private int len;//添加,删除数据时改变len的值 /**构造函数*/ LinkQueue(){ head = tail = null; len = 0; }@Overridepublic void enQueue(Object obj) throws Exception {// TODO Auto-generated method stub Node n = new Node(obj);if(isEmpty()){head = tail = n;//如果添加元素到空队列,说明head值会改变//并且tail之前的值为null;}else{tail.setNext(n);//原结点指向新生成的结点tail = n;}len++;}@Overridepublic Object deQueue() throws Exception {// TODO Auto-generated method stubObject ans = null;if(isEmpty())throw new Exception("从空队列中移除对象是不予许的");else{Node n = head;//获取头结点head = head.getNext();//将head指针指向下一个结点len--;if(isEmpty())//如果删除的是最后一个元素,说明tail的值也发生了变化tail = null;ans = n.getObj();}return ans;}@Overridepublic Object queueFront() throws Exception {// TODO Auto-generated method stubObject obj = null;if(isEmpty())throw new Exception("从空队列中查找元素是不予许的");else{Node n = head;obj = n.getObj();}return obj;}@Overridepublic boolean isEmpty() {// TODO Auto-generated method stubreturn len == 0;}public int length(){return len;}}class Node{private Object obj;//存储的对象private Node next = null;//下一个对象的指针public Node(){obj = null;}public Node(Object obj){this.obj = obj;}public Node(Object obj,Node next){this(obj);this.next = next;}public Object getObj(){return obj;}public Node getNext(){return next;}public void setNext(Node next){this.next = next;}}
0 0
- java语言实现队列
- java语言实现队列
- 数据结构-队列 JAVA语言实现
- 队列 C语言实现
- 队列C语言实现
- C语言实现队列
- 队列 c语言实现
- C语言实现队列
- C语言实现队列
- C 语言实现队列
- c语言实现队列
- C语言实现队列
- C语言队列实现
- C语言实现队列
- 使用数组实现栈和循环队列(JAVA语言)
- 数据结构(java语言描述)-- 队列的循环数组实现
- 队列的链式存储方式的实现(Java语言描述)
- 优先队列--C语言实现与Java例子
- JDBC-java数据库连接技术
- spark环境搭建
- 数组名与指针举例
- 在数据分析、挖掘方面,有哪些好书值得推荐?
- python之OS模块详解
- java语言实现队列
- <<Linux内核的设计与实现>>读书笔记(三)-Linux的进程
- bzoj1270
- hive环境搭建
- 表单中的input设为disable后数据无法提交的解决方案
- JAVA中字符串操作
- 494. Target Sum(第十一周)
- Boost 使用入门
- 使用Jenkins+gitlab自动化打包