算法Sedgewick第四版-第1章基础-015一stack只保留last指针
- /*************************************************************************
- *
- * A generic queue, implemented using a *circular* linked list.
- * (Exercise 1.3.29)
- *
- * % java Ex_1_3_29 < tobe.txt
- * to be or not to be (2 left on queue)
- *
- *************************************************************************/
- import java.util.Iterator;
- import java.util.NoSuchElementException;
- public class Ex_1_3_29<Item> implements Iterable<Item> {
- private int N;
- private Node last;
- private class Node {
- private Item item;
- private Node next;
- }
- /**
- * Create an empty queue.
- */
- public Ex_1_3_29() {
- last = null;
- }
- /**
- * Is the queue empty?
- */
- public boolean isEmpty() {
- return last == null;
- }
- /**
- * Return the number of items in the queue.
- */
- public int size() {
- return N;
- }
- /**
- * Return the item least recently added to the queue.
- * Throw an exception if the queue is empty.
- */
- public Item peek() {
- if (isEmpty()) throw new RuntimeException("Queue underflow");
- return last.next.item;
- }
- /**
- * Add the item to the queue.
- */
- public void enqueue(Item item) {
- Node x = new Node();
- x.item = item;
- if (isEmpty())
- x.next = x;
- else
- {
- x.next = last.next;
- last.next = x;
- }
- last = x;
- N++;
- }
- /**
- * Remove and return the item on the queue least recently added.
- * Throw an exception if the queue is empty.
- */
- public Item dequeue() {
- if (isEmpty()) throw new RuntimeException("Queue underflow");
- Item item = last.next.item;
- if (last.next == last)
- last = null;
- else
- last.next = last.next.next;
- N--;
- return item;
- }
- /**
- * Return string representation.
- */
- public String toString() {
- StringBuilder s = new StringBuilder();
- for (Item item : this)
- s.append(item + " ");
- return s.toString();
- }
- /**
- * Return an iterator that iterates over the items on the queue in FIFO order.
- */
- public Iterator<Item> iterator() {
- return new ListIterator();
- }
- private class ListIterator implements Iterator<Item> {
- private int n = N;
- private Node current = last;
- public boolean hasNext() { return n > 0; }
- public void remove() { throw new UnsupportedOperationException(); }
- public Item next() {
- if (!hasNext()) throw new NoSuchElementException();
- Item item = current.next.item;
- current = current.next;
- n--;
- return item;
- }
- }
- public static void main(String[] args) {
- Ex_1_3_29<String> q = new Ex_1_3_29<String>();
- while (!StdIn.isEmpty()) {
- String item = StdIn.readString();
- if (!item.equals("-")) q.enqueue(item);
- else if (!q.isEmpty()) StdOut.print(q.dequeue() + " ");
- }
- StdOut.println("(" + q.size() + " left on queue: [ " + q + "])");
- }
- }
算法Sedgewick第四版-第1章基础-015一stack只保留last指针的更多相关文章
- 算法Sedgewick第四版-第1章基础-001递归
一. 方法可以调用自己(如果你对递归概念感到奇怪,请完成练习 1.1.16 到练习 1.1.22).例如,下面给出了 BinarySearch 的 rank() 方法的另一种实现.我们会经常使用递归, ...
- 算法Sedgewick第四版-第1章基础-2.1Elementary Sortss-001选择排序法(Selection sort)
一.介绍 1.算法的时间和空间间复杂度 2.特点 Running time is insensitive to input. The process of finding the smallest i ...
- 算法Sedgewick第四版-第1章基础-2.1Elementary Sortss-007归并排序(自下而上)
一. 1. 2. 3. 二.代码 package algorithms.mergesort22; import algorithms.util.StdIn; import algorithms.uti ...
- 算法Sedgewick第四版-第1章基础-2.1Elementary Sortss-006归并排序(Mergesort)
一. 1.特点 (1)merge-sort : to sort an array, divide it into two halves, sort the two halves (recursivel ...
- 算法Sedgewick第四版-第1章基础-2.1Elementary Sortss-005插入排序的改进版
package algorithms.elementary21; import algorithms.util.StdIn; import algorithms.util.StdOut; /***** ...
- 算法Sedgewick第四版-第1章基础-2.1Elementary Sortss-004希尔排序法(Shell Sort)
一.介绍 1.希尔排序的思路:希尔排序是插入排序的改进.当输入的数据,顺序是很乱时,插入排序会产生大量的交换元素的操作,比如array[n]的最小的元素在最后,则要经过n-1次交换才能排到第一位,因为 ...
- 算法Sedgewick第四版-第1章基础-2.1Elementary Sortss-002插入排序法(Insertion sort)
一.介绍 1.时间和空间复杂度 运行过程 2.特点: (1)对于已排序或接近排好的数据,速度很快 (2)对于部分排好序的输入,速度快 二.代码 package algorithms.elementar ...
- 算法Sedgewick第四版-第1章基础-1.3Bags, Queues, and Stacks-001可变在小的
1. package algorithms.stacks13; /******************************************************************* ...
- 算法Sedgewick第四版-第1章基础-1.4 Analysis of Algorithms-005计测试算法
1. package algorithms.analysis14; import algorithms.util.StdOut; import algorithms.util.StdRandom; / ...
随机推荐
- LeetCode OJ:Construct Binary Tree from Inorder and Postorder Traversal(从中序以及后序遍历结果中构造二叉树)
Given inorder and postorder traversal of a tree, construct the binary tree. Note:You may assume that ...
- 使用visio 2010建立sql server数据模型——手动画、利用逆向工程
基础数据库这个词不在新鲜,老早就提出了.咱们从出生,个人信息就被放到一个基本信息库中了,在全国各地,通过身份证号就能知道你的基本信息.最近米老师 下发了一个任务,让我们开发几个小项目,考试系统.选修课 ...
- unity3d IO操作
前几天有个朋友问我为什么在IOS平台中可以正常的读写文件可是在Android平台中就无法正常的读写.当时因为在上班所以我没时间来帮他解决,晚上回家后我就拿起安卓手机真机调试很快就定位 ...
- Laser
Petya is the most responsible worker in the Research Institute. So he was asked to make a very impor ...
- angular.run 妙用
**1.浏览器判断**在angular做微信应用的时候,有时候我们也想把相同一份代码运行在非微信的浏览器上,这时候我们可以在angular的run上写点东西实现~例如asw.run函数里执行定义一个$ ...
- Python 函数之装饰器
1.函数 #### 第一波 #### def foo(): print 'foo' foo #表示是函数 foo() #表示执行foo函数 #### 第二波 #### def foo(): print ...
- kindeditro.js乱码问题
kindeditor.js是用于显示新建邮件时的菜单栏的一个插件,比较好用,但是在引入的时候会出现乱码问题,主要有几个方面原因. 1.编码方式不对,要设置成utf8. <script chars ...
- error: cast from ‘char*’ to ‘int’ loses precision
程序: char* addrCom; addrCom= ......//赋值 == (int)addrCom) //导致编译出错 { ...... } 编译时出现错误: error: cast fro ...
- MD5加密 及获得密码盐
MD5加密 及获得密码盐 using System; using System.Collections.Generic; using System.Configuration; using Syste ...
- (转)基于PHP——简单的WSDL的创建(WSDL篇)
本文转载自:http://blog.csdn.net/rrr4578/article/details/24451943 1.建立WSDL文件 建立WSDL的工具很多,eclipse.zends ...