2017-10-17 86 views
0

現在,在我的代碼隊列順序是如何更改此隊列順序?

正常節點 - >通常節點 - >項目節點 - >空

前面指出的正常節點,但我想指出的項目節點!

所以,我想改變代碼順序

項目節點 - >通常節點 - >通常節點 - >空

和我的代碼,,

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 function.In秩序..

如何更改密碼?

+1

從技術上講,如果你想要內容的特殊順序,那不再是一個隊列,那麼它就是一個有序列表。 –

+0

ooops ..!那就對了。 –

回答

0

其實在閱讀了一段關於你的代碼後,你似乎想要的是一種隊列,叫做優先隊列。讓它們保持順序的「祕訣」是在插入新節點時,從頭到尾遍歷列表以找到插入節點的位置。

在你的情況,因爲你只有兩個重點,這是更簡單:

  • 如果插入一個「正常的節點」,然後找到最後一個「項目節點」,後插入「正常節點」最後一個「項目節點」(使新的「正常節點」指針等於最後一個「項目節點」NextNode指針(帶有一個簡單的賦值),然後使最後一個「項目節點」指針指向新的「正常節點」 ,請注意操作順序很重要)

  • 如果插入「item node」,那麼只需將i t到隊列的開始。

或者上述的一些變體。

+0

哦,謝謝你。但我知道你告訴我。 但是..我不寫代碼.. 請更改代碼..請.. .. –