2013-12-22 78 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); 
    } 
} 
相關問題