MS's log
  • HOME
  • TAG
  • GUESTBOOK
  • ADMIN
Close

Who am I?

  • github.com/mskim9967

Category

  • 분류 전체보기 (121)
    • 대회, 프로젝트 (21)
      • 2021 국방 공공데이터 경진대회 (1)
      • 2021 군장병 해커톤 (16)
      • 2021 UNI-DTHON (1)
    • Study (58)
      • Backend (29)
      • Infra, DevOps (9)
      • Frontend (14)
      • Data Structure (6)
    • Coding Test (40)
      • Codeforces (1)
      • 백준 (10)
      • codeground (19)
      • 프로그래머스 (9)

Recent Post

Popular Post

Comment

Tags

  • rn
  • React Native
  • DevOps
  • 군대공부

Visitor Counter

어제

오늘

전체

MaxHeap
By _MS
Study/Data Structure
2020. 11. 1. 19:07

 

#include <iostream>

class MaxHeap {
public:
	class Node {
	public:
		int data;
		bool isNull;
		Node(int data) {
			this -> data = data;
			isNull = false;
		}
		Node(){
			isNull = true;
		}
	};
    Node *biTree;
    int top; 
    
    MaxHeap(){
    	biTree  = new Node[100]();
    	top = 0;
    }
	
	void swap(Node &a, Node &b) {
		Node temp = a;
		a = b;
		b= temp;
	}    
	
    void push(int data) {
    	biTree[++top] = Node(data);
    	for(int idx = top; idx != 1 && biTree[idx / 2].data < biTree[idx].data; idx /= 2) 
    		swap(biTree[idx], biTree[idx / 2]);
    }
    
    int pop() {
    	swap(biTree[1], biTree[top]);
    	int returnVal = biTree[top].data;
    	biTree[top--] = Node();
    	
    	for(int i = 1; biTree[i * 2].isNull == false || biTree[i * 2 + 1] .isNull == false;) {
    		if(biTree[i * 2].isNull == true && biTree[i * 2 + 1].isNull == false) 
    			i = i * 2 + 1;
    		else if(biTree[i * 2].isNull == false && biTree[i * 2 + 1].isNull == true) 
    			i = i * 2;
    		else
    			i = biTree[i * 2].data > biTree[i * 2 + 1].data ? i * 2 : i * 2 + 1; 
    		
    		if(biTree[i / 2].data < biTree[i].data) 
    			swap(biTree[i / 2], biTree[i]);
    		else break;
    	}
    	return returnVal;
    }
        
    void print(){
    	for(int i = 1; i<=top; i++)std::cout<<biTree[i].data << " ";
    	std::cout<<std::endl;
    }
};

int main(){
	MaxHeap heap;
	heap.push(10);
	heap.push(2);
	heap.push(15);
	heap.push(-4);
	heap.push(7);
	heap.push(3);
	heap.push(0);
	heap.push(-20);
	heap.push(-3);
	heap.push(21);
	heap.push(1);
	heap.push(0);
	heap.push(21);
	heap.push(0);
	heap.push(-2);
	heap.print();
	
	heap.pop();
	heap.print();
	heap.pop();
	heap.print();
	heap.pop();
	heap.print();
	heap.pop();
	heap.print();
	heap.pop();
	heap.print();
	heap.pop();
	heap.print();
	heap.pop();
	heap.print();
	heap.pop();
	heap.print();
	heap.pop();
	heap.print();
	heap.pop();
	heap.print();
	heap.pop();
	heap.print();
	heap.pop();
	heap.print();
	heap.pop();
	heap.print();
	heap.pop();
	heap.print();
	heap.pop();
	heap.print();
	
}

'Study > Data Structure' 카테고리의 다른 글

Dijkstra 다익스트라 (C++)  (0) 2020.11.16
Minimum Cost Spanning Tree 최소신장트리 (C++)  (0) 2020.11.14
DFS / BFS 그래프 탐색 (C++)  (0) 2020.11.14
Loser Tree 패자트리 (C++)  (0) 2020.11.01
Binary Search Tree 이진 탐색 트리 (C++)  (0) 2020.11.01
MS's log :: _MS
Contact
Github

Copyright MS's log

Designed by MemoStack

Unicons by Iconscout

티스토리툴바