0

我正在构建一个优先级队列,但不是用整数填充 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,但我不知道如何处理指向数组中结构的指针并从那里。

任何人都可以帮我解决这个问题吗?如果需要,我很乐意提供更多信息。

4

3 回答 3

2

你希望 Eements 成为

CustomerP*

那么你需要分配一些内存, H->Elements 以便我可以保存所有指针。

也许 :-

H->Elements =  malloc(sizeof (CustomerP) * H->Capacity);
于 2012-09-30T18:36:57.110 回答
2

ElementsHeapStruct需要根据要存储在堆中的内容适当地定义您的字段。然后,您需要在使用它之前为其分配内存。

所以第一个问题,堆里想要什么?您说您想要客户(不是ints,这是您所拥有的),但是您想要结构本身(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;
于 2012-09-30T19:12:08.853 回答
0
H->Elements = (int *)malloc(sizeof(int));
H->Elements[0] = &sentinal;

或 H-> 元素 = &sentinal;

两者都应该工作。

于 2012-09-30T18:30:36.860 回答