void testHeap ( int n ) { T* A = new T[2*n/3]; //创建容量为2*n/3的数组,并 for ( int i = 0; i < 2 * n / 3; i++ ) A[i] = dice ( ( T ) 3 * n ); //在其中随机生成2*n/3个词条 /*DSA*/printf ( "%d random keys created:\n", 2 * n / 3 ); /*DSA*/for ( int i = 0; i < 2 * n / 3; i++ ) print ( A[i] ); printf ( "\n" ); PQ heap ( A + n / 6, n / 3 ); //批量建堆(PQ_ComplHeap实现了Robert Floyd算法) delete [] A; /*DSA*/system("cls"); print ( heap ); Sleep(100); while ( heap.size() < n ) { //随机测试 if ( dice ( 100 ) < 70 ) { //70%概率插入新词条 T e = dice ( ( T ) 3 * n ); /*DSA*/printf ( "Inserting" ); print ( e ); printf ( " ...\n" ); heap.insert ( e ); /*DSA*/printf ( "Insertion done\n" ); } else { //30%概率摘除最大词条 if ( !heap.empty() ) { /*DSA*/printf ( "Deleting max ...\n" ); T e = heap.delMax();/*DSA*/printf ( "Deletion done with" ); print ( e ); printf ( "\n" ); } } /*DSA*/system("cls"); print ( heap ); Sleep(100); } while ( !heap.empty() ) { //清空 T e = heap.delMax();/*DSA*/printf ( "Deletion done with" ); print ( e ); printf ( "\n" ); /*DSA*/system("cls"); print ( heap ); Sleep(100); } }
//Insert limit elements of the file fin into heap. void insertNext(PQ & pq, ifstream & fin, int limit = 0) { if (limit == 0) limit = numeric_limits<int>::max(); string word; int ct; while (!fin.eof() && pq.size < limit){ fin >> word >> ct; pq.insert(ItemType(word, ct)); } }