当前位置: 首页 > news >正文

个人免费建网站方法百度客服人工电话24小时

个人免费建网站方法,百度客服人工电话24小时,怎么做系部网站首页,东莞官方网站 优帮云template<class T> void Heap<T>::PercolateUp() //为了向上调整为堆&#xff0c;我们需要比较当前节点和其父节点的值&#xff0c;如果父节点的值比当前节点大&#xff0c;则交换它们的值。 { int p size - 1, c (p - 1) / 2;//c表示当前节点的父节点&#xff0…

template<class T>
void Heap<T>::PercolateUp() //为了向上调整为堆,我们需要比较当前节点和其父节点的值,如果父节点的值比当前节点大,则交换它们的值。
{

    int p = size - 1, c = (p - 1) / 2;//`c`表示当前节点的父节点,`p`表示当前节点。
    T temp = vec[p];
    while (p > 0) //为什么不是c>0
        

        //在`while`循环中,我们判断当前节点是否已经到达根节点,如果是根节点则停止循环。所以条件应该是`p > 0`,而不是`c > 0`。

        
    {
        if (vec[c] <= temp)
            break;
        else
        {
            vec[p] = vec[c];
            p = c;
            c = (p - 1) / 2;
        }
    }
    vec[p] = temp; //写在while 里面还是外面目前结点最后会空出来
}

 


