packagecom.jimmy.impl;
importcom.jimmy.QueueInterf;
publicclassLinkedDequeimplementsQueueInterf {
/**
*
* @paramargs
*/
publicclassNode {
privateTdata;
//双向
publicNodenext;
publicNodepre;
publicNode(T data, Node node) {
this.data= data;
next= node;
}
publicNode(Node last, T data, Node first) {
this.data= data;
this.pre= last;
this.next= first;
}
publicT getData() {
returndata;
}
}
//双端
publicNodefirst;// 前(端)哨兵节点,这里不同与MylinkedList的做法,并没有初始化first,last对象,仅仅把它当做引用,但仍然可以理解为哨兵
publicNodelast;// 后(端)哨兵节点
publicintlength;// 有效数据长度
// |----| |-----| |----|
// | first|--> | 4 | | 5 | | 3 |
// |----| |-----| |----|
publicLinkedDeque() {
first=null;// 这里不同与MylinkedList的做法,并没有初始化first,last对象
last=null;
}
publicstaticvoidmain(String[] args) {
LinkedDeque q = newLinkedDeque();
q.addBack(4);
q.addBack(5);
q.addBack(3);
q.display();
q.removeFront();
q.removeFront();
q.display();
}
// 相当于入队(从后面)
publicvoidaddBack(T newEntry) {
Node newNode = newNode(last, newEntry,null); //把newEntry放到last后面,即:
//newEntry.pre= last;
//newEntry.next= first;(null)
if(isEmpty())
{
first= newNode;// 仅仅把fist当做引用,所以直接赋值给first,即把newnode当做第一个first
last= newNode;
} else{
last.next= newNode;
last= newNode;
}
length++;
}
publicvoidaddFront(T newEntry) {
Node newNode = newNode(null, newEntry,first);//把newEntry放到first前面,即:
//newEntry.pre= last;(null)
//newEntry.next= first;
if(isEmpty())
{
last= newNode;// 仅仅把fist当做引用,所以直接赋值给first,即把newnode当做第一个first
} else{
first.pre= newNode;
first= newNode;
}
length++;
}
publicvoidenqueue(T newEntry) {
Node newNode = newNode(newEntry,null);
if(isEmpty())
{
first= newNode;// 仅仅把fist当做引用,所以直接赋值给first,即把newnode当做第一个first
last= newNode;
// |----|
// | first|--> | 4 |
// |----|
} else{
last.next= newNode;// 有点像C的做法
last= newNode;
}
length++;
}
//相当于出对
publicT removeFront() {
T front = null;
if(!isEmpty())
{
front = first.getData();
first=first.next;
if(first==null)
last=null;
else
first.pre=null;
}
length--;
returnfront;
}
publicT removeBack() {
T front = null;
if(!isEmpty())
{
front = first.getData();
first=first.next;
if(first==null)
last=null;
else
first.pre=null;
}
length--;
returnfront;
}
publicT dequeue() {
T front = null;
if(!isEmpty())
{
front = first.getData();
first=first.next;
}
length--;
returnfront;
}
publicT getFront() {
T front = null;
if(!isEmpty())
{
front = first.getData();
}
returnfront;
}
publicbooleanisEmpty() {
returnfirst==null;
}
publicvoidclear() {
first=null;
last=null;
}
publicintgetLength()
{
returnlength;
}
publicvoiddisplay() {
Node cur = first;// first为哨兵
while(cur !=null) {// 从一开始
// if(cur!=null)
System.out.print(cur.getData() +",");
cur = cur.next;
}
System.out.println();
}
}