📅  最后修改于: 2023-12-03 15:28:40.333000             🧑  作者: Mango
问题19是2006年门槛GATE IT的一个编程问题。该问题要求你实现一种数据结构 - 队列。
队列是一种线性数据结构,它支持从一端插入数据,从另一端删除数据的操作。这个两端就是队列的头和尾。
队列具有“先进先出”(FIFO)的特点,即,先进入队列的元素,会先被删除。
在该问题中,你需要实现如下三种操作:
enqueue(element)
: 将元素插入队列的尾部dequeue()
: 删除并返回队列头(第一个元素)front()
: 返回队列头该问题的评分标准非常简单:
队列可以使用数组或链表实现。简单起见,我们在这里只介绍基于数组的实现方法。
首先,你需要为队列分配一段内存,这段内存的大小可以在初始化时确定。
在这里,我们使用两个变量head
和tail
分别指向队列头部和尾部,size
表示队列的大小,而data
数组则是存储元素的容器。
class Queue {
protected:
int head;
int tail;
int size;
int *data;
public:
Queue(int s) {
head = tail = 0;
size = s;
data = new int[size];
}
~Queue() {
delete[] data;
}
void enqueue(int element) {
if (tail == size) {
cout << "Error: Queue is full\n";
return;
}
data[tail++] = element;
}
int dequeue() {
if (head == tail) {
cout << "Error: Queue is empty\n";
return -1;
}
return data[head++];
}
int front() {
if (head == tail) {
cout << "Error: Queue is empty\n";
return -1;
}
return data[head];
}
};
上述代码中,enqueue
函数向队列末尾添加元素,如果队列已满,则返回错误信息。dequeue
函数删除队列头部元素,并返回删除的元素,如果队列为空,则返回错误信息。front
函数返回队列头部元素(不删除),如果队列为空,则返回错误信息。
该问题较为简单,但是实现时需要注意以下几点:
如果你能够熟练地实现队列,那么对于日常编程中对线性数据结构的常见场景,如队列,栈等,你也能够游刃有余。