데이터 구조 - 더미 의 기본 작업 (더미 의 구축, 삽입, 삭제 등) 에 대한 상세 한 설명
데이터 구조의 - 더미 (Heap) 이 블 로 그 는 쌓 인 개념 을 대충 설명 했다. 그 다음 에 쌓 인 기본 적 인 작업 들 은 모두 최대 더미 (큰 더미) 를 예 로 들 었 다.
쌓다
#define MAXDATA 10000
struct HNode {
int* Data; //
int Size; //
int Capacity; //
};
// MaxSize
HNode* CreateHeap(int MaxSize) {
HNode* H = new HNode;
H->Data = new int[MaxSize + 1];// 1
H->Size = 0;
H->Capacity = MaxSize;
H->Data[0] = MAXDATA; // " " , 10000
return H;
}
판단 이 비다
bool IsFull(HNode* H)
{
return (H->Size == H->Capacity);
}
bool IsEmpty(HNode* H)
{
return (H->Size == 0);
}
더미 삽입
생각:
HNode* Insert(HNode* H, int key) {
if (IsFull(H)) {
cout << "The heap is full
"; //
return H; //
}
int i = ++H->Size; // Size 1, i ,
for (; H->Data[i / 2] < key; i /= 2) // key
H->Data[i] = H->Data[i / 2]; // key
H->Data[i] = key; // key
return H; //
}
최대 더미 요소 삭제
더 미 는 특수 한 '대기 열' 입 니 다. 요 소 를 꺼 내 는 순 서 는 요소 의 우선권 (키워드) 크기 에 따라 삭제 작업 은 루트 노드 를 삭제 하 는 것 입 니 다.
int DeleteMax(HNode* H)
{
int Parent, Child;
int MaxItem, X;
if (IsEmpty(H)) {
cout << "The heap is empty
"; //
return -1; //
}
MaxItem = H->Data[1]; //
X = H->Data[H->Size--]; //X , Size
for (Parent = 1; Parent * 2 <= H->Size; Parent = Child) {
Child = Parent * 2;
if ((Child != H->Size) && (H->Data[Child] < H->Data[Child + 1]))
Child++; // Child
if (X >= H->Data[Child]) break; // X
else // X
H->Data[Parent] = H->Data[Child];
}
H->Data[Parent] = X;
return MaxItem;
}
Ps: 오류 가 있 으 면 지적 을 환영 합 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[JAVA] 배열 회전 출력요소 가 출력 을 시작 하 는 위치 에 주의 하 십시오. 모두 몇 라운드 의 수출 이 있 습 니까? n/2 + 1 매 라 운 드 는 상, 우, 하, 좌 로 나 뉜 다. 각 방향의 시작 위치 와 좌표 의 관 계 를 구...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.