簡體   English   中英

優先級隊列數組(c)

[英]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);

需要根據要存儲在堆中的內容適當定義HeapStructElements字段。 然后,您需要在使用前為其分配內存。

那么第一個問題是,堆中想要什么? 您說您想要客戶(而不是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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM