Сортировка связанного списка (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;
}