우선순위 큐를 이용한 ...
나라찬
질문 제목 : 우선순위 큐를 정열되지 않은 배열을 사용하는건데요.... 잘안되네요...오류가 나꾸 납니다...질문 내용 : 우선순위 큐를 정열되지 않은 배열을 사용하여 구현하는 건데요... 제가 우선순위 큐를 잘못 이해하고 있는지 잘 안됩니다... 이떻게 실행 하면 될까요...
#includestdio.h
#includestdlib.h
typedef struct {
int key;
int arrq[10];
}element;
typedef struct {
int length;
int qsize;
int increment;
element *data;
}priorityq;
priorityq *createq() {
priorityq *pq;
pq = (priorityq*)malloc(sizeof(priorityq));
pq-length =0;
pq-qsize = 20;
pq-increment = 5;
pq-data = (element*)malloc(pq-qsize *sizeof(element));
return pq;
}
int compareto(element item1, element item2){
int a = item1.key;
int b = item2.key;
return ((a==b) ? 0:((ab) ? 1 :-1));
}
void queuefull(priorityq *pq){
//우선순위 큐 크기 확장
int i;
element *temp;
pq-qsize += pq-increment; // 확장된 크기의 임시배열 생성
temp = (element*)malloc(pq-qsize *sizeof(element));
for(i =0; ipq-length;i++){
temp[i] = pq-data[i]; // 기존 원소를 임시배열로 이동
}
free(pq-data);
pq-data = temp;// 배열 포인터 변경
}
void insert(priorityq *pq, element item){
// 우선순위 큐에 원소 삽입
if(pq-length == pq-qsize) // 큐가 꽉차면 queuefull호출
queuefull(pq);
pq-data[pq-length++] = item;
}
element delete(priorityq *pq){
int maxindex, i;
element maxvalue;
if(pq-length == 0){
printf(queue is empty\n);
exit(1);
}
else {
maxindex = 0; // 첫번째 원소의 우선순위가 제일 높다고 가정
maxvalue = pq-data[0];
for(i = 1; ipq-length; i++){
if(compareto(pq-data[i], maxvalue)0){
maxindex = i; // 우선순위가 제일 높은 원소의 위치
maxvalue = pq-data[i]; // 우선순위가 제일 높은 원소의 값
}
}
pq-data[maxindex] = pq-data[--pq-length];
//마지막 원소를 이동시키고 원소 수를 감소
return maxvalue;
}
}
void priorityqsort(element *a, int size){
int i;
priorityq *pq;
pq = createq();
for(i=0; i size; i++){
insert(pq, a[i]);
//배열 a[]의 모든 원소를 우선순위 큐 pq에 삽입
}
for(i=size-1; i=0; i--){
a[i] = delete(pq);
//우선 순위 큐 pq에 있는 원소를 모두 배열 a[]로 다시 이동
}
free(pq);
}
element *sort_arr(element *a){
element *b;
int i,j;
for(i=1;i10;i++){
for(j=1;j10;j++){
if(a[i].key a[++i].key)
b[i].key = a[i].key;
else if(a[i].key a[++i].key)
b[i].key = a[++i].key;
else
printf( 좀 이상한듯.. \n);
}
printf(%d , , a[i].key);
}
return b;
}
void main()
{
int i;
int n=10; // 정렬할 원소 수
element *data;
data = (element*)malloc(n*sizeof(element));
for(i=0; in; i++){
data[i].key = (3*i-13)*(3*i-13); //정수 키값을 가진 10개의 원소 생성
printf(%d, , data[i].key);
// 배열 data[]에 저장된 원소의 키 값을 프린트
}
printf(\r\n);
sort_arr(data);
/*
priorityqsort(data,n);
for(i=0; in;i++){
printf(%d, ,data[i].key);
// 정렬된 배열 data[]의 각 원소의 키값을 프린트
}*/
printf(\r\n);
free(data);
}
-
권애교
sort_arr 함수에서 ... 오류나는것 같아요 .. ㅠ
-
누림
어느부분에서 어떤 오류가 나는지 말씀해주시면 답변 받기에 수월하실듯합니다.
얼핏 보기로는 delete를 변수명으로 사용해서 그런듯한데...그걸 다른 단어로 한번 바꿔보세요.