2015-10-28 45 views
0

我已經創建了一個隊列類,並且我有一個隊列,並且我想將其反轉,但是當我實現該功能時,它不顯示任何內容。 這是它如何反轉隊列並將其顯示出來

void reverse(Queue <T> &queue) { 
    if(!queue.empty()) 
    { 
     int temp=queue.queue_front; 
     queue.pop(queue.queue_front); 
     reverse(queue); 
     queue.push(temp); 
    } 
} 

我使用POP功能需要一個值,這就是爲什麼有queue.queue_front.I'm試圖用recursion.Here是我的打印功能做

void display() { 
    for(int current = queue_front+1; current < queue_length; current++) 
    { 
     cout << "[" << current << "]=" << queue_array [current] << " "; 
    } 
} 

現在這就是我在主函數

Queue <int>queue1(10); 
queue1.push(16); 
queue1.push(14); 
queue1.push(6); 
queue1.push(60); 
queue1.reverse(queue1); 
queue1.display(); 

這裏正在做年代流行功能

void pop(T& item) { 
    if (empty()) { 
     cout << "The Queue is empty!"; 
     exit(1); 
    } 
    else { 
     queue_front = (queue_front + 1) % queue_size; 
     item = queue_array[queue_front]; 
     queue_length--; 
    } 
} 

它不顯示任何內容。謝謝。

+0

反向不必與遞歸因此任何方法會奏效。 – ander

+0

temp應該是T,而不是int,因爲你需要T隊列。我沒有看到任何逆向函數的問題。 'int current = queue_front + 1'似乎是錯的,但是因爲你沒有顯示Queue的實現,它可能不是。我不喜歡pop和reverse的界面,因爲它們是成員函數,並且不需要傳入的隊列。 –

+1

顯示器是否在不反轉它的情況下工作? –

回答

0

您正在測試一個整數隊列,它隱藏了很多錯誤。
您應該使用Queue<std::string>進行測試。

首先,在這裏:

int temp=queue.queue_front; 

您要保存指數,而不是元素。
你打算什麼必須

T temp = queue.queue_array[queue.queue_front]; 

,但沒有任何理由亂用成員變量(見下文)。

這裏,

queue.pop(queue.queue_front); 

你傳遞到隊列的成員參考,pop
參數pop是頂部元素彈出後存儲的位置。

換言之,該行後,queue.queue_front將是元件這是在隊列中,而不是隊列的新的前的索引的前面。

這可能會工作:

void reverse(Queue <T> &queue) { 
    if(!queue.empty()) 
    { 
     T temp; 
     queue.pop(temp); 
     reverse(queue); 
     queue.push(temp); 
    } 
} 
+0

它運行,但它仍然不顯示任何東西。想一想原因是什麼,遞歸和顯示功能似乎是正確的。 – ander

+0

@ander您也需要擔心顯示函數中的'%queue_size',因爲隊列「環繞」了數組。另外,首先使用只有一個元素的隊列進行測試,然後展開測試用例。 (你是否真的單獨測試了'pop'?操作的順序看起來很奇怪。) – molbdnilo

+0

遞歸不會顯示一個元素,pop函數我不確定它是否正常工作 - 當我有三個元素和彈出一個然後它只顯示第二個,而不是第三個。另外索引不會改變 - [1]元素保持[1]。 – ander

相關問題