2014-03-12 95 views
0

我正在實施優先級QUE作爲雙向鏈表。 我的結構:排序鏈接列表(ADT優先級排序)

typedef int kintyr; 

typedef struct qElem { 
    struct qElem *prv;   
    kintyr *dat;      
    int *priority; 
}qElem; 


typedef struct que { 
    qElem *fr,*bk;    
    int cnt;      
}que; 

這是我的函數來創建空的PQ,並插入元素:

que *qNew() 
{ 
    que *q = malloc(sizeof(*q)); 

if (q==NULL) 
    return NULL; 

q->fr = NULL; 
q->bk = NULL; 
q->cnt = 0; 


qFault = 0; 
return q; 
} 

que *qEnq(que *q, kintyr *x, int *prrt) 
{ 
    que *zn=q; 
    qFault = 0; 
    if (q == NULL) 
    { 
     qFault = 1; 
     return q; 
    } 
    if (qCHKf(q) == 1) 
    { 
     qFault = 3; 
     return q; 
    } 
    qElem *new = malloc(sizeof(*new)); 
    new->prv = NULL; 
    new->dat = x; 
    new->priority=prrt; 

    if (q->fr == NULL || q->fr->priority>prrt ) 
    { 
     new->prv=q->fr; 
     q->fr = new; 

    } 
    else 
    { 
     que *tempas=q; 
     while(tempas->fr->prv!=NULL && tempas->fr->priority<=prrt) 
      tempas=tempas->fr; 

     new->prv=tempas->fr; 
     tempas->fr=new; 
    } 
     q->cnt++; 
     return q; 

} 

如果我添加例如元素與優先級爲7,然後4它的工作好,然後5.

4->5->7 

我若優先級爲7,然後添加6元件,然後8.看來:

6->8->7 

你有什麼想法,我該如何解決這個問題?

回答

0

將q-> fr替換爲q。所以改變下面的代碼。

if (q == NULL || q->priority>prrt ) 
    { 
     new->prv=q; 
     q = new; 

    }