《编程珠玑》代码之路20:优先队列的源码实现

在 《编程珠玑》代码之路19:堆的概念和隐式堆实现(https://blog.csdn.net/beijixiong5622/article/details/85001300)中,我们给出了堆的调整算法,主要是通过下沉和上浮操作使得因改变一个元素打乱结构的堆复原。

优先队列顾名思义是一个队列,不同之处在于,它每次弹出的是最小值(最大值),在C++等高级语言中,优先队列就是通过堆来实现的,源码如下:

#include <iostream>
#include <cstdio>
#include <cstdlib>

using namespace std;

template<class T>
class priQueue{
private:
	int n, maxSize;
	T *x;

	void swap(int i, int j){
		T t = x[i];
		x[i] = x[j];
		x[j] = t;
	}

public:
	priQueue(int m){
		maxSize = m;
		x = new T[maxSize + 1];
		n = 0;
	}

	void insert(T t){
		int i, p;
		x[++n] = t;
		for (int i = n; i > 1 && x[p = i / 2] > x[i]; i = p){
			swap(p, i);
		}
	}

	T pop(){

		int i, c;
		T t = x[1];
		x[1] = x[n--];
		for (i = 1; (c 
Code from Programming Pearls Column 1: Programs for sorting integers bitsort.c -- Sort with bit vectors. sortints.cpp -- Sort using C++ STL sets. qsortints.c -- Sort with C library qsort. bitsortgen.c -- Generate random integers for sorting. Column 2: Test and time algorithms rotate.c -- Three ways to rotate the elements of a vector. The next two program are used in a pipeline to compute all anagrams in a dictionary sign.c -- Sign each word by its letters in sorted order. squash.c -- Put each anagram class on a single line. Column 5: Scaffolding for testing and timing search functions search.c -- Linear and binary search. Column 7: Tiny experiment on C run times timemod0.c -- Edit main to time one operation. Column 8: Compute the maximum-sum subsequence in an array maxsum.c -- Time four algs: n3, n2, n log n, n. Column 9: Code tuning programs genbins.c -- Profile this, then try a special-purpose allocator. macfun.c -- Time the cost of macros and functions. The column also uses rotate.c (Column 2), search.c (Column 5) and maxsum.c (Column 8). Column 11: Test and time sorting algorithms sort.cpp -- Mostly C, but also C++ sort function. SortAnim.java -- Animate those sort functions in Java. Column 12: Generate a sorted list of random integers sortedrand.cpp -- Several algorithms for the task. Column 13: Set representations for the problem in Column 12 sets.cpp -- Several data structures for sets. genbins.c (Column 9) implements the bin data structure in C. Column 14: Heaps priqueue.cpp -- Implement and test priority queues. The column also uses sort.c (Column 11) for heapsort. Column 15: Strings wordlist.cpp -- List words in the file, using STL set. wordfreq.cpp -- List words in the file, with counts, using STL map. wordfreq.c -- Same as above, with hash table in C. longdup.c -- Find long repeated strings in input. markov.c -- Generate random text from input. markovhash.c -- Like markov.c, but with hashing. markovlet.c -- Letter-level markov text, simple algorithm. Appendix 3: Cost Models spacemod.cpp -- Space used by various records. timemod.c -- Table of times used by various C constructs. You may use this code for any purpose, as long as you leave the copyright notice and book citation attached.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值