1.知识储备
2.程序设计
3.代码实现
package Queue;
import java.util.Iterator;
public class Queue<T> implements Iterable<T> {
//记录首节点
private Node head;
//记录最后一个节点
private Node last;
//记录节点个数
private int N;
//构造方法,初始化队列
public Queue() {
// TODO Auto-generated constructor stub
this.head=new Node(null, null);
this.last=null;
this.N=0;
}
private class Node{
T item;
Node next;
//节点类构造方法
public Node(T item,Node next) {
// TODO Auto-generated constructor stub
this.item=item;
this.next=next;
}
}
//判断当前队列是否为空
public boolean isEmpty(){
return N==0;
}
//获取当前队列的元素个数
public int size() {
return N;
}
//出队操作
public T OutQueue(){
//1.首先判断队列是否为空
//2.如果为空则之间返回null
//3.如果不为空,则返回首节点后第一个元素,并将首节点指向第一个元素的下一个元素即可
if(isEmpty()){
return null;
}
else{
Node curr=head.next;
head.next=curr.next;
//元素个数-1
N--;
//出队列其实是在删除元素,如果元素都删除完了,则需要重置last为Null
if(isEmpty()){
last=null;
}
return curr.item;
}
}
//入队操作
public void InQueue(T item){
//1.判断当前尾节点last是否为null,如果为null则说明这是个空队列,则需要让尾节点last存储数据,在让头节点指向尾节点
if(last==null){
last=new Node(item,null);
head.next=last;
}
else{
//如果当前尾节点last不为null,则说明队列中又元素,此时只需要把新节点链接到尾节点后即可
//创建一个节点用来存储当前尾节点
Node oldlast=last;
last=new Node(item,null);
oldlast.next=last;
}
//元素个数+1
N++;
}
/*实现遍历操作
* (non-Javadoc)
* @see java.lang.Iterable#iterator()
*/
@Override
public Iterator<T> iterator() {
// TODO Auto-generated method stub
return new QIterator();
}
private class QIterator implements Iterator{
private Node n; //获取当前节点
public QIterator() {
// TODO Auto-generated constructor stub
this.n=head; //初始化当前节点
}
@Override
public boolean hasNext() {
// TODO Auto-generated method stub
return n.next!=null;
}
@Override
public Object next() {
// TODO Auto-generated method stub
n=n.next;
return n.item;
}
}
}
4.测试类:
package Queue;
public class QueueTest {
public static void main(String[] args) {
//创建一个队列
Queue<String> que1=new Queue<String>();
//入队列操作
que1.InQueue("a");
que1.InQueue("b");
que1.InQueue("c");
que1.InQueue("d");
que1.InQueue("e");
que1.InQueue("f");
que1.InQueue("g");
//遍历队列
for(String str:que1){
System.out.print(str+"->");
}
//打印元素个数
System.out.println("\n元素个数是:"+que1.size());
System.out.println("--------------------------------------------");
//出队列操作
int n=que1.size();
for(int i=0;i<n;i++){
System.out.println("元素"+que1.OutQueue()+"出队列");
}
//打印元素个数
System.out.println("\n元素个数是:"+que1.size());
System.out.println("--------------------------------------------");
}
}
5.运行结果:
版权声明:本文为regens原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。