- 这是一个用顺序表实现的优先队列,声明如下:
class PriorityQueue {
private:
int *Data;
int Size;
int MaxSize;
public:
PriorityQueue(int n = 100);
~PriorityQueue() { delete []Data; }
int size() const { return Size; }
bool empty() const { return Size == 0; }
void push(const int &x); // 将 x 进队列
void pop(); // 出队列
int top() const; // 取队头元素的值
};
要求补充完成其中几个函数
裁判测试程序样例:
#include<iostream>
using namespace std;
class PriorityQueue {
private:
int *Data;
int Size;
int MaxSize;
public:
PriorityQueue(int n = 100);
~PriorityQueue() { delete []Data; }
int size() const { return Size; }
bool empty() const { return Size == 0; }
void push(const int &x);
void pop();
int top() const;
};
/* 请在这里填写答案 */
int main() {
int n, x;
PriorityQueue q(100);
cin >> n;
for (int i = 0; i < n; i++) {
cin >> x;
q.push(x);
}
while (!q.empty()) {
cout << q.top() << " ";
q.pop();
}
}
输入样例:
6
60 80 70 90 40 50
结尾无空行
输出样例:
90 80 70 60 50 40
结尾无空行
AC:
PriorityQueue::PriorityQueue(int)
{
int n = 100;
Data = new int[n];
if (!Data)
return;
MaxSize = n;
Size = 0;
}
void PriorityQueue::push(const int &x)
{
if (Size <= MaxSize)
{
Data[Size] = x;
Size++;
}
}
void PriorityQueue::pop()
{
if (!empty())
{
int pos = 0;
for (int i = 1; i < Size; i++)
if (Data[i] > Data[pos])
pos = i;
if (pos != Size - 1)
Data[pos] = Data[Size - 1];
Size--;
}
}
int PriorityQueue::top() const
{
if (!empty())
{
int pos = 0;
for (int i = 1; i < Size; i++)
if (Data[i] > Data[pos])
pos = i;
return Data[pos];
}
return Data[0];
}