/* 
   $Id: heap.h 4025 2008-10-01 00:01:14Z abehm $

   Copyright (C) 2007 by The Regents of the University of California
	
   Redistribution of this file is permitted under
   the terms of the BSD Public license
 
   Date: 05/14/2007
   Author: Jiaheng Lu
*/
 	
#ifndef _heap_h_
#define _heap_h_

#include <vector>
#include <list>

#include "util/array.h"

using namespace std;

void showlistUnsigned(list<unsigned> *v);

void makeInitialHeap(vector<int> *heap,
		     const vector< Array<unsigned>*> &lists);

unsigned getMinInHeap(vector<int> *heap);

void deleteMAXUnsignedfromEachList
    (const vector< Array<unsigned>* > &lists);

void heapReplaceHead(unsigned newData,
		     unsigned data[],
		     unsigned index[],
		     unsigned size);

void heapInsert(unsigned newData,
                unsigned newIndex,
                unsigned data[],
                unsigned index[],
                unsigned &size);

void heapDelete(unsigned data[],
                unsigned index[],
                unsigned &size );

void addMAXUnsigned2EachList(const vector< Array<unsigned>* > &lists,
			     unsigned MAXUnsigned);

        	
void makeInitialHeap(unsigned dataHeap[],
		     unsigned indexHeap[],
		     const vector< Array<unsigned>* > &lists);


void deleteMAXUnsignedfromEachList(const vector<Array<unsigned>*> &lists);

	
#endif
