Skip to content

Commit 4ce4df2

Browse files
Add files via upload
1 parent aa323de commit 4ce4df2

File tree

1 file changed

+99
-0
lines changed

1 file changed

+99
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
// 实现循环队列 阿里面试题
2+
3+
// Runtime: 32 ms, faster than 84.47% of C++ online submissions for Design Circular Queue.
4+
// Memory Usage: 16.5 MB, less than 72.73% of C++ online submissions for Design Circular Queue.
5+
6+
class MyCircularQueue
7+
{
8+
public:
9+
/** Initialize your data structure here. Set the size of the queue to be k. */
10+
MyCircularQueue(int k) : data(k + 1, 0)
11+
{
12+
front = 0;
13+
rear = 0;
14+
}
15+
16+
/** Insert an element into the circular queue. Return true if the operation is successful. */
17+
bool enQueue(int value)
18+
{
19+
if (!isFull())
20+
{
21+
rear = (rear + 1) % data.size();
22+
data[rear] = value;
23+
24+
return true;
25+
}
26+
else
27+
{
28+
return false;
29+
}
30+
}
31+
32+
/** Delete an element from the circular queue. Return true if the operation is successful. */
33+
bool deQueue()
34+
{
35+
if (!isEmpty())
36+
{
37+
front = (front + 1) % data.size();
38+
return true;
39+
}
40+
else
41+
{
42+
return false;
43+
}
44+
}
45+
46+
/** Get the front item from the queue. */
47+
int Front()
48+
{
49+
if (!isEmpty())
50+
{
51+
return data[(front + 1) % data.size()];
52+
}
53+
else
54+
{
55+
return -1;
56+
}
57+
}
58+
59+
/** Get the last item from the queue. */
60+
int Rear()
61+
{
62+
if (!isEmpty())
63+
{
64+
return data[rear];
65+
}
66+
else
67+
{
68+
return -1;
69+
}
70+
}
71+
72+
/** Checks whether the circular queue is empty or not. */
73+
bool isEmpty()
74+
{
75+
return rear == front;
76+
}
77+
78+
/** Checks whether the circular queue is full or not. */
79+
bool isFull()
80+
{
81+
return (rear + 1) % data.size() == front;
82+
}
83+
private:
84+
int front; // 头部索引
85+
int rear; // 尾部索引
86+
87+
vector<int> data; // 数据存储
88+
};
89+
90+
/**
91+
* Your MyCircularQueue object will be instantiated and called as such:
92+
* MyCircularQueue* obj = new MyCircularQueue(k);
93+
* bool param_1 = obj->enQueue(value);
94+
* bool param_2 = obj->deQueue();
95+
* int param_3 = obj->Front();
96+
* int param_4 = obj->Rear();
97+
* bool param_5 = obj->isEmpty();
98+
* bool param_6 = obj->isFull();
99+
*/

0 commit comments

Comments
 (0)