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

标签 c++ data-structures queue

我需要在未排序的队列中找到最大的元素,将其删除并将其存储在辅助队列中,然后将其放回主队列中的第一个元素,而无需使用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);
}

关于c++ - C++数据结构队列:使用for循环查找队列中最大的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57796092/

相关文章:

python - 使用 Python 连接到 Oracle AQ

python - 在 Python 中排队线程

c++ - 我在哪里可以下载到 GNU C++ 标准库的源代码?

c++ - vector的使用+继承

c++ - 在同一屏幕上显示两个不同的对象

c++ - 在 C++、结构或类中应该使用什么来创建链接列表

algorithm - 如何有效地存储 IP 地址和 CIDR 范围

java - 我应该使用 Java 中的哪种数据结构以有序形式存储键值对?没有重复项

ios - Alamofire 优先队列

c++ - 性能报告 (.vspx) 在 Visual Studio 2013 中未打开(显示损坏)