2013-12-22 204 views
0

我写了一个函数来交换在C队列的第一个和最后一个元素++如何在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,出列,createQ和排队)的其他功能>>(我的第一年)”

但是如果最后一个元素在中间被复制,如果这是队列元素(5,1,9,3,9) 如果我们在这些元素上跟踪该函数,它将是(9 ,1,3,5) 有9个失踪!

所以如果有一个逃避或任何其他想法的功能?!

+0

不检查值1个或零元素,检查是否有* *位置(即一个索引)的伪代码。 –

+0

怎么样,使用'std :: deque'或者'std :: swap'。 –

+0

你最好不要在'temp'中放入最后一个元素。从Q出列,然后检查_isempty_。 –

回答

0

无需检查最后,如果你不推it.o我宁愿做这样的事情:

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 对于想法 但首先我需要采取参数中的第一个元素在第一次之后入队 – saba7o0o

0

下面是试图覆盖所有特殊情况下,包括在队列

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); 
    } 
} 
相关问题