C++ 数据结构队列:使用 for 循环查找队列中最大的元素



我需要在未排序的队列中找到最大的元素,将其删除并将其存储在辅助队列中,然后将其作为主队列中的第一个元素放回原处,而无需使用 C++ 中的标准队列函数。

我尝试使用for循环遍历队列并搜索最大的元素,但它不起作用。关于如何正确完成的任何建议?

//The queue was created as a class as follows:
class Queue{
private:
int arrayqueue[size];
int start, end, counter;
public:
Queue();
bool empty();
bool full();
bool insert(int item);
bool remove();
bool front(int &item);
int counter_size();
void copy(Queue &F);
bool equal(Queue &F);
void print();
int largest_value(Queue &F,int n);
};
Queue::Queue(){
counter = 0;
start = 0;
end = size -1;
} 

这是我尝试构建的函数,用于查找队列中最大的元素并存储在辅助队列中:

//Create an auxiliary queue
//Find the largest element in the main queue, then remove it and insert it in the aux queue
int Queue::largest_value(Queue &F,int n){
//int *Queue;
// n is the size of the queue
Queue aux; 
int largest = Queue[0];
for(int i = 1;i <n; i++) {
if(largest < Queue[i])
largest = Queue[i];
}
F.remove();
aux.insert(largest);
return largest;
}

验证它是否为空的函数:

bool Queue::empty(){
if(counter == 0)
return true;
else
return false;
}

删除元素的功能:

bool Queue::remove(){
if(empty()==true)
return false;
if(start==size-1)
start = 0;
else
start++;
counter--;
return true;
}

尝试类似这样的事情:

class Queue{
private:
int arrayqueue[size];
int ... counter;
public:
...
bool remove_largest_value(int &value);
};
...
bool Queue::remove_largest_value(int &value) {
if (counter == 0)
return false;
int largest = 0;
for(int i = 1; i < counter; ++i) {
if (arrayqueue[largest] < arrayqueue[i])
largest = i;
}
value = arrayqueue[largest];
for(int i = largest + 1; i < counter; ++i) {
arrayqueue[i-1] = arrayqueue[i];
}
--counter;
return true;
}

然后你可以这样做:

Queue main;
// populate main as needed...
Queue aux; 
int item;
if (main.remove_largest_value(item))
{
aux.insert(item);
...
main.insert(item);
}

最新更新