实现的思路为:

采用泛型的方式,首先定义了一个Queue的接口,然后通过实现该接口实现了线性和链式的两种形式的队列:

接口代码如下:

 package com.peter.java.dsa.interfaces;

 public interface Queue<T> {

     /* put item at rear of queue; */
void insert(T data); /* take item from front of queue */
T remove(); /* peek at front of queue */
T peek(); boolean isEmpty(); boolean isFull(); int size(); void clear();
}

线性栈的代码如下:

 package com.peter.java.dsa.common;

 import com.peter.java.dsa.interfaces.Queue;

 public class LinearQueue<T> implements Queue<T> {
private int capacity;
private T[] t;
private int front;
private int rear;
private int size; public LinearQueue() {
// TODO Auto-generated constructor stub
capacity = 16;
t = (T[]) new Object[capacity];
front = -1;
rear = -1;
size = 0;
} public LinearQueue(int capacity) {
this.capacity = capacity;
t = (T[]) new Object[capacity];
front = -1;
rear = -1;
size = 0;
} @Override
public void insert(T data) {
// TODO Auto-generated method stub
if (isEmpty()) {
front = (front + 1) % t.length;
t[front] = data;
rear = (rear + 1) % t.length;
} else {
if (isFull()) {
resize();
}
rear = (rear + 1) % t.length;
t[rear] = data;
}
size++;
} @Override
public T remove() {
// TODO Auto-generated method stub
T tmp = null;
if (!isEmpty()) {
tmp = t[front];
t[front] = null;
front = (front + 1) % t.length;
size--;
}
return tmp;
} @Override
public T peek() {
// TODO Auto-generated method stub
T tmp = null;
if (!isEmpty()) {
tmp = t[front];
}
return tmp;
} @Override
public boolean isEmpty() {
// TODO Auto-generated method stub
return front + rear == -2 && front == rear % t.length;
} @Override
public boolean isFull() {
// TODO Auto-generated method stub
return front == rear % t.length;
} @Override
public int size() {
// TODO Auto-generated method stub
return size;
} @Override
public String toString() {
// TODO Auto-generated method stub
StringBuffer buffer = new StringBuffer();
buffer.append("Linear Queue Content:[");
if (front < rear) {
for (int i = front; i < rear + 1; i++) {
buffer.append(t[i] + ",");
}
} else {
for (int i = front; i < t.length; i++) {
buffer.append(t[i] + ",");
}
for (int i = 0; i < rear + 1; i++) {
buffer.append(t[i] + ",");
}
}
buffer.append("]");
buffer.replace(buffer.lastIndexOf(","), buffer.lastIndexOf(",") + 1, "");
return buffer.toString();
} private void resize() {
int oldSize = t.length;
T[] tmp = (T[]) new Object[oldSize * 2];
for (int i = 0; i < oldSize; i++) {
tmp[i] = t[front];
front = (front + 1) % oldSize;
}
front = 0;
rear = oldSize - 1;
} @Override
public void clear() {
// TODO Auto-generated method stub
front = -1;
rear = -1;
} }

随着复习进度,后续代码会陆续更新。

