队列的实现(一)顺序队列的实现

本文详细介绍了队列数据结构的基本概念及其两种实现方式——数组队列和链表队列,并重点探讨了使用数组实现队列时如何通过构建循环队列解决空间利用率问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

队列:只能一端进行出栈一端进行进栈。

队首:只允许进行出栈操作,可以进行删除。

队尾:只允许进行入栈操作,可以进行插入。

队尾进,队尾出,先进先出。

所以队列的实现也有两种形式,一种是数组实现队列,一种是用链表实现队列。

首先是用数组来实现队列。

使用数组队列,因为在删除时front会越来越大,所以最后会出现一种还有空间但是却显示无空间的现象。

解决方法:

构建循环队列,算法为:

判断是否队满:(rear+1)%a.length==front  //如果相等的话则证明队列已满

rear=(rear+1)%a.length;       //创建循环

实现代码:

public class Queue {
	private static final int defaultSize = 10;
	private Node[] a;
	private int rear;
	private int front;
	Queue(){				//默认构造方法
		a = new Node[10];
		rear = 0;
		front = 0;
	}
	Queue(int n){			//指定队列长度的构造方法
		a = new Node[n];
		rear = 0;
		front = 0;
	}
	public boolean add(Node node){			//在队尾增加队列节点
		if((rear+1) % a.length == front )		//检测该对列是否已经满了
			return false;
		else{
			a[rear] = node;
			rear = (rear+1) % a.length;  	//构建循环队列	
			return true;
		}	
	}
	public Node remove(){					//删除对首节点
		if(rear == front)
			return null;
		else{
			Node n = a[front];
			front = (front+1) % a.length;
			return n;
		}	
	}
	public boolean isEmpty(){				//检测是否为空
		if(rear == front)
			return true;
		else 
			return false;
	}
	public int size(){				//返回队列长度
		return a.length;
	}
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值