[英]Priority Queue Array (c)
我正在建立一個優先級隊列,而不是用整數填充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,但是我不知道如何處理指向數組中結構的指針並從中訪問該結構。那里。
有人可以幫我解決這個語法嗎? 如果需要,我將很樂意提供更多信息。
你想讓Eements成為
CustomerP*
那么您需要為H->Elements
分配一些內存,以便我可以保存所有指針。
也許 :-
H->Elements = malloc(sizeof (CustomerP) * H->Capacity);
需要根據要存儲在堆中的內容適當定義HeapStruct
的Elements
字段。 然后,您需要在使用前為其分配內存。
那么第一個問題是,堆中想要什么? 您說您想要客戶(而不是int
,這是您擁有的),但是您是否想要結構本身( Customer
)或指向結構的指針( Customer *
或CustomerP
)。 假設您想要后者:
struct HeapStruct {
int Capacity;
int Size;
CustomerP *Elements;
};
然后,您需要為其適當分配空間:
H = (PriorityQueue) malloc(sizeof (struct HeapStruct));
CustomerP sentinal = malloc(sizeof (struct Customer));
sentinal->currentT = MinData;
H->Capacity = 101;
H->Size = 0;
H->Elements = malloc(sizeof(CustomerP) * H->Capacity);
H->Elements[0] = sentinal;
H->Elements = (int *)malloc(sizeof(int));
H->Elements[0] = &sentinal;
或H-> Elements =&sentinal;
兩者都應該起作用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.