struct node
{
int id;
float weight;
};
int find_last(struct node Prio_Q[])
{
int i = 1;
while (Prio_Q[i].id != -1)
{
i += 1;
}
return i;
}
void initialize_Q(struct node Prio_Q[], int size)
{
int i;
for (i = 0; i < size; i ++)
{
Prio_Q[i].id = -1;
Prio_Q[i].weight = -1;
}
//printf("The queue is %f", Prio_Q[3].weight);
}
void enque_Q(struct node Prio_Q[], struct node node, int size)
{
int i = find_last(Prio_Q);
Prio_Q[i].id = node.id;
Prio_Q[i].weight = node.weight;
printf("The last index is %d\n", i);
heapify_up(Prio_Q, i);
}
void heapify_up(struct node Prio_Q[], int i)
{
if (Prio_Q[i/2].weight > Prio_Q[i].weight)
{
swap_node(Prio_Q,i/2, i);
heapify_up(Prio_Q, i/2);
}
}
void swap_node(struct node Prio_Q[], int i, int j)
{
struct node temp;
temp = Prio_Q[i];
Prio_Q[i] = Prio_Q[j];
Prio_Q[j] = temp;
//printf("smething has been swapped.\n");
}
int main(int argc, char *argv[])
{
struct node node;
struct node Prio_Q[10];
int size = 10;
initialize_Q(Prio_Q, 11);
node.id = 5;
node.weight = 11;
for(int m = 0; m < size+1; m++)
{
printf("The %dth element in Que is %d with weight %f.\n", m, Prio_Q[m].id, Prio_Q[m].weight);
}
}
내가 작성한 우선 순위 대기열이지만 코드를 테스트하면 실제로 함수에 요청하기 전에 대기열이 마지막 색인에 노드를 자동으로 추가합니다.C의 우선 순위 대기열
주 함수에서 노드를 두 개의 값으로 만들었지 만 노드를 우선 순위 큐 배열에 대기열에 넣지 않았습니다. 배열은 자동으로 노드를 마지막 인덱스에 추가합니다. 제발 도와주세요. 사전에
감사합니다. 대기열 initialize_Q(Prio_Q, 11);
을 초기화 할 때 당신은 크기 10의 배열을 초기화하는
'initialize_Q' 함수에서 size의 인수로 값 11을 전달한 것으로 나타났습니다. 큐 벡터의 크기이므로 값 10을 사용해야합니다. main 함수의 마지막에있는 for 루프의 경우와 동일합니다. – rbelli