数据结构队列的java实现,包括线性和链式两种方式的更多相关文章

  1. JAVA发送http GET/POST请求的两种方式+JAVA http 请求手动配置代理

    java发送http get请求,有两种方式. 第一种用URLConnection: public static String get(String url) throws IOException { ...

  2. java中读取配置文件ResourceBundle和Properties两种方式比较

    今天在开发的时候,需要把一些信息放到配置文件中,方便后续的修改,注意到用的是ResourceBundle读取配置文件的方式,记得之前也见过使用Properties的方式,就比较好奇这两种方式的区别,网 ...

  3. 不使用spring的情况下用java原生代码操作mongodb数据库的两种方式

    由于更改了mongodb3.0数据库的密码,导致这几天storm组对数据进行处理的时候,一直在报mongodb数据库连接不上的异常.   主要原因实际上是和mongodb本身无关的,因为他们改的是配置 ...

  4. java后台处理解析json字符串的两种方式

    简单说一下背景 上次后端通过模拟http请求百度地图接口,得到的是一个json字符串,而我只需要其中的某个key对应的value. 当时我是通过截取字符串取的,后来觉得不太合理,今天整理出了两种处理解 ...

  5. Java多线程2:实现多线程的两种方式

    原文:http://www.cnblogs.com/skywang12345/p/3479063.html 常见的实现多线程的方式有2种,一是继承Thread类,二是实现 Runnable接口,还可以 ...

  6. 【linux】linux查看资源任务管理器,使用top命令 + 查看java进程下的线程数量【两种方式】

    ================================ 详解:https://blog.csdn.net/achenyuan/article/details/77867661 ======= ...

  7. java多线程机制1(线程创建的两种方式)

    进程:正在运行的程序.(即程序在内存中开辟了一片空间) 线程:是进程的执行单元. 一个进程至少包含了一个多个线程. 多线程是不是可以提高效率:多线程可以合理的利用系统的资源,提高效率是相对的.因为cp ...

  8. Java中创建String的两种方式

    1.在Java中,创建一个字符串有两种方式 String x = "abc";String y = new String("abc"); 这两种方式有什么区别呢 ...

  9. 数据结构--队列(Java实现)

    数据结构--队列(Java实现) 博客说明 文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人删除,谢谢! 简介 队列是一种特殊的线性表,特殊之处在于它只 ...

随机推荐

  1. PHP接口和抽象类的区别

    原文引自: http://blog.csdn.net/sunlylorn/article/details/6124319 一. 抽象类abstract class 1 .抽象类是指在 class 前加 ...

  2. iframe参数

    iframe参数: <iframe src="test.jsp" width="100″ height="50″ frameborder="no ...

  3. Stopwatch计时器、秒表 C#

    .NET2.0也提供了这样一个秒表:Stopwatch类,它可以比较精确地测量时间. 速度测试: 软件的性能和可测性是一个复杂的主题.要确保应用程序能够满足用户的期望,就需要在开发周期内考虑它的性能和 ...

  4. Sharepoint 2013 左右&quot;SPChange&quot;一个简短的引论

    于SharePoint于,我们经常需要获得这些更改项目,竟api为我们提供SPChange物.下列,在通过我们的目录资料这一目标. 1.创建测试列表,名字叫做"SPChangeItems&q ...

  5. FloatyFish下载量

    老师之前没有统一好一个平台,为了公平起见,我们选择了知名度比较高的CSDN,上次课上给老师说的下载量已成为过去,我们目前的下载量是: 这里还有我们最真实的用户体验,来自CSDN的用户,而非我们的朋友: ...

  6. 关于启动调试时,总是启动多个web端口的问题

    在一个解决方案中,经常包含多个web项目,当设置某一个web项目为起始项目后,启动调试,会发现其他的web项目的端口也会一起打开,显示在电脑的右下方,其实开启其他端口有时是没必要的,只是多占用了系统内 ...

  7. 6天通吃树结构—— 第三天 Treap树

    原文:6天通吃树结构-- 第三天 Treap树 我们知道,二叉查找树相对来说比较容易形成最坏的链表情况,所以前辈们想尽了各种优化策略,包括AVL,红黑,以及今天 要讲的Treap树. Treap树算是 ...

  8. hdu 2066 一个人的旅行 最短路径

    一个人的旅行 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Sub ...

  9. javascript继承—继承的实现原理(1)

    原文:javascript继承-继承的实现原理(1) 打算针对js的继承写一系列文章,详细的分析js里继承原理,实现方式,各种继承方式的优缺点,以及最优继承方案,还有多继承的问题等…. 面向对象的编程 ...

  10. 概率图形模型(PGM)学习笔记(一)动机和概述

    在本文中,基于Daphne Koller完成课程. PDM(ProbabilisticGraphiccal Models) 称为概率图模型. 以下分别说明3个词相应的意义. 概率 -给出了不确定性的明 ...