gpt4 book ai didi

c - 如何按 C 中的优先级对列表项进行排序?

转载 作者:太空宇宙 更新时间:2023-11-04 04:54:10 25 4
gpt4 key购买 nike

我想按用户输入的优先级对列表项进行排序,它做得很好。但是,当有多个项目具有相同的优先级时,它不会像预期的那样按到达顺序对它们进行排序。

很抱歉,如果我说得不够清楚,您无法理解。变量的名称是葡萄牙语,所以如果您有不明白的地方,请询问。

代码如下:

typedef struct pedido pedido, *ppedido;

struct pedido{
char id[5];
int prioridade;
int mesa, n_pratos;
struct prato *prato[TAM];
ppedido prox;
};

struct prato{
char id[5];
};

ppedido novo_pedido(ppedido lista)
{
ppedido novo, aux, anterior = NULL;
int i;

novo = (struct pedido*)malloc(sizeof(pedido));

if(novo == NULL){
printf("Erro na alocacao de memoria...\n");
return;
}

printf("Number of menus: ");
scanf("%d", &novo->n_pratos);

printf("Table number: ");
scanf("%d", &novo->mesa);

printf("Priority of request? ");
scanf("%d", &novo->prioridade);

printf("Introduza o ID do pedido: ");
scanf("%s", &novo->id);

for(i=0;i<novo->n_pratos;i++){
printf("ID of menu %d: ", i+1); //something like "M1, M4..." doesn't matter
scanf("%s", &novo->prato[i]);
fflush(stdin);
}

novo->prox=NULL;

if(lista == NULL || novo->prioridade > lista->prioridade) {
novo->prox = lista;
lista = novo;
}
else
{
aux = lista;

while(aux != NULL && novo->prioridade < aux->prioridade) //this is where it should be sort requests by their priority and order of arrival
aux = aux->prox;
novo->prox = aux->prox;
aux->prox = novo;
}
return lista;
}

最佳答案

我想你想改变这个:

while(aux != NULL && novo->prioridade < aux->prioridade)

收件人:

while(aux->prox != NULL && novo->prioridade <= aux->prox->prioridade)

这样它就会越过所有具有相同优先级的那些,并被放在更接近列表末尾的位置。当您遍历到列表末尾时,这将保留对 aux 的引用。

我假设您在搜索时会在找到最高优先级后立即停止搜索。

这假定进入列表的顺序与到达顺序相同。

关于c - 如何按 C 中的优先级对列表项进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11161070/

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