template<class T>
void Heap<T>::PercolateDown(int h)// 向下调整为堆,如果父亲节点(目前结点)比孩子结点(较小值)大交换
{
    int p = h, c = 2 * p + 1;// c为p的左孩子
    T temp = vec[h]; //不定类型  不用写成int
    while (c < size)  //怎么修改?
    {
        if (c + 1 < size && vec[c + 1] < vec[c]) //左孩子的下标小于size-1(最后一个叶子结点)&&找到左右孩子的最小值

//c < size表示当前节点有左孩子,而c + 1 < size表示当前节点有右孩子。根据堆的性质,选择较小的孩子进行交换。

        {
            ++c;
        }
        if (temp <= vec[c])
            break;
        else
        {
            vec[p] = vec[c];
            p = c;
            c = 2 * p + 1;
        }
    }
    vec[p] = temp;


#include<iostream>
#include<vector> 
#include<queue>
using namespace std;template<class T>
struct BTNode
{T data;BTNode* left, * right;BTNode(const T& item = T(), BTNode* lptr = NULL, BTNode* rptr = NULL) :data(item), left(lptr), right(rptr) {}
};void Gotoxy(int x, int y)
{static int level = 0, indent = 0;if (y == 0){indent = 0;level = 0;}if (level != y){cout << endl;indent = 0;level++;}cout.width(x - indent);indent = x;
}template<class T>
BTNode<T>* GetBTNode(const T& item, BTNode<T>* lp = NULL, BTNode<T>* rp = NULL)
{BTNode<T>* p;p = new BTNode<T>(item, lp, rp);if (p == NULL){cout << "error!" << endl;}return p;
}struct Location
{int xindent, ylevel;
};template<class T>
void PrintBTree(const BTNode<T>* t, int screenwidth)
{if (t == NULL){return;}int level = 0, offset = screenwidth / 2;Location floc, cloc;queue<const BTNode<T>*> Q;queue<Location> LQ;floc.xindent = offset;floc.ylevel = level;Q.push(t);LQ.push(floc);while (!Q.empty()){t = Q.front();floc = LQ.front();Q.pop();LQ.pop();Gotoxy(floc.xindent, floc.ylevel);cout << t->data;if (floc.ylevel != level){level++;offset = offset / 2;}if (t->left){Q.push(t->left);cloc.ylevel = floc.ylevel + 1;cloc.xindent = floc.xindent - offset / 2;LQ.push(cloc);}if (t->right){Q.push(t->right);cloc.ylevel = floc.ylevel + 1;cloc.xindent = floc.xindent + offset / 2;LQ.push(cloc);}}cout << endl;}template<class T>
class Heap   //小根堆 根->叶子 小到大
{vector<T> vec;int size;void BuildHeap(void);void PercolateUp();void PercolateDown(int h);
public:Heap(int max = 100) : vec(max), size(0) {}Heap(const vector<T>& vt);int Size(){return size;}void Insert(const T& item);void DeleteMin(void);void DeleteMin(T& item);
};template<class T>
void Heap<T>::PercolateUp() //为了向上调整为堆,我们需要比较当前节点和其父节点的值,如果父节点的值比当前节点大,则交换它们的值。
{int p = size - 1, c = (p - 1) / 2;//`c`表示当前节点的父节点,`p`表示当前节点。T temp = vec[p];while (p > 0) //为什么不是c>0//在`while`循环中,我们判断当前节点是否已经到达根节点,如果是根节点则停止循环。所以条件应该是`p > 0`,而不是`c > 0`。{if (vec[c] <= temp)break;else{vec[p] = vec[c];p = c;c = (p - 1) / 2;}}vec[p] = temp; //写在while 里面还是外面? 目前结点最后会空出来
}template<class T>
void Heap<T>::PercolateDown(int h)// 向下调整为堆,如果父亲节点(目前结点)比孩子结点(较小值)大交换
{int p = h, c = 2 * p + 1;// c为p的左孩子T temp = vec[h];while (c < size)  //怎么修改?{if (c + 1 < size && vec[c + 1] < vec[c]) //左孩子的下标小于size-1(最后一个叶子结点)&&找到左右孩子的最小值{++c;}if (temp <= vec[c])break;else{vec[p] = vec[c];p = c;c = 2 * p + 1;}}vec[p] = temp;
}template<class T>
void Heap<T>::Insert(const T& item)
{if (size == vec.size()){vec.resize(vec.size() *2);}vec[size] = item;size++;PercolateUp();}template<class T>
void Heap<T>::BuildHeap(void) //从最后一个非叶子结点(a)开始,size-1是最后一个叶子结点,a是它的parent
{for (int i = size / 2 - 1; i >= 0; i--){PercolateDown(i);//为该结点的子树调整成堆}
}template<class T>
void Heap<T>::DeleteMin()
{if (size == 0){return;}vec[0] = vec[size - 1];size--;PercolateDown(0);
}template<class T>
void Heap<T>::DeleteMin(T& item)
{if (size == 0) //删除最小值需要判断堆是否为空{return;}item = vec[0];vec[0] = vec[size - 1];size--;PercolateDown(0);
}template<class T>
Heap<T>::Heap(const vector<T>& vt) : vec(vt.size() + 10), size(vt.size())
{for (int i = 0; i < size; i++){vec[i] = vt[i];}BuildHeap();
}template<class T>
struct HuffmanNode
{BTNode<T>* t;int operator<(const HuffmanNode& h)//穿入参数是哈夫曼节点 bool类型{return (t->data < h.t->data);}int operator<=(const HuffmanNode& h)//穿入参数是哈夫曼节点{return (t->data <= h.t->data);}
};template<class T>
BTNode<T>* MakeHuffman(T* pa, int n)
{BTNode<T>* t, * right, * left;HuffmanNode<T> hf;Heap<HuffmanNode<T>> HF(n);//第一个循环将数组里的元素插入到哈夫曼堆for (int i = 0; i < n; i++){t = GetBTNode<int>(pa[i]);hf.t = t;HF.Insert(hf);}//第二个循环找到最小的两个数,生成根节点后删除for (int i = 1; i < n; i++){HF.DeleteMin(hf);left = hf.t;HF.DeleteMin(hf);right = hf.t;t = GetBTNode(left->data + right->data, left, right);//t的左孩子是left,右孩子是righthf.t = t;HF.Insert(hf);}HF.DeleteMin(hf);//是一个对象调用函数t = hf.t;return t;
};int main()
{int a[] = { 7,5,2,4 };BTNode<int>* root;root = MakeHuffman(a, 4);PrintBTree(root, 40);cout << endl;return 0;
}

http://www.tj-hxxt.cn/news/49824.html

相关文章:

  • 公司公司网站建设公司交换链接是什么
  • 苏州做网站优化哪家好百度网址大全网站
  • 找人做网站做的很烂磁力猫torrent kitty
  • 公司手机版网站模板免费下载seo主要优化
  • 提供网站建设费用西安官网seo
  • 太原定制网站开发制作上海品牌推广公司
  • 茂名seo站内优化google框架一键安装
  • 网站建设mus18杭州seo网站推广排名
  • wordpress首页删除侧边栏杭州seo网站推广排名
  • 做体育赛事网站公司淘宝排名查询工具
  • 做网站做什么主题网络营销策略分析论文
  • wordpress data整站优化多少钱
  • 律师网站设计湖南seo优化排名
  • 体育类网站 设计网络推广宣传方式
  • 站长工具排行榜网站优化公司哪个好
  • 网站推广营销的意义什么叫百度竞价推广
  • 找个做网站的人如何加入百度推广
  • 技术支持 创思佳网站建设福州seo关键字推广
  • 宁波免费建站外包公司品牌推广软文案例
  • 网站设计红色表示什么百度直播推广
  • 上海静安网站制作微博指数查询
  • 网上那些彩票网站可以自己做吗网络销售平台
  • 上海网站设计与开发公司电脑清理优化大师
  • 有网站代码怎么建站ui设计
  • 团结湖网站建设站长工具大全集
  • 紫网站建设星巴克网络营销案例分析
  • 宝鸡网站制作公司郑州抖音推广
  • 开发网站 公司网站的排名优化怎么做
  • 汽车网站制作策划方案哈尔滨最新今日头条新闻
  • 做封面图的网站seo推广外包企业