-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path622.设计循环队列.js
143 lines (136 loc) · 3.89 KB
/
622.设计循环队列.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
/*
* @lc app=leetcode.cn id=622 lang=javascript
*
* [622] 设计循环队列
*
* https://leetcode-cn.com/problems/design-circular-queue/description/
*
* algorithms
* Medium (38.54%)
* Likes: 48
* Dislikes: 0
* Total Accepted: 10.1K
* Total Submissions: 26.1K
* Testcase Example: '["MyCircularQueue","enQueue","enQueue","enQueue","enQueue","Rear","isFull","deQueue","enQueue","Rear"]\n' +
'[[3],[1],[2],[3],[4],[],[],[],[4],[]]'
*
* 设计你的循环队列实现。 循环队列是一种线性数据结构,其操作表现基于
* FIFO(先进先出)原则并且队尾被连接在队首之后以形成一个循环。它也被称为“环形缓冲器”。
*
*
* 循环队列的一个好处是我们可以利用这个队列之前用过的空间。在一个普通队列里,一旦一个队列满了,我们就不能插入下一个元素,即使在队列前面仍有空间。但是使用循环队列,我们能使用这些空间去存储新的值。
*
* 你的实现应该支持如下操作:
*
*
* MyCircularQueue(k): 构造器,设置队列长度为 k 。
* Front: 从队首获取元素。如果队列为空,返回 -1 。
* Rear: 获取队尾元素。如果队列为空,返回 -1 。
* enQueue(value): 向循环队列插入一个元素。如果成功插入则返回真。
* deQueue(): 从循环队列中删除一个元素。如果成功删除则返回真。
* isEmpty(): 检查循环队列是否为空。
* isFull(): 检查循环队列是否已满。
*
*
*
*
* 示例:
*
* MyCircularQueue circularQueue = new MycircularQueue(3); // 设置长度为 3
*
* circularQueue.enQueue(1); // 返回 true
*
* circularQueue.enQueue(2); // 返回 true
*
* circularQueue.enQueue(3); // 返回 true
*
* circularQueue.enQueue(4); // 返回 false,队列已满
*
* circularQueue.Rear(); // 返回 3
*
* circularQueue.isFull(); // 返回 true
*
* circularQueue.deQueue(); // 返回 true
*
* circularQueue.enQueue(4); // 返回 true
*
* circularQueue.Rear(); // 返回 4
*
*
*
*
* 提示:
*
*
* 所有的值都在 0 至 1000 的范围内;
* 操作数将在 1 至 1000 的范围内;
* 请不要使用内置的队列库。
*
*
*/
/**
* Initialize your data structure here. Set the size of the queue to be k.
* @param {number} k
*/
var MyCircularQueue = function(k) {
this.len = k;
this.value = [];
};
/**
* 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.value.length === this.len) return false;
this.value.push(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.value.length === 0) return false;
this.value.splice(0, 1);
return true;
};
/**
* Get the front item from the queue.
* @return {number}
*/
MyCircularQueue.prototype.Front = function() {
return this.value.length ? this.value[0] : -1;
};
/**
* Get the last item from the queue.
* @return {number}
*/
MyCircularQueue.prototype.Rear = function() {
const len = this.value.length;
return len ? this.value[len - 1] : -1;
};
/**
* Checks whether the circular queue is empty or not.
* @return {boolean}
*/
MyCircularQueue.prototype.isEmpty = function() {
return !this.value.length;
};
/**
* Checks whether the circular queue is full or not.
* @return {boolean}
*/
MyCircularQueue.prototype.isFull = function() {
return this.value.length === this.len;
};
/**
* Your MyCircularQueue object will be instantiated and called as such:
* var obj = new MyCircularQueue(k)
* var param_1 = obj.enQueue(value)
* var param_2 = obj.deQueue()
* var param_3 = obj.Front()
* var param_4 = obj.Rear()
* var param_5 = obj.isEmpty()
* var param_6 = obj.isFull()
*/