Как поменять местами первый и последний элемент очереди в C ++?

0

Я написал функцию для замены первых и последних элементов очереди в C++

void swap(queue Q)
{
queue temp;
createQ (temp);
int x,first,last;
first=dequeue(Q);
while(!isemptyQ(Q))
     {
      x=dequeue(Q);
      last=x;
      enqueue(x,temp);
     }
enqueue(last,Q);
while(!isemptyQ(temp))
      {
       x=dequeue(temp);
       if(x!=last) enqueue(x,Q);       //(if) to avoid adding last element  again
      }
enqueue(first,Q)
}

примечание: "просто рассмотреть (isempty, dequeue, createQ и enqueue) - это другие функции >> (мой первый год)"

но если последний элемент был дублирован в середине так, как если бы это были элементы очереди (5,1,9,3,9), если мы проследим эту функцию на этих элементах, это будет (9,1,3,5 ) там 9 пропавших !!

так что если есть выход из этой или любой другой идеи для функции?!

  • 0
    Не проверяйте значение, проверяйте позицию (т. Е. Индекс).
  • 0
    Как насчет использования std::deque и, возможно, std::swap .
Показать ещё 1 комментарий
Теги:
queue

2 ответа

0
Лучший ответ

Нет необходимости проверять последний, если вы его не нажимаете. Я бы предпочел сделать что-то вроде:

 while(!isemptyQ(Q))
 {
  x=dequeue(Q);
  if (isemptyQ(Q))
  {
    last=x; 
  }
  else
  {
    enqueue(x,temp);
  }
 }

enqueue(last,Q);

while(!isemptyQ(temp))
{
  x=dequeue(temp);
  enqueue(x,Q);
}

Кстати, ваш код не будет работать для пустых или 1 очереди элементов.

  • 0
    thnxxxxxxxxxxxxxxxx за идею, но сначала мне нужно взять первый элемент в параметре, чтобы поставить его в очередь после первого времени
0

Ниже приведен псевдокод, который пытается охватить все особые случаи, включая 1 или нулевые элементы в очереди

swap_first_last(q) {
  dequeue(q, x, isEmpty);
  initialize(tmp);
  first = x;
  count = 0;
  while(!isEmpty) {
    count ++;
    last = x;
    dequeue(q, x, isEmpty);
    if(!isEmpty) {
      enqueue(tmp, last);
    }
  }
  if(count == 0) return;
    enqueue(q, last);
  if(count >= 2) {
    dequeue(tmp, x, isEmpty);
    while(!isEmpty) {
      dequeue(tmp, x, isEmpty);
      if(!isEmpty) {
        enqueue(q, x);
      }
    }
    enqueue(q, first);
  }
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню