码迷,mamicode.com
首页 > 其他好文 > 详细

1.3.29

时间:2018-05-19 17:13:29      阅读:164      评论:0      收藏:0      [点我收藏+]

标签:imp   last   next   --   temp   use   bool   private   ble   

question:

write a queue implementation that uses a cicular linked list, which is the same as a linked list except that no links are nul and the value of last.next is first whenever the list is not empty. keep only one node instance variable(last).

answer:

import edu.princeton.cs.algs4.*;

public class Queue<Item>
{
    private Node last = null;
    private int n = 0;
    
    private class Node 
    {
        Item item;
        Node next;
    }
    
    public boolean isempty()
    {
        return last == null;
    }
    
    public int size()
    {
        return n;
    }
    
    public void enqueue(Item item)
    {
        if(last == null)
        {
            last = new Node();
            last.item = item;
            last.next = last;//形成循环
            n++;
            return;
        }
            Node node = new Node();
            node.item = item;
            node.next = last.next;
            last.next = node;
            last = node;//注意,刚进入队列的才是队尾
            n++;
            StdOut.println("last " + last.item);
            return;
    }
    
    public Item dequeue()//先进先出
    {
        if(this.isempty())
        {
            return null;
        }
        if(this.size() == 1)
        {
            Item item = last.item;
            last = null;
            n--;
            return item;
        }
        Node current = last.next.next;
        Node temp = last.next;
        last.next = current;
        n--;
        return temp.item;
    }
    
    public static void main(String[] args)
    {
        Queue<String> queue = new Queue<String>();
        int size = queue.size();
        StdOut.println("the size is " + size);
        while(!StdIn.isEmpty())//CTRL + d在linux下终止输入
        {
            String item = StdIn.readString();
            if(!item.equals("-"))
            {
                queue.enqueue(item);
            }
            else if(!queue.isempty())
            {
                StdOut.print(queue.dequeue() + " ");
            }
        }
        
        StdOut.println(queue.size() + " left on the queue");
    }
    
}

 

1.3.29

标签:imp   last   next   --   temp   use   bool   private   ble   

原文地址:https://www.cnblogs.com/w-j-c/p/9060532.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!