Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

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
Lines changed: 99 additions & 0 deletions
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)

AltStyle によって変換されたページ (->オリジナル) /