1.队列的概念
只允许在一端插入数据操作,在另一端进行删除数据操作的特殊线性表;进行插入操作的一端称为队尾(入队列),进行删除操作的一端称为队头(出队列);队列具有先进先出(FIFO)的特性。无论哪一种栈他都需要入队(offr)出队(poll)返回队首元素(peek)因此应该设计队列为借口。
具体实现:
//MyQueue的实现:
package datastructure;
import java.util.NoSuchElementException;
public class MyQueue<E> implements queue<E>{
//此处属于内部类 成员内部类
private class Node {
E val;
Node next;
public Node(E val) {
this.val=val;
}
}
//当前队伍大小
private int size;
private Node haed;
private Node tail;
@Override
public void offer(E val) {
Node node=new Node(val);
if (haed==null){
haed=tail=node;
}else {
//不为空
tail.next=node;
tail=node;
}
size++;
}
@Override
public E poll() {
if (isEmpty()){
throw new NoSuchElementException("queue is empty cannt poll!!!");
}
E val = haed.val;
Node node =haed;
haed=haed.next;
node.next=null;
size--;
return val;
}
@Override
public E peek() {
if (isEmpty()){
throw new NoSuchElementException("queue is empty cannt peek!!!");
}
return haed.val;
}
@Override
public boolean isEmpty() {
return size==0;
}
@Override
public String toString() {
StringBuilder stringBuilder=new StringBuilder("【");
for (Node i= haed; i!=null;i=i.next) {
stringBuilder.append(i.val);
if (i.next!=null){
stringBuilder.append(",");
}
}
stringBuilder.append("】");
return stringBuilder.toString();
}
}
//接口的实现
package datastructure;
public interface queue <E>{
//设置一个泛型借口可以接收所有类
//入队
void offer (E val);
//出队
E poll();
//返回队首元素
E peek();
//判断队列是否为空
boolean isEmpty();
}