/*
*@date:08-07-08
*@descript:链队列的实现与应用
**/
public class LinQueue
{
private Node front;//队头
private Node rear;//对尾
public LinQueue()//构造函数,置空队列
{
front=rear=null;
}
public boolean isEmpty()//判断是否为空队列
{
return front==null && rear==null;
}
public void EnQueue(Object obj)//入队
{
Node p=new Node(null);
p.setElement(obj);
p.setNext(null);
if(!isEmpty())//判断是否为空
{
front=rear=p;//将数据插入到空队列
}else
{
rear.setNext(p);//将P链到队尾节点后
rear=p;//队尾指针指向新的队尾
}
}
public Object DeQueue()
{
Object ret=null;
Node p=new Node(null);
if(!isEmpty())
{
p=front;
ret=p.getElement();
front=p.getNext();
if(rear==p)//如果原队中只有一个节点,删除后则变空
{
rear=null;
}
}else
{
System.out.println ("队列为空!");
}
return ret;
}
public Object getHead()
{
Object ret=null;
if(!isEmpty())
{
ret=front.getElement();
}else
{
System.out.println ("队列为空!");
}
return ret;
}
public static void main(String[] args)
{
SeqQueue myQueue=new SeqQueue();//初始化队列的空间大小为 5
int[] data={1,3,5,7,9,11};
try{
System.out.print ("入队元素序列为:");
//将数据入队
for (int i = 0; i<data.length; i++)
{
myQueue.EnQueue(new Integer(data[i]));
System.out.print (data[i]+" ");
}
System.out.println ("");
System.out.println("当前队头元素为:"+myQueue.getHead());
System.out.print ("出队元素序列为:");
//将数据出队
while(!myQueue.isEmpty())
{
System.out.print(myQueue.DeQueue()+" ");
}
System.out.println ();
}
catch (Exception ex) {
ex.printStackTrace();
}
}
}
class Node
{
Object element;//数据元素
Node next;//下一个节点的对象引用
public Node(Node nextval)//用于头节点的构造函数
{
next=nextval;
}
public Node(Object obj,Node nextval)
{
element=obj;
next=nextval;
}
public Node getNext()//获取下个节点
{
return next;
}
public void setNext(Node nextval)//置next
{
next=nextval;
}
public Object getElement()//取element
{
return element;
}
public void setElement(Object obj)//设置元素
{
element=obj;
}
public String toString()//装换element为String 类型
{
return element.toString();
}
}
数据结构之链队列
最新推荐文章于 2022-10-18 12:02:49 发布