Queue:

package com.qiusongde;

import java.util.Iterator;
import java.util.NoSuchElementException; import edu.princeton.cs.algs4.StdIn;
import edu.princeton.cs.algs4.StdOut; public class Queue<Item> implements Iterable<Item> { private Node first;
private Node last;
private int n; private class Node {
Item item;
Node next;
} public Queue() {
first = null;
last = null;
n = 0;
} public boolean isEmpty() {
return first == null;
} public int size() {
return n;
} public void enqueue(Item item) {
//add item to the end
Node oldlast = last; last = new Node();
last.item = item;
last.next = null;//end if(isEmpty())
first = last;
else
oldlast.next = last; n++; } public Item dequeue() {
if(isEmpty())
throw new NoSuchElementException("Queue is empty"); Item item = first.item;
first = first.next; if(isEmpty())
last = null;
n--; return item;
} @Override
public Iterator<Item> iterator() {
return new QueueIterator();
} private class QueueIterator implements Iterator<Item> { private Node current = first; @Override
public boolean hasNext() {
return current != null;
} @Override
public Item next() {
if(!hasNext())
throw new NoSuchElementException("Queue is empty"); Item item = current.item;
current = current.next; return item;
} @Override
public void remove() {
throw new UnsupportedOperationException();
} } public static void main(String[] args) { Queue<String> queue = new Queue<String>();
StdOut.println("Initialized size:" + queue.size()); while (!StdIn.isEmpty()) { String item = StdIn.readString(); if (!item.equals("-")) { queue.enqueue(item);
StdOut.println("enqueue success:" + item + " size:" + queue.size()); StdOut.print("Left on queue: ");
for (String s : queue) {
StdOut.print(s + " ");
}
StdOut.println(); } else {
if(queue.isEmpty())
StdOut.println("dequeue error, queue empty");
else {
StdOut.println("dequeue success:" + queue.dequeue() + " size:" + queue.size()); StdOut.print("Left on queue: ");
for (String s : queue) {
StdOut.print(s + " ");
}
StdOut.println();
}
} } } }

测试用例:

package com.qiusongde;

import edu.princeton.cs.algs4.StdIn;
import edu.princeton.cs.algs4.StdOut; public class Exercise1315 { public static void main(String[] args) { int k = Integer.parseInt(args[0]);
Queue<String> queue = new Queue<>(); while(!StdIn.isEmpty()) {
String s = StdIn.readString(); queue.enqueue(s);
} int size = queue.size();
for(int i = 0; i < size - k; i++) {
queue.dequeue();
} StdOut.println(queue.dequeue());
} }

测试结果:

1 2 3 4 5 6 7
3

最新文章

  1. 手把手教你配置UltraEdit对Oracle的PLSQL着色
  2. Mysql 相关字段类型长度
  3. UIWebView的应用和其中的JS与OC间传值
  4. 顺序队列的C语言实现
  5. 使用jquery的trigger方法优化页面代码
  6. Linux是怎么启动的
  7. 客户端一个http连接包含两个方向,一个是这个http连接的输入,另一个是这个http连接的输出。
  8. UNITY3D ShadeSH9
  9. 跟踪对象属性值的修改, 设置断点(Break on property change)
  10. apacheOfbiz
  11. linux mount挂载设备(u盘,光盘,iso等 )使用说明
  12. React Redux学习笔记
  13. Java面向对象 集合(下)
  14. FPM定制RPM包实践
  15. redis3.0 集群在windows上的配置(转)
  16. 选择结构if、switch
  17. Keras入门(四)之利用CNN模型轻松破解网站验证码
  18. SpringBoot搭建
  19. spring jdbc学习1
  20. 百度api查询多个地址的经纬度的问题

热门文章

  1. C#中用鼠标移动页面功能的实现(代码控制滚动条)
  2. 记一个发HTML格式邮件的问题
  3. 一个JavaScript Function Outliner插件 第三个版本 让你的JavaScript代码也支持折叠
  4. HTML5 Support In Visual Studio 2010
  5. 好用的公共 DNS
  6. Linux内存段的分析
  7. Java 9 模块解耦的设计策略
  8. anaconda3.5 3.6 2.7
  9. 输入两手牌,两手牌之间用“-”连接,每手牌的每张牌以空格分隔,“-”两边没有空格,如:4 4 4 4-joker JOKER 请比较两手牌大小,输出较大的牌,如果不存在比较关系则输出ERROR
  10. Rider