우선 대기 열 및 기본 작업 의 더미 구현
3456 단어 C 언어쌓다우선 순위 대기 열
/*
:
S ,
, 。
:
insert(S,x) S x;
maximum(S) S ;
extract-max(S) S ;
increase-key(S,x,k) x k, k x
:
insert(S,x) S x;
minimum(S) S ;
extract-min(S) S ;
decrease-key(S,x,k) x k, k x
*/
#include<stdio.h>
#include<stdlib.h>
#define N 6
static int heapSize=N;
/*
*/
//
int parent(int index)
{
return (index-1)/2;
}
//
int left(int index)
{
return (index<<1)+1;
}
//
int right(int index)
{
return (index+1)<<1;
}
/*
,
logn
*/
int maxHeapify(int *A,int index,int size)
{
int L=left(index);
int R=right(index);
int tmp;
int largestIndex;
if(L<size && *(A+index)<*(A+L)) {
largestIndex=L;
} else {
largestIndex=index;
}
if(R<size && *(A+largestIndex)<*(A+R)) {
largestIndex=R;
}
if(index!=largestIndex) {
tmp=*(A+index);
*(A+index)=*(A+largestIndex);
*(A+largestIndex)=tmp;
maxHeapify(A,largestIndex,size);
}
return 0;
}
/*
,
nlogn
*/
int buildMaxHeap(int *A)
{
int size=N;
//
int need=heapSize/2-1;
int i;
for(i=need;i>=0;i--) {
maxHeapify(A,i,heapSize);
}
return 0;
}
/*
,
*/
int heapSort(int *A)
{
buildMaxHeap(A);
int j;
int size=heapSize;
int i;
int tmp;
for(i=N-1;i>=1;i--) {
tmp=*A;
*A=*(A+i);
*(A+i)=tmp;
size--;
maxHeapify(A,0,size);
}
return 0;
}
//------------------ -----------------------//
/*
*/
int heapMaxElement(int *A)
{
return A[0];
}
/*
*/
int heapExtractMax(int *A)
{
if(N<1) {
printf("Heap error!");
}
int max=heapMaxElement(A);
A[0]=A[heapSize-1];
heapSize=heapSize-1;
maxHeapify(A,0,heapSize);
return max;
}
/*
i ,
*/
int heapIncreaseKey(int *A,int index,int newValue)
{
if(newValue<*(A+index)) {
printf(" !");
return 1;
}
*(A+index)=newValue;
while(index>0&&*(A+index)>*(A+parent(index))) {
int temp;
temp=*(A+index);
*(A+index)=*(A+parent(index));
*(A+parent(index))=temp;
index=parent(index);
}
return 0;
}
/*
*/
int heapInsert(int *A,int key)
{
heapSize=heapSize+1;
int *b=malloc(sizeof(int)*heapSize);
b=A;
*(b+heapSize-1)=key-1;
heapIncreaseKey(b,heapSize-1,key);
A=b;
return 0;
}
int main()
{
int b[N]={2,1,3,2,5,4};
int* a=b;
// :
buildMaxHeap(a);
printf(" 6
");
heapIncreaseKey(a,0,6);
printf("%d
",*a);
printf(" 7
");
heapInsert(a,7);
printf("%d
",*a);
printf("
");
printf("%d
",*a);
printf("
");
printf("%d
",heapExtractMax(a));
printf("
");
printf("%d
",*a);
return 0;
}
실행 결과
zzw@zzw-ThinkPad-Edge-E430c:~/Algorithms/chap6/demo1$ ./priorityQueue
6
6
7
7
7
7
6
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
C 언어 체인 시계는 뱀을 탐식하는 작은 게임을 실현한다본고의 실례는 여러분에게 C 언어 체인표가 뱀 탐식 게임을 실현하는 구체적인 코드를 공유하여 참고하도록 하였으며, 구체적인 내용은 다음과 같다. 프로젝트 이름: 뱀놀이 운영 환경: Linux 프로그래밍 언어: C 언...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.