js 实现的循环队列
在 leetcode 上的题目. 实现一个循环队列, 我的实现如下
/**
* Initialize your data structure here. Set the size of the queue to be k.
* @param {number} k
*/
var MyCircularQueue = function(k) {
// 长度需要限制, 来达到空间的利用. k 代表空间的长度
this.k = k;
this._data = new Array(k);
// 指向首元素
this.font = 0;
// 指向准备插入元素的位置
this.rear = 0;
};
/**
* Insert an element into the circular queue. Return true if the operation is successful.
* @param {number} value
* @return {boolean}
*/
MyCircularQueue.prototype.enQueue = function (value) {
if (this.isFull() == true) {
return false
}
this.rear = this.rear % this.k;
this._data[this.rear++] = value;
return true
};
/**
* Delete an element from the circular queue. Return true if the operation is successful.
* @return {boolean}
*/
MyCircularQueue.prototype.deQueue = function() {
if(this.isEmpty()){
return false;
}
this.font++;
this.font = this.font % this.k;
return true;
};
/**
* Get the front item from the queue.
* @return {number}
*/
MyCircularQueue.prototype.Front = function() {
if (this.isEmpty() == true) {
return false;
}
return this._data[this.font];
};
/**
* Get the last item from the queue.
* @return {number}
*/
MyCircularQueue.prototype.Rear = function() {
if (this.isEmpty() == true) {
return false;
}
this._data[this.tail - 1];
};
/**
* Checks whether the circular queue is empty or not.
* @return {boolean}
*/
MyCircularQueue.prototype.isEmpty = function() {
return this.font == this.rear - 1;
};
/**
* Checks whether the circular queue is full or not.
* @return {boolean}
*/
MyCircularQueue.prototype.isFull = function() {
// return (this.rear + 1) % this.k == this.font;
return this.rear % this.k == this.font;
};
测试通不过, 但是感觉自己的算法实现的没问题啊. 不知道哪里出错了
给为大佬如果嫌麻烦, 能否给个清晰的思路, 感觉还是自己的思路不清晰
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
刚创建就是满的?
每次插入一个元素后
rear+1
,那么连续插入k个之后rear%k
又回到原点了,跟初始条件是一样的,根据这个判断是否是满的显然是不行的可以加一个
size
属性来记录元素数量,添加成功的时候size+1
,删除成功的时候size-1
,是满还是空直接根据size
判断, font和rear可以去掉一个,根据size和另一个算出来。以下是与功能实现无关的建议
建议取模操作在赋值的时候进行,保证rear和font的值永远是小于k的,而不是在每个引用的地方去做一次取模。还有就是个人觉得在可以保证返回值只有布尔型的情况下,
if(isFull()==true)
这种写法很多余