0001 struct HuffForest { //用一个栈加一个队列来实现Huffman森林 0002 Stack<HuffTree> S; Queue<HuffTree> Q; //无论栈还是队列,全程都各自有序 0003 Rank size() { return S.size() + Q.size(); } 0004 HuffForest(uint32_t* freq, char s, char t) { //初始化 0005 for (char c = s; c < t; c++) //将[s,t)内的字符 0006 { S.push(HuffTree().insert({freq[c-s], c})); } //存入S,并 0007 S.sort(); //按优先级排序(频数逆序) 0008 } //HuffForest 0009 void insert(HuffTree t) { Q.enqueue(t); } //合并之后的树,均由队列保存 0010 HuffTree delMax() { //优先级最大(频数最小)的树,只可能在栈顶或队首 0011 return S.empty() ? Q.dequeue() : 0012 Q.empty() ? S.pop() : 0013 Q.front() > S.top() ? Q.dequeue() : S.pop(); 0014 } //delMax 0015 }; //HuffForest