優先キューによるハフマンツリーの作成と符号化
2013 ワード
「≪順序付きチェーン・テーブル|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;
}
ここは優先キューのコードだけで、ハフマンツリーとコードの次の編を共有します!!!