Acumon's Treasures

我的博采园   ——关注算法设计、AS、C++、国家大事和身边小事

acumonID:acumon
1664次访问,排名2万外好友0人,关注者0
acumon的文章
原创 3 篇
翻译 0 篇
转载 0 篇
评论 24 篇
踏雪赤兔的公告
在未搬家之前,麻烦大家移步到我原来的博客处支持我^^   看过了文章就写一写评论吧,如果觉得我写得好则是莫大的鼓励;觉得我写得不好对我也是一个警醒。 r_天使鸡仔~.JPG

自我介绍:  我是中大04届计算机系的学生,学习过C++、汇编、MFC;自学过Flash,尤喜ActionScript编程;目前致力于算法设计学习,不时做一些ACM习题。推荐飞水程序设计QQ群:程痴(5724152) 点击这里给我发消息 Locations of visitors to this page

最近评论
文章分类
收藏
    相册
    博客手拉手
    我原来的博客(RSS)
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    原创 标程:优先队列类收藏

    新一篇: 标程:经典图算法 | 

    #include < algorithm >
    // 本例程演示了STL heap的一个最重要的应用——实现优先队列。并将其方法封装到一个PQ类中

       const   int  maxLen = 100 ;
    template
    < class  T >
    #define  DEAP  // 浅复制还是深复制
    struct  PQ { // 最大堆
        T h[maxLen];
        
    int  e;
        
    void  clear() { e = 0 ;}
        
    bool  empty() return  e == 0 ; }
        
    int  size() return  e;}
        
    void  push( const  T &  item) { // O(logN)
            h[e ++ ] = item;
            push_heap(h,h
    + e);
        }

        T
    &  pop() { // O(logN)
            pop_heap(h,h + e);
            
    return  h[ -- e];
        }

        
    const  T &  top() {
            
    return  h[ 0 ];
        }

        
    void  make(T *  bgn, T *  end) { // O(N)
            #ifdef DEAP  // 深复制
                 for (e = 0 ; bgn != end;  ++ e, ++ bgn)
                    h[e]
    =* bgn;
            
    #else   // 浅复制
                e
    = end - bgn;
                memcpy(h,bgn,e
    * sizeof ( * bgn));
            
    #endif
            make_heap(h,h
    + e);
        }

        
    void  sort(T *  bgn) { // O(NlogN)
            #ifdef DEAP  // 深复制
                 int  i; T *  end = bgn;
                
    for (i = 0 ; i < e;  ++ i, ++ end)
                    
    * end = h[i];
            
    #else   // 浅复制
                T
    *  end = bgn + e;
                memcpy(bgn,h,e
    * sizeof ( * bgn));
            
    #endif
                sort_heap(bgn, end);
        }

        friend 
    bool  isHeap(T *  bgn, T *  end) // debug用, O(N)
            T *  h = bgn - 1 int  i,e = end - bgn + 1 ;
            
    for (i = 2 ; i < e;  ++ i)
                
    if (h[i / 2 ] < h[i])  return   false ;
            
    return   true ;
        }

        PQ()
    { clear();}
    }
    ;

    #include
    < cassert >
    #include
    < iostream >
    using   namespace  std;
    template
    < class  T >
    inline 
    void  show(T a[],  int  n) {
        
    int  i;
        
    for (i = 0 ; i < n;  ++ i)
            cout
    << a[i] << '   ' ;
        cout
    << endl;
    }


    // 简单测试        
    int  main() {
        PQ
    < int >  pq;
        
    int  a[] = { 3 , 6 , 5 , 4 , 2 , 7 , 9 } ;
        cout
    << (pq.empty()  ?   " Empty\n "  :  " Not empty\n " );
        pq.make(a,a
    + sizeof (a) / sizeof ( * a));
        show(pq.h,pq.size());
        cout
    << " Top:  " << pq.top() << endl;
        cout
    << ( isHeap(pq.h, pq.h + pq.e)  ?   " Is heap\n "  :  " Not a heap\n "  );
        pq.push(
    3 );
        pq.push(
    1 );
        pq.push(
    10 );
        show(pq.h,pq.size());
        cout
    << " Top:  " << pq.top() << endl;
        cout
    << ( isHeap(pq.h, pq.h + pq.e)  ?   " Is heap\n "  :  " Not a heap\n "  );
        cout
    << " Pop: " << pq.pop() << endl;
        cout
    << " Pop: " << pq.pop() << endl;
        cout
    << " Pop: " << pq.pop() << endl;
        pq.sort(a);
        show(a,pq.size());
        
    return   0 ;
    }

     

    发表于 @ 2006年08月23日 22:43:00|评论(loading...)|编辑

    新一篇: 标程:经典图算法 | 

    评论:没有评论。

    发表评论  


    当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
    Csdn Blog version 3.1a
    Copyright © 踏雪赤兔