gpt4 book ai didi

c - 排序链表(ADT优先级队列)

转载 作者:行者123 更新时间:2023-11-30 17:37:33 25 4
gpt4 key购买 nike

我正在将 Priority 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

您有什么想法可以解决这个问题吗?

最佳答案

将 q->fr 替换为 q。因此更改代码如下。

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

}

关于c - 排序链表(ADT优先级队列),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22354489/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com