我正在构建一个优先级队列,但是我没有用整数填充PQ数组,而是指定了一个结构的指针。下面是PQ的两个结构,初始化器和插入函数的代码:
typedef struct HeapStruct *PriorityQueue;
typedef struct Customer *CustomerP;
struct HeapStruct {
int Capacity;
int Size;
int *Elements;
};
struct Customer {
float arrivalT;
float waitT;
float departureT;
float currentT;
CustomerP *siblingR; //Used for linked list
};
PriorityQueue Initialize() {
PriorityQueue H = (PriorityQueue) malloc(sizeof (struct HeapStruct));
CustomerP sentinal = malloc(sizeof (struct Customer));
sentinal->currentT = MinData;
H->Capacity = 101;
H->Size = 0;
H->Elements[0] = &sentinal; //Syntax Error
return H;
}
void Insert(CustomerP X, PriorityQueue H) {
int i;
if (IsFull(H)) {
printf("Priority queue is full");
return;
}
//Syntax errors
for (i = ++H->Size; H->Elements[i/2]->currentT > X->currentT; i /= 2)
H->Elements[i] = H->Elements[i/2];
H->Elements[i] = X;
}
所以我试图在Int数组中放置一个指针并进行比较,例如H-> Elements [i] - > currentT,但我不知道如何处理指向数组中结构的指针并从那里访问结构。
任何人都可以帮我解决这个问题吗?如果需要,我很乐意提供更多信息。
答案 0 :(得分:2)
你想要Eements
CustomerP*
然后你需要为H->Elements
分配一些内存,以便我可以保存所有指针。
也许: -
H->Elements = malloc(sizeof (CustomerP) * H->Capacity);
答案 1 :(得分:2)
Elements
中的HeapStruct
字段需要根据要存储在堆中的内容进行适当定义。然后,您需要在使用它之前为其分配内存。
所以第一个问题,堆中想要什么?你说你想要客户(不是int
s,这就是你拥有的),但是你想要结构本身(Customer
)或指向结构的指针(Customer *
或{{1 }})。假设你想要后者:
CustomerP
然后你需要为它正确分配空间:
struct HeapStruct {
int Capacity;
int Size;
CustomerP *Elements;
};
答案 2 :(得分:0)
H->Elements = (int *)malloc(sizeof(int));
H->Elements[0] = &sentinal;
OR H-> Elements =& sentinal;
两者都应该有用。