Steque

1.对列是需要两个节点的,first和last。 last用于入列操作
2.pop和psuh操作需要的是first、

迭代器这里需要主要,操作的时候要从新new一个Node实例,不然的话就会导致原来的first被操作。

代码:
package chapter1.a3;

import edu.princeton.cs.algs4.StdOut;
import org.jetbrains.annotations.NotNull;

import java.util.Iterator;

/**
* Created by fengjw on 2017/8/14
* Code Change The World!
*/

public class Example1332<Item> implements Iterable<Item>{


private Node first;
private Node last;

public class Node{
Item item;
Node next;
}


public boolean isEmpty(){
return first == null;
}

public void enqueue(Item item){ // thr order

Node node = new Node();
node.item = item;
node.next = null;
if (isEmpty()){
first = node;
last = node;
}else {
last.next = node;
last = node;
}
}

public void push(Item e){
Node node = new Node();
node.item = e;
if (isEmpty()){
first = node;
last = node;
node.next = null;
}else {
node.next = first;
first = node;
}
}

public Item pop(){
if (isEmpty()){
return null;
}else {
Item item = first.item;
first = first.next;
return item;
}

}

@NotNull
@Override
public Iterator<Item> iterator() {
return new Iter();
}

private class Iter implements Iterator<Item>{

private Node current = first; //"current" function is not change the LinkedList first.

@Override
public boolean hasNext() {
return current != null;
}

@Override
public Item next() {
Item item = current.item;
current = current.next;
return item;
}
}


//test
public static void main(String [] args){
Example1332<String> steque = new Example1332<>();
steque.enqueue("a");
steque.enqueue("b");
steque.enqueue("c");
steque.enqueue("d");
steque.push("e");
steque.push("f");
steque.push("g");
//StdOut.println(steque);
StdOut.println("---------------");
Iterator<String> iterator = steque.iterator();
while (iterator.hasNext()){
StdOut.println(iterator.next());
}
StdOut.println("---------------");
StdOut.println("pop up: ");
while (!steque.isEmpty()){
StdOut.println(steque.pop());
}
}


}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值