上面应该是一个双向循环队列, public en(Object item):入队列 public dl():出队列 public peek():返回对列第一个元素,但不删除 public xempty():队列是否为空 public clear():清空队列 public 最后一个是取得队列中的元素个数
呵呵,我来说两句吧这个类是一个队列,是一个基本的数据结构(楼主可以找本数据结构的书看看),抽象一个先进先出的数据结构 这个队列是一个链表结构,就好象一个个元素是用铁链连起来的队列里的每一个元素是Node类的对象,这个类是一个内部类定义在Queue类的最后。 每一条语句都给你讲解好象要求是过分了点,我打字速度又不够快,我大概说一下有问题你再问吧Node类有三个成员,Data是本身元素所包含的数据内容,prev是用来指向前一个元素,next指向下一个元素。 首先这个队列定义了列头(Node head)和列尾(Node tail)。构造函数是初始化,head元素的前向结点为空,tail元素的后继结点也是空,然后head元素指向tail元素,即这个队列只有头和尾结点 public void en(Object item)这个方法是把item元素家加进队列,是在队列尾部加 public Object dl()是用来出队列的,把队列的第一个元素从队列删除并返回 public Object peek()是用来返回队列的第一个元素,和dl()不同的是这个方法只返回值不从队列删除元素 public boolean empty()用来判断队列里是否没有任何元素 public void clear()清空队列里的所有元素,恢复初始状态 public int elemNum()返回队列中的元素个数呵呵,打得好累,你在自己研究一下把 我强烈建议楼主看看数据结构,补补基本功
public en(Object item):入队列
public dl():出队列
public peek():返回对列第一个元素,但不删除
public xempty():队列是否为空
public clear():清空队列
public 最后一个是取得队列中的元素个数
你好!可以详细点吗?可能分数对你来说不重要,但请帮帮忙:)
{
private Node head; //?
//队列的头节点
private Node tail; //?
//队列的尾节点
public Queue()
{
head = new Node();
tail = new Node();
head.prev = tail.next = null; //?
//第一个节点没有前一个节点,最后一个节点没有下一个节点,所以因为null
head.next = tail; //?
//因为目前只有两个节点,所以头节点的下一个就是尾节点
tail.prev = head; //?
//尾节点的上一个节点就是头节点
}
public void en(Object item) //这个方法作用是?
//该方法在末尾插入一个节点,这里可以看出,头节点和尾节点本身不保存数据
{
Node q = new Node(); //?
//生成一个新的节点
q.data = item; //?
//节点的数据赋值
q.next = tail; //?
//该节点的下一个节点为尾节点
q.prev = tail.prev; //?
//该节点的前一个节点为原来的最好一个节点(也就是尾节点的前一个节点)
tail.prev.next = q; //?
//原来的最后一个节点的下一个节点是尾节点,现在改为新插入的节点
tail.prev = q; //?
尾节点的上一个节点是新插入的节点
}
public Object dl() //这个方法作用是?
//删除一个节点,从开头出删除
{
if(! empty()){
Node p = head.next; //?
head.next.next.prev = head; //?
head.next = head.next.next; //?
return p.data; //?
}else
return null;
}
public Object peek() //这个方法作用是?
//返回第一个节点的数据
{
if(! empty())
return head.next.data; //?
else
return null;
}
public boolean empty() //这个方法作用是?
//链表是否为空
{
return (head.next==tail) || (tail.prev==head); //?
}
public void clear() //这个方法作用是?
//将链表置为空
{
head.next = tail; //?
tail.prev = head; //?
}
public int elemNum() //这个方法作用是?
//返回链表的元素个数
{
int num = 0;
for(Node q=head.next; q!=tail; q=q.next) //?
num++;
return num;
}
private class Node
{
Object data; //? 数据
Node prev; //? 前项指针
Node next; //? 后项指针
}
}实在没有必要都回答,是一个简单的双向链表,只有学过数据结构就非常简单了
这个队列是一个链表结构,就好象一个个元素是用铁链连起来的队列里的每一个元素是Node类的对象,这个类是一个内部类定义在Queue类的最后。
每一条语句都给你讲解好象要求是过分了点,我打字速度又不够快,我大概说一下有问题你再问吧Node类有三个成员,Data是本身元素所包含的数据内容,prev是用来指向前一个元素,next指向下一个元素。
首先这个队列定义了列头(Node head)和列尾(Node tail)。构造函数是初始化,head元素的前向结点为空,tail元素的后继结点也是空,然后head元素指向tail元素,即这个队列只有头和尾结点
public void en(Object item)这个方法是把item元素家加进队列,是在队列尾部加
public Object dl()是用来出队列的,把队列的第一个元素从队列删除并返回
public Object peek()是用来返回队列的第一个元素,和dl()不同的是这个方法只返回值不从队列删除元素
public boolean empty()用来判断队列里是否没有任何元素
public void clear()清空队列里的所有元素,恢复初始状态
public int elemNum()返回队列中的元素个数呵呵,打得好累,你在自己研究一下把
我强烈建议楼主看看数据结构,补补基本功
本人是初学者,确实很多东西不懂,但我有信心学好!不过以后还要多多向大家请教啊!alaal(~:寒~:冬:~)
jtree()
两位的分在这贴给了.以下两位朋友,请到新帖领分.treeroot(根根)
http://community.csdn.net/Expert/topic/3535/3535520.xml?temp=.9534723jFresH_MaN(absoluteFresh)
http://community.csdn.net/Expert/topic/3535/3535525.xml?temp=.6307794