| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 559 人关注过本帖
标题:数据结构中的最小堆问题
只看楼主 加入收藏
zcdjt
Rank: 3Rank: 3
等 级:论坛游侠
威 望:4
帖 子:99
专家分:181
注 册:2014-9-9
结帖率:85.71%
收藏
 问题点数:0 回复次数:1 
数据结构中的最小堆问题
#include<iostream>
using namespace std;
const int Defaultsize=10;
template<class E>
class Minheap
{
      public:
             Minheap(int sz=Defaultsize);
             Minheap(E arr[],int n);
             ~Minheap(){delete[]heap;}
             bool Removemin(E &x);
             void siftdown(int start,int m);
      protected:
              E *heap;
              int currentsize;
              int maxheapsize;
};
template<class E>
Minheap<E>::Minheap(int sz)
{
  maxheapsize=(Defaultsize<sz)?sz:Defaultsize;
  heap=new E[maxheapsize];
  if(heap==NULL)
  {cerr<<"堆存储分配失败!"<<endl;exit(1);}
  currentsize=0;
}
template<class E>
Minheap<E>::Minheap(E arr[],int n)
{
   maxheapsize=(Defaultsize<n)?n:Defaultsize;
  heap=new E[maxheapsize];
  if(heap==NULL)
  {cerr<<"堆存储分配失败!"<<endl;exit(1);}
     for(int i=0;i<n;i++)
     heap[i]=arr[i];
     currentsize=n;
     int currentpos=(currentsize-2)/2;
     while(currentpos>=0)
     {
      siftdown(currentpos,currentsize-1);
      currentpos--;
      }
//我想把最小堆输出来,这应怎样写,输出求解决?
 }
template<class E>
void Minheap<E>::siftdown(int start,int m)
{
      int i=start,j=2*i+1;
      E temp=heap[i];
      while(j<=m){
      if(j<m&&heap[j]>heap[j+1])
      j++;
      if(temp<=heap[j])break;
      else
      {heap[i]=heap[j];i=j;j=2*j+1;}
      }
}
template<class E>
bool Minheap<E>::Removemin(E &x)
{
      if(!currentsize)
      {cout<<"Heap empty"<<endl;return false;}
      x=heap[0];heap[0]=heap[currentsize-1];
      currentsize--;
      siftdown(0,currentsize-1);
      cout<<"最小堆从小到大排列为:"<<x<<" "<<endl;
      return true;
}
int main()
{
    int arr[10];   
    //Minheap<int> s;
    cout<<"请输入最小堆的节点数:"<<endl;
    for(int i=0;i<10;i++)   
    cin>>arr[i];
    cout<<"排序后的最小堆为:"<<endl;
     Minheap<int>(arr,10);//输出最小堆   
    //s.Removemin();//输出最小堆从小到大排列,主函数怎样调用
    system("pause");
    return 0;
}
好无奈,求大神解救!
搜索更多相关主题的帖子: include public start 
2014-12-09 22:40
zcdjt
Rank: 3Rank: 3
等 级:论坛游侠
威 望:4
帖 子:99
专家分:181
注 册:2014-9-9
收藏
得分:0 
如果有什么地方写的不对,或大家有好的解决办法写出来都行,不必照我的程序,只要结果出来就行。

今朝醉
2014-12-10 22:01
快速回复:数据结构中的最小堆问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.067787 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved