算法1.3 先进先出队列(algs4)

                                算法1.3先进先出队列API

public class Queue<Item> implements Iterable<Item>

private Node first                指向最早添加的节点的链接

private Node last                指向最近添加的节点的链接

private int N

private class Node

Item it em

Node next                                                              

     

 

 

 

 

 

private class ListIterator implements Iterator<Item>    

private Node current=first

@Override

                   public boolean hasNext()

@Override

                   public Item next()

public boolean isEmpty()

public int size()

public void enqueue (Item item)                   入队,尾插法。

public Item dequeue()                      出队,同出栈。特别的,队为空时要把last指向null

@Override

         public Iterator<Item> iterator()                      返回一个迭代器

                                                                                           入队

                                              

                                                                                                     出队

                                      


package _1_3linkedList;

import java.util.Iterator;

/*算法1.3 先进先出队列
*/
public class Queue<Item> implements Iterable<Item>
{
	private Node first;            /*指向最早添加的节点的链接*/
	private Node last;              /*指向最近添加的节点的链接*/
	private int N;                /*队列中的元素数量*/
	private class Node
	{
		Item item;
		Node next;
	}
	public boolean isEmpty()
	{
		return N==0;                    /*or first==null*/
	}
	public int size()
	{
		return N;
	}
	public void enqueue (Item item)          /*入队,尾插法。*/
	{
		Node oldlast=last;
		last=new Node();                      /*创建一个节点,准备入队*/
		last.item=item;
		if(isEmpty())                         /*进行判断*/
			first=last;                      /*第一个元素入队之前,first和last指向同一个节点*/
		else
			oldlast.next=last;
		N++;
	}
	public Item dequeue()              /*出队,同出栈。特别的,队为空时要把last指向null*/
	{
		Item item=first.item;
		first=first.next;
		N--;
		if(isEmpty())                   /*进行判断*/
			last=null;                  /*避免游离(覆盖掉无用的引用并回收无用的对象的内存)*/
		return item;
	}
	@Override
	public Iterator<Item> iterator()
	{
		return new ListIterator();       /*返回一个迭代器*/
	}
	private class ListIterator implements Iterator<Item>
	{
		private Node current=first;
		
		@Override
		public boolean hasNext()
		{
			return current!=null;
		}
		@Override
		public Item next()
		{
			Item item=current.item;
			current=current.next;
			return item;
		}
		
	}
}


package _1_3linkedList;

import java.util.Scanner;

/*算法1.3 先进先出队列-测试用例
*/
public class TestQueue
{
	public static void main(String[] args)
	{
		Queue<String> queue=new Queue<String>();
		Scanner sc=new Scanner(System.in);
		while(true)
		{
			String s=sc.nextLine();
			if(s.equals("eof"))
				break;
			if(!s.equals("-"))
				queue.enqueue(s);
			else if(!queue.isEmpty())          /*是“-”且非空时出队*/
				System.out.println(queue.dequeue());
		}
		for(String s:queue)
			System.out.println(s);
		sc.close();
	}
}


q
wer
t
y
u
-
q
-
wer
wdc
sd
eof
t
y
u
wdc
sd













评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值