JAVA实现队列 队列的链式存储结构及操作

这是一篇JAVA实现队列  队列的链式存储结构及操作实现的文章,有兴趣的可以看看。

首先还是写个接口吧,这样方法多的时候不会乱

package com.guobing.queue;

public interface Queue_Interface {

	public void init();            //初始化队列
	public void enter(Object obj); //入队列
	public Object leave();         //出对列
	public Object peek();          //返回队列的首元素
	boolean isEmpty();             //判断队列是否为空
	public void clear();           //清空队列
	public void print();           //打印队列
}

实现过程:

package com.guobing.queue;
/**
 * JAVA实现队列  队列的链式存储结构及操作
 * @author guob
 *
 */
public class LinkQueue implements Queue_Interface{

	private Node front, rear;                      //定义头指针、尾指针	
	/**
	 * 清空队列
	 */
	@Override
	public void clear() {
		front = rear = null;
		System.out.println("队列已清空");
	}

	/**
	 * 入队列
	 */
	@Override
	public void enter(Object obj) {
		if(rear == null) {                         //当队列为空时
			front = rear = new Node(obj, null);    //队尾指针和头指针相同
		} else {							       //队列不为空
			rear = rear.next = new Node(obj, null);//尾指针永远指向空
		}				
	}

	/**
	 * 初始化
	 */
	@Override
	public void init() {
		front = rear = null;	
	}

	/**
	 * 判断是否为空
	 */
	@Override
	public boolean isEmpty() {
		return front == rear;
	}

	/**
	 * 出队列
	 */
	@Override
	public Object leave() {
		if(front == null) {                        //先判断是不是为空 
			return null;
		}else {
			Node p = front;                        //先得把头指针保存起来,不然就丢了
			front = front.next;
			if(front == null)                      //需要判断是不是为空
				rear = null;                       //为空的话尾指针必须要为null
			System.out.println("执行出队列操作,出队列的元素为:" + p.date);
			return p.date;
		}
	}

	/**
	 * 返回队首元素
	 */
	@Override
	public Object peek() {
		if(front == null) {
			System.out.println("队首元素为空");
			return null;
		} else {
			System.out.println("队首元素为:" + front.date);
			return front.date;                     //不为空的时候返回头指针的值
		}					                    
	}

	/**
	 * 打印出队列中的信息
	 */
	@Override
	public void print() {
		Node p = front;
		System.out.println("当前队列中的元素为:");
		while(p != null) {				
			System.out.print(p.date + " ");
			p = p.next;
		}		
	}
	public static void main(String [] args) {
		LinkQueue lk = new LinkQueue();
		lk.init();
		lk.enter("a");
		lk.enter("b");
		lk.enter("c");
		lk.enter("d");
		lk.print();
		lk.peek();
		lk.leave();
		lk.print();
	}
}
/**
 * 定义单链表
 * @author guob
 *
 */
class Node {
	Object date;
	Node next;
	public Node(Object obj, Node nt) {
		this.date = obj;
		this.next = nt;
	}
}

测试结果:

当前队列中的元素为:
a b c d 队首元素为:a
执行出队列操作,出队列的元素为:a
当前队列中的元素为:
b c d 

完毕,有疑问可以共同探讨!欢迎交流。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值