java实现循环队列、链队列基本操作(入列、出列、查找元素、队列队空)


之前写的另一篇文章关于循环队列的:
https://blog.csdn.net/qq_44871442/article/details/96639915

链队列

链队列,用链式存储结构来存储队列中的数据元素,一般采用单链表来表示,设队头指示器为front,队尾指示器rear。
这里的一个结点,简单的来说就包含两个部分,一个是数据域,用来存放存储的数据;另一个是“指针域”,用来指向下一个结点。
结点表示如下:


public class QueueNode<E>{
		private E data;		//数据类型为Object
		private QueueNode next;	
	}

private QueueNode front; //队头”指针“
private QueueNode root; //队尾”指针“

一.链队的要素

链队列有两个特殊的状态和操作!
(1)两个状态
1)队空状态
2)队满状态
不存在队列满的情况(假设内存无限大的情况下不存在)
(2)两个操作
1)元素进队操作
2)元素出队操作

二.算法实现

public class QueueL<E>{
	//链结点
	public class QueueNode<E>{
		private E data;
		private QueueNode next;	
	}
	
	private QueueNode front;
	private QueueNode rear;
	private int size;
	
	//初始化操作
	public void initQueue()
	{
		this.size = 0;
		front = rear = null;
	}
	
	//判队空
	public boolean judgeEmpty() {
		if ((front == rear) && (size == 0)) {
			return true;
		} else {
			return false;
		}
	}

	//入队列
	public void addNode(E x)
	{
		QueueNode node = new QueueNode();
		node.data = x;
		if(!judgeEmpty()){
			rear.next = node;
			rear = node;
			size++;
		}
		else
		{
			front = node;
			rear = node;
			size++;
		}
	}
	//出队列
	public E pop()
	{	
		if(!judgeEmpty()){
		QueueNode node = front;
		front = node.next;
		size--;
		if(front ==null)//只有一个元素
		{
			rear=null;
		}
		return (E) node.data;
	}
		else
			return null;
}

	public static void main(String[] args) {
		QueueL p = new QueueL();
		p.initQueue();
		long start=System.currentTimeMillis();   //获取开始时间
		for(int i = 0;i<1000;i++)
		{
			p.addNode(i);
		}		
		System.out.println("the number of elements:"+p.size);
		for(int i = 0;i<800;i++)
		{
			if(i%300==0){
			System.out.print(p.pop()+",");}
		}
		long end=System.currentTimeMillis(); //获取结束时间
		System.out.println("程序运行时间: "+(end-start)+"ms");
}
}

运行结果:(这里修改了参数i,使元素数目增多,以看到运行时间变化)
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
至此链队列和顺序队列的基本操作都已经实现,大家还可以继续探索,队列只是一种数据结构,相关性质也是我们自己规定的,比如:先进先出,大家可以实现更多的功能,使之成为不一样的**“队列”**。
链队列、顺序队列各有优缺点,大家可以更深入的去了解,并且可以利用代码跑一跑,测一测运行时间,充分了解各自利弊,以便今后更恰当地选择相应结构去实现。

  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值