计算机软件水平考试程序员:赫夫曼编码[5]

程序员 责任编辑:karuyato 2010-12-13

添加老师微信

备考咨询

加我微信

摘要:}//构造一个二叉堆;小顶堆voidBuildHeap(HuffmanTreet,intlen){for(inti=len/2+len%2;i>0;i--){PercDown(t,i,len);}}//构造二叉堆的功能子函数voidPercDown(HuffmanTreet,intpos,intlen){intchild;structhNodemin=t[pos];while(pos*2<=len){child=pos*2;if(child!=

  }
  //构造一个二叉堆;小顶堆
  void BuildHeap(HuffmanTree t, int len)
  {
  for (int i=len/2+len%2; i>0; i--)
  {
  PercDown(t, i, len);
  }
  }
  //构造二叉堆的功能子函数
  void PercDown(HuffmanTree t, int pos, int len)
  {
  int child;
  struct hNode min = t[pos];
  while (pos * 2 <= len)
  {
  child = pos * 2;
  if (child != len && t[child+1].weight < t[child].weight)
  child++;
  if (min.weight > t[child].weight)
  t[pos] = t[child];
  else
  break;
  pos = child;
  }
  t[pos] = min;
  }
  //删除二叉堆的根,并通过上移使得新得到的序列仍为二叉堆
  void DeleteMin(HuffmanTree t, int len)
  {
  struct hNode last = t[len--];//二叉堆的最后一个元素
  int child, pos = 1;
  while (pos * 2 <= len) //把二叉堆的某些元素往前移,使得新得到的序列仍为二叉堆
  {
  child = pos * 2;

[1]  [2]  [3]  [4]  [5]  [6]  [7]  [8]  [9]  [10]  

更多资料
更多课程
更多真题
温馨提示:因考试政策、内容不断变化与调整,本网站提供的以上信息仅供参考,如有异议,请考生以权威部门公布的内容为准!

软考备考资料免费领取

去领取