Сортировка связанного списка (ADT Priority Que)

Я реализую Приоритет QUE как двусвязный список. Мои структуры:

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

У вас есть идеи, как я могу это исправить?

1 ответ

Замените q->fr на q. Поэтому измените код, как показано ниже.

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

    }        
Другие вопросы по тегам