2013-02-16 207 views
0

所以c排隊,排序順序

複製的元素,如果我有一個隊列

a --> b --> NULL; 

,當我使用功能

void duplicate(QueueNodePtr pHead, QueueNodePtr *pTail) 

它會給

a --> a --> b --> b --> NULL 

我不能用ju排序來解決我的問題尾巴的參考。

我所能做的就是

a --> b --> a --> b --> NULL 

你會怎麼處理這個?

基本代碼是好的,但我需要的是提示,

謝謝!

+0

隊列都是關於插入順序,所以你不應該能夠與篡改。此外,請將您的標記更改爲C++而不是c – 2013-02-16 23:54:04

+0

在您的問題中,** a - > a - > b - > b - > NULL **'雙星號表示什麼? – Ganesh 2013-02-16 23:57:21

+0

爲什麼選擇C++?我工作在C – user1420929 2013-02-17 04:59:35

回答

0

如果你能找出在隊列(N)元素的數量,那麼你可以簡單做到以下幾點:

for i = 1 to N 
    e = remove(queue) 
    insert(queue, e) 
    insert(queue, e) 

您將獲得每個元素使用隊列操作複製。

如果你想直接操作數據,那麼它不再是一個隊列 - 它是一個(鏈接)列表。

+0

我想刪除它並把它放回去,我想這是唯一的方法。非常感謝! – user1420929 2013-02-17 05:00:19

0

難道你不能從隊列中彈出物品,並將它們兩次推入新的隊列?

編輯:如果您需要原始隊列來存儲結果,什麼阻止您將這些項目從臨時隊列中彈出並推回到原始隊列中。

0

我有以下這短暫的僞代碼試圖實現自己的目標

void duplicateQueue(QueueNode *head, QueueNode *tail) 
{ 
    QueueNode *curr; 
    QueueNode *node; 

    //Initialize curr to head 
    curr = head 
    do 
    { 
     // Create a new node 
     node = (QueueNode *) malloc(sizeof(QueueNode)); 

     // Initilaize the node 
     node->data = curr->data; 

     // Create link from node to curr->next 
     node->next = curr->next; 

     //Create a link from current to new node 
     curr->next = node; 

     // move current to next original element 
     curr = node->next; 

    }while(curr != NULL); 

}

+0

謝謝,但頭必須通過價值! – user1420929 2013-02-17 05:05:29

+0

@ user1420929對不起,我沒有收到您的評論。頭部價值的參考必須通過。還是你的意思是說你想從整個系列的某個中間點複製? – Ganesh 2013-02-17 07:24:18