2013-02-16 134 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