如何更改此队列顺序?

时间:2017-10-17 15:43:57

标签: c data-structures queue

现在,我的代码队列顺序是

  

正常节点 - >正常节点 - >项目节点 - >空

前点指出正常节点,但我想指出项目节点!

所以,我想更改代码顺序

  

项目节点 - >正常节点 - >正常节点 - >空

我的代码是,

    void LQ_CreateQueue(LinkedQueue **Queue)
{
    (*Queue) = (LinkedQueue*)malloc(sizeof(LinkedQueue));
    (*Queue)->Front = NULL;
    (*Queue)->Rear = NULL;
    (*Queue)->count = 0;
}

Node *LQ_CreateNode(int NewData)
{
    Node *NewNode = (Node*)malloc(sizeof(Node));

    if (NewData == 7) 
        NewNode->Priority = ItemBlock;
    else 
        NewNode->Priority = NormalBlock;

    NewNode->rand_value = NewData;
    NewNode->NextNode = NULL;

    return NewNode;
}

void LQ_DestroyNode(Node *_Node)
{
    free(_Node);
}

void LQ_Enqueue(LinkedQueue *Queue, Node *NewNode)
{
    if (Queue->Front == NULL)
    {
        Queue->Front = NewNode;
        Queue->Rear = NewNode;
        Queue->count++;
    }
    else
    {
        Queue->Rear->NextNode = NewNode;
        Queue->Rear = NewNode;
        Queue->count++;
    }
}

Node *LQ_Dequeue(LinkedQueue *Queue)
{
    Node *Front = Queue->Front;

    if (Queue->Front->NextNode == NULL)
    {
        Queue->Front = NULL;
        Queue->Rear = NULL;
    }
    else
    {
        Queue->Front = Queue->Front->NextNode;
    }

    Queue->count--;

    return Front;
}

int LQ_IsEmpty(LinkedQueue *Queue)
{
    return (Queue->Front == NULL);
}

帮帮我。

此代码由CreateQueue,CreateNode,DeleteNode,InsertNode,PrintNode,CheckEmptyQueue函数组成。按顺序..

如何更改该代码。?

1 个答案:

答案 0 :(得分:0)

实际上,在阅读了一些关于代码的内容之后,您似乎想要的是一种称为优先级队列的队列。 "秘密"为了使它们保持有序,在插入新节点时,您从头到尾遍历列表以找到插入节点的位置。

在您的情况下,由于您只有两个优先级,因此更简单:

  • 如果插入"正常节点"然后找到最后一个"项目节点"并插入"正常节点"在最后一个"项目节点" (使新的"正常节点" NextNode指针等于最后一个"项节点" NextNode指针(带有简单的赋值),然后创建最后一个& #34;项目节点" NextNode指针指向新的"正常节点",请注意操作顺序很重要)

  • 如果插入"项目节点"然后将其添加到队列的开头。

或上述的一些变体。