我想根据用户输入的优先顺序对列表项进行排序,并且它做得很好。但是,当有多个具有相同优先级的项目时,它不会按照它应该的到达顺序对它们进行排序。如何按C中的优先级对列表项进行排序?
对不起,如果我没有足够清楚,以便您能理解。变量的名字是用葡萄牙语的,所以如果你不明白的话,请问。
下面是代码:
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;
}
你的代码应该如何知道什么时候到了? – Joe
我询问请求的细节,并将它们放入列表中,当函数再次被调用时,列表已经有了。因此,在第一个菜单出现后,问菜单后问问吧? – Rodrigo