我有一個結構數組(實際上它是一個按優先級排序的堆數組)。初學者從結構數組中刪除第一個元素(C)
typedef struct {
char name[MAX_CHARACTERS+1];
int priority;
} person;
person p[MAX_HEAPSIZE+1];
並且想要移除數組中的第一個元素。我不知道如何或使用什麼命令。
到目前爲止,我一直在做
void remove(){
swap(0, heapsize-1);
strcpy(p[heapsize-1].name, p[MAX_HEAP_SIZE+1].name);
p[heapsize-1].priority = p[MAX_HEAP_SIZE+1].priority;
}
這種交換陣列中的第一個和最後一個非空元素。然後它試圖將空元素上的數據複製到數組中的最後一個非空元素(我想刪除的元素)。
但我認爲它只複製內存位置。有沒有簡單的地方我可以做
p [0] = NULL?
是的,如果你的數組允許有空元素,你可以簡單地做p [0] = NULL。請澄清你的意思是「刪除」。就像現在這樣,你的remove()函數索引超出了數組的邊界並拷貝垃圾。 –
當我做p [0] = NULL;從類型'void *'分配類型'person'時出現錯誤:不兼容類型。通過刪除,我基本上想通過與最後一個交換來擺脫我的數組的第一個元素。 – coril
如果使用C99編譯器進行編譯,可以使用'p [0] =(person){「anonymous」,42};'或者更喜歡:'p [0] =(person){ 「」,0};否則你需要分別設置每個結構成員:'p [0] .name [0] = 0; p [0] .priority = 0;' – pmg