为了实现队列,我们可以使用动态数组和指向队列头部的索引。
如上所述,队列应支持两种操作:入队和出队。入队会向队列追加一个新元素,而出队会删除第一个元素。 所以我们需要一个索引来指出起点。
#include <iostream>
class MyQueue {
private:
// store elements
vector<int> data;
// a pointer to indicate the start position
int p_start;
public:
MyQueue() {p_start = 0;}
/** Insert an element into the queue. Return true if the operation is successful. */
bool enQueue(int x) {
data.push_back(x);
return true;
}
/** Delete an element from the queue. Return true if the operation is successful. */
bool deQueue() {
if (isEmpty()) {
return false;
}
p_start++;
return true;
};
/** Get the front item from the queue. */
int Front() {
return data[p_start];
};
/** Checks whether the queue is empty or not. */
bool isEmpty() {
return p_start >= data.size();
}
};
int main() {
MyQueue q;
q.enQueue(5);
q.enQueue(3);
if (!q.isEmpty()) {
cout << q.Front() << endl;
}
q.deQueue();
if (!q.isEmpty()) {
cout << q.Front() << endl;
}
q.deQueue();
if (!q.isEmpty()) {
cout << q.Front() << endl;
}
}
#包括<iostream>
MyQueue类{
私人:
//存储元素
向量<int>数据;
//指示起始位置的指针
内部启动;
公众:
MyQueue(){p_start=0;}
/**将元素插入队列。如果操作成功,则返回true。*/
布尔排队(整数x){
数据。向后推(x);
返回真值;
}
/**从队列中删除元素。如果操作成功,则返回true。*/
布尔出列(){
如果(isEmpty()){
返回false;
}
pústart++;
返回真值;
};
/**从队列中获取前端项。*/
内部前端(){
返回数据[p_start];
};
/**检查队列是否为空。*/
bool isEmpty(){
return p_start>=data.size();
}
};
int主(){
我的队列q;
q、 排队(5);
q、 排队(3);
如果(!q、 isEmpty()){
无法<<q.Front()<<endl;
}
q、 出列();
如果(!q、 isEmpty()){
无法<<q.Front()<<endl;
}
q、 出列();
如果(!q、 isEmpty()){
无法<<q.Front()<<endl;
}
}