優先キューによるハフマンツリーの作成と符号化


「≪順序付きチェーン・テーブル|Order Chains Table|emdw≫」を使用して優先キューを実装し、チェーン・テーブル要素を優先順位で減算します.エレメントは列を出て最初のエレメントを出し、エレメントは列に入って、エレメントが整列チェーンテーブルに挿入されても整列します.このプログラムでは、文字周波数が小さいと優先度が高くなります.
typedef int PQElemType;// HuffmanTree 

//" " ( ) LinkList
typedef struct PQNode
{
    PQElemType data;
    PQNode *next;
}*LinkList;

//  “ ” PQueue
typedef struct
{
    LinkList h; // 
    int len;    // “ ” 
  // bool (*Gt)(PQElemType,PQElemType);
}PQueue;
#include
#include
#include 
#include"priorityQueue.h"

using namespace std;

/// pq
void ReadToPQueue(PQueue &pq)
{
    PQElemType e;
    pq.h = new PQNode;
    pq.h->next=NULL;
    pq.len=0;
    while(cin>>e && e!='0')
    {
        PQNode *pqNew=new PQNode;
        pqNew->data = e;
        pqNew->next = pq.h->next;
        pq.h->next = pqNew;
        pq.len++;
        cout << pq.h->next->data << " ";
    }
    return ;
}

///   , 
void BuildPQueue(PQueue &pq)
{
    PQueue pqNew;
    PQElemType m;
    pqNew.h = new PQNode;
    pqNew.h->next=NULL;
    pq.h = pq.h->next;

    while (pq.h)
    {
        Push(pqNew,pq.h->data);
        pq.h = pq.h->next;
    }
    pq = pqNew;
    return ;
}

///  
bool IsEmpty(PQueue pq)
{
    if(pq.h==NULL)
        return true;
    return false;
}


/// ( , )
void Push(PQueue &pq, PQElemType elem)
{
    PQNode *sq;
    PQNode *LNew=new PQNode;
    LNew->data = elem;
    LNew->next = NULL;

    for (sq = pq.h ; sq->next&& sq->next->data-LNew->data<0; sq = sq->next)
        ;

    LNew->next = sq->next;
    sq->next = LNew;
}

///  ( )
PQElemType Pop(PQueue &pq)
{
    if(pq.h == NULL)
        return -1;
    PQNode *pqNew = new PQNode;
    pqNew = pq.h->next;
    pq.h->next = pqNew->next;
    return pqNew->data;
}

ここは優先キューのコードだけで、ハフマンツリーとコードの次の編を共有します!!!