구조체 배열이 있습니다 (실제로는 우선 순위별로 정렬 된 힙 배열입니다).Beginner 구조체 배열에서 첫 번째 요소 제거 (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