Priority Queue(Max Heap)에서 배열 포인터 대입(?) 오류
베레기
질문 제목 : Priority Queue(Max Heap)에서 배열 포인터 대입(?) 오류질문 내용 :
#define swap(a, b) {(a)^=(b)^=(a)^=(b);}//bit swap
typedef struct PQNode{
int data;
int curLEN;
int LENplusH;
}PQNode;
PQNode* temp_PQNode;
void MaxHeapSwap(PQNode* node1, PQNode* node2){
swap(node1-data, node2-data);
swap(node1-curLEN, node2-curLEN);
swap(node1-LENplusH, node2-LENplusH);
}
void MaxHeapify(PQNode* PQueue[], int i, int PQueue_Size){
int left = 2*i;
int right= 2*i+1;
int big;
if( (left=PQueue_Size) && (PQueue[left]-LENplusH PQueue[i]-LENplusH) )
big = left;
else
big = i;
if( (right=PQueue_Size) && (PQueue[right]-LENplusH PQueue[big]-LENplusH) )
big = right;
if(big != i){
MaxHeapSwap(PQueue[i], PQueue[big]);
MaxHeapify(PQueue, big, PQueue_Size);
}
return;
}
void BuildMaxHeap(PQNode* PQueue[], int PQueue_Size){
int i = PQueue_Size / 2;
for(; i=1; i--)
MaxHeapify(PQueue, i, PQueue_Size);
return;
}
PQNode* ExtractMax(PQNode* PQueue[], int* PQueue_Size){
if(*PQueue_Size 1){
printf(이미 비어있답니다. 이말이 출력되면 안되요 씨팔);
return temp_PQNode;
}
temp_PQNode = PQueue[1];
MaxHeapSwap(PQueue[1], PQueue[*PQueue_Size]);
*PQueue_Size -= 1;
MaxHeapify(PQueue, 1, *PQueue_Size);
return temp_PQNode;
}
void MaxHeapInsert(PQNode* PQueue[], int data, int curLEN, int H, int* PQueue_Size){
int newst;
*PQueue_Size += 1;
newst = *PQueue_Size;
PQueue[newst]-data = data;
PQueue[newst]-curLEN = curLEN;
PQueue[newst]-LENplusH = curLEN + H;
while(1){
if(PQueue[newst]-LENplusH PQueue[newst/2]-LENplusH)
MaxHeapSwap(PQueue[newst], PQueue[newst/2]);
else break;
newst /= 2;
}
}
여기까지가 Priority Queue(Max Heap).h에 들어있는 내용이며
main에서
전역변수로 PQueue를 선언하구요
PQNode* PQueue[400000];
int PQueue_Size = 0;
이렇게 사용하는 부분이 있는데..
MaxHeapInsert(PQueue, N, 0, Heuristic(N), &PQueue_Size);
여기에서~~
빨간색 부분에서 할당이 안됩니다.
분명 컴파일에러는 안나는데 음..
에러 메시지는 다음과 같구요..
포인터를 어케 잘 바꿔야 될거 같은데 ㅜㅜ 생각보다 잘 안되네요
-
망고
.연산자가 있었군요!!
감사합니다 ~ ㅎㅎ
배열형식으로 바꾸고 나니 새로운 오류가 뜨네요 ㅋ
파봐야죠 .. ㅋㅋㅋ -
치킨마루
void MaxHeapInsert(PQNode* PQueue, int data, int curLEN, int H, int* PQueue_Size);
으로 바꿔야 하고요.
PQueue[newst]와 같이 배열 형식으로 사용하시면 됩니다. 이렇게...
PQueue[newst].data = data;
PQueue[newst].curLEN = curLEN;
PQueue[newst].LENplusH = curLEN + H; -
민구
답변빨리해주셧네요 ㅋ
그걸 모르는 건 아닌데, 해결책을 모르겠어서 질문드리는 겁니다 ㅇㅅㅇ
PQNode PQueue[400000];으로 선언하면
void MaxHeapInsert(PQNode* PQueue[], int data, int curLEN, int H, int* PQueue_Size){
가 아닌
void MaxHeapInsert(PQNode* PQueue, int data, int curLEN, int H, int* PQueue_Size){ -
태양
이것은 PQNode 를 400000 개 넣을 수 있는 메모리 공간이 아니고,
PQNode 가 저장되어 있다고 생각되는 메모리의 주소를
400000 개 저장할 수 있는 공간이 마련된 것입니다.
PQNode PQueue[400000];
로 하시면 PQNode 를 400000 개 넣을 수 있는 메모리 공간이 마련됩니다. -
채꽃
PQNode* PQueue[400000];
네 이렇게 선언했어요 ..
일단 컴파일 에러는 없으니까요 ㅇㅅㅇ -
지나
PQNode 의 값을 저장할 메모리는 할당하셨나요?
번호 | 제 목 | 글쓴이 | 날짜 |
---|---|---|---|
2692343 | scnaf에 자꾸 선언을 참조하라는데;; (8) | 도래 | 2025-04-22 |
2692282 | 도스상에서 생성된 exe파일에 press~ 뜨게 하기 (4) | 회사원 | 2025-04-21 |
2692256 | scanf("%*c"); ㅠㅠ 고수님들 | 거북이 | 2025-04-21 |
2692230 | 하노이탑 질문입니다. (1) | 미쁘다 | 2025-04-21 |
2692210 | 정보 올림피아드 문제인데.. 풀이 과정이 궁금합니다.(재귀함수) (5) | 물티슈 | 2025-04-20 |
2692144 | C언어와 리눅스에 대한 질문입니다. | 싴흐한세여니 | 2025-04-20 |
2692114 | 컨텍스트 스위칭하는데 걸리는 시간 측정.. | YourWay | 2025-04-19 |
2692086 | 간접참조 연산자, 증감연산자 질문이용! (2) | 블랙캣 | 2025-04-19 |
2692056 | 주석좀 달아주세요. 몇개적엇는데 몇개만달아주세요. (2) | DevilsTears | 2025-04-19 |
2691978 | 진수 쉽게 이해하는법... (3) | 지지않는 | 2025-04-18 |
2691949 | getchar() 한 문자를 입력받는 함수 질문 | 채꽃 | 2025-04-18 |
2691919 | 배열 정렬 및 합치기 질문입니다. | 사과 | 2025-04-18 |
2691845 | c언어왕초보 질문이 있습니다........ | 루나 | 2025-04-17 |
2691815 | void add(int num); 함수... (4) | 살랑살랑 | 2025-04-17 |
2691756 | 명령 프롬프트 스크롤바가 없어요 | 두메꽃 | 2025-04-16 |
2691725 | 자료구조에 관련해서 질문이 있어 글을 올립니다. | 누리알찬 | 2025-04-16 |
2691697 | if 문에서 구조체 배열에 저장되있던 문자열 검사하는 법 ? (2) | 민트맛사탕 | 2025-04-16 |
2691678 | C언어 함수 질문이요~!!! | 연보라 | 2025-04-15 |
2691650 | 반복문 | 돋가이 | 2025-04-15 |
2691618 | 링크드리스트 개념 질문이예요 (3) | 맨마루 | 2025-04-15 |