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

域名进行网站备案吗免费漫画软件app下载安装

域名进行网站备案吗,免费漫画软件app下载安装,360全景网站建设,云服务器 网站哈夫曼树#xff08;最优二叉树#xff09; 1#xff09;基础概念 **路径#xff1a;**从树中一个结点到另一个结点之间的分支构成这两个结点间的路径。 **结点的路径长度#xff1a;**两结点间路径上的分支数。 **树的路径长度#xff1a;**从树根到每一个结点的路径…哈夫曼树最优二叉树 1基础概念 **路径**从树中一个结点到另一个结点之间的分支构成这两个结点间的路径。 **结点的路径长度**两结点间路径上的分支数。 **树的路径长度**从树根到每一个结点的路径长度之和。记作TL。 结点数目相同的二叉树中完全二叉树是路径长度最短的二叉树。 **权**将树中结点赋给一个有着某种含义的数值则这个数值称为该结点的权。 **结点的带权路径长度**从根结点到该结点之间的路径长度与该结点的权的乘积。 **树的带权路径长度**树中所有叶子结点的带权路径长度之和。 2构造哈夫曼树 顺序存储结构——一维结构数组 1定义结构 typedef struct {int weight; int parent, lch, rch; }HTNode, * HuffmanTree;HuffmanTree H;2步骤 初始化HT [1…2n-1]lch rch parent 0输入初始几个叶子结点置HT[1…n]的 weight 值进行以下n-1次合并依次产生n-1个结点HT[i]i n 1…2n-1 在HT[1…i-1]中选两个未被选过(从parent 0 的结点中选)的weight最小的两个结点 HT[S1] 和 HT[S2]s1、s2为两个最小结点下标修改 HT[s1] 和 HT[s2] 的parent值HT[s1].parent i; HT[s2] .parent i;修改新产生的HT[i] HT[i].weight HT[s1].weight HT[s2].weight; HTli].Ich s1; HT[i].rch s2;void CreatHuffmanTree(HuffmanTree HT, int n) { //构造哈夫曼树--哈夫曼算法if (n 1) return;int m 2 * n - 1; // 数组共2n-1个元素HT new HTNode[m 1]; // 动态分配内存0号单元未用HT[m]表示根结点// 初始化2n-1个元素的lch、rch、parent为0for (int i 1; i m; i) {HT[i].lch HT[i].rch HT[i].parent 0;}// 输入前n个元素的weight值cout 请输入 n 个字符的频率 endl;for (int i 1; i n; i) {cin HT[i].weight;}// 构建哈夫曼树for (int i n 1; i m; i) {int s1, s2;Select(HT, i - 1, s1, s2);HT[s1].parent i;HT[s2].parent i;HT[i].lch s1;HT[i].rch s2;HT[i].weight HT[s1].weight HT[s2].weight;} }3总代码 权值为整数 #include iostream #include limits.husing namespace std;// 定义哈夫曼树节点结构 typedef struct {int weight;int parent, lch, rch; } HTNode;typedef HTNode* HuffmanTree;// 选择两个双亲域为0且权值最小的结点 void Select(const HTNode* HT, int i, int s1, int s2) {s1 s2 -1;int min1 INT_MAX, min2 INT_MAX;for (int j 1; j i; j) {if (HT[j].parent 0 HT[j].weight min1) {min2 min1;s2 s1;min1 HT[j].weight;s1 j;}else if (HT[j].parent 0 HT[j].weight min2) {min2 HT[j].weight;s2 j;}} }void CreatHuffmanTree(HuffmanTree HT, int n) { //构造哈夫曼树--哈夫曼算法if (n 1) return;int m 2 * n - 1; // 数组共2n-1个元素HT new HTNode[m 1]; // 动态分配内存0号单元未用HT[m]表示根结点// 初始化2n-1个元素的lch、rch、parent为0for (int i 1; i m; i) {HT[i].lch HT[i].rch HT[i].parent 0;}// 输入前n个元素的weight值cout 请输入 n 个字符的频率 endl;for (int i 1; i n; i) {cin HT[i].weight;}// 构建哈夫曼树for (int i n 1; i m; i) {int s1, s2;Select(HT, i - 1, s1, s2);HT[s1].parent i;HT[s2].parent i;HT[i].lch s1;HT[i].rch s2;HT[i].weight HT[s1].weight HT[s2].weight;} }int main() {int n;cout 请输入叶子节点的数量;cin n;HuffmanTree HT;CreatHuffmanTree(HT, n);// 打印哈夫曼树示例cout 哈夫曼树构造完成打印结果如下 endl;for (int i 1; i 2 * n; i) {cout Node i : Weight HT[i].weight , Parent HT[i].parent , Left Child HT[i].lch , Right Child HT[i].rch endl;}delete[] HT; // 释放动态分配的内存return 0; }权值为浮点数 #include iostream #include limits.h // 如果不再使用 INT_MAX可以不需要这个头文件using namespace std;// 定义哈夫曼树节点结构将 weight 改为 double 类型 typedef struct {double weight; // 权值改为 double 类型int parent, lch, rch; } HTNode;typedef HTNode* HuffmanTree;// 选择两个双亲域为0且权值最小的结点 void Select(const HTNode* HT, int i, int s1, int s2) {s1 s2 -1;double min1 DBL_MAX, min2 DBL_MAX; // 使用 DBL_MAX 作为最大值初始化for (int j 1; j i; j) {if (HT[j].parent 0 HT[j].weight min1) {min2 min1;s2 s1;min1 HT[j].weight;s1 j;}else if (HT[j].parent 0 HT[j].weight min2) {min2 HT[j].weight;s2 j;}} }void CreatHuffmanTree(HuffmanTree HT, int n) { //构造哈夫曼树--哈夫曼算法if (n 1) return;int m 2 * n - 1; // 数组共2n-1个元素HT new HTNode[m 1]; // 动态分配内存0号单元未用HT[m]表示根结点// 初始化2n-1个元素的lch、rch、parent为0for (int i 1; i m; i) {HT[i].lch HT[i].rch HT[i].parent 0;HT[i].weight 0.0; // 初始化 weight 为 0.0}// 输入前n个元素的weight值cout 请输入 n 个字符的小数频率 endl;for (int i 1; i n; i) {cin HT[i].weight;}// 构建哈夫曼树for (int i n 1; i m; i) {int s1, s2;Select(HT, i - 1, s1, s2);HT[s1].parent i;HT[s2].parent i;HT[i].lch s1;HT[i].rch s2;HT[i].weight HT[s1].weight HT[s2].weight;} }int main() {int n;cout 请输入叶子节点的数量;cin n;HuffmanTree HT;CreatHuffmanTree(HT, n);// 打印哈夫曼树示例cout 哈夫曼树构造完成打印结果如下 endl;for (int i 1; i 2 * n - 1; i) { // 注意这里应该是 2*n-1 而不是 2*ncout Node i : Weight HT[i].weight , Parent HT[i].parent , Left Child HT[i].lch , Right Child HT[i].rch endl;}delete[] HT; // 释放动态分配的内存return 0; }4运行结果 3哈夫曼编码 在远程通讯中要将待传字符转换成由二进制的字符串 若将编码设计为长度不等的二进制编码即让待传字符串中出现次数较多的字符采用尽可能短的编码则转换的二进制字符串便可能减少。 问题1 什么样的前缀码能使得电文总长最短 ——哈夫曼编码 方法: 1、统计字符集中每个字符在电文中出现的平均概率概率越大要求编码越短。 2、利用哈夫曼树的特点权越大的叶子离根越近将每个字符的概率值作为权值构造哈夫曼树。 则概率越大的结点路径越短。 3、在哈夫曼树的每个分支上标上0或1 结点的左分支标0右分支桥 1。把从根到每个吐子的路径上的标号连接起来作为该叶子代表的字符的编码。 问题2 为什么哈夫曼编码能够保证是前缀编码? 因为没有一片树叶是另一片树叶的祖先所以每个叶结点的编码就不可能是其它叶结点编码的前缀。 问题 3 为什么哈夫曼编码能够保证字符编码总长最短? 因为哈夫曼树的带权路径长度最短故字符编码的总长最短。 性质1 哈夫曼编码是前缀码性质2 哈夫曼编码是最优前缀码 算法实现 // 从叶子到根逆向求每个字符的哈夫曼编码存储在编码表HC中 void CreatHuffmanCode(const HuffmanTree HT, HuffmanCode HC, int n) {HC new char*[n 1]; // 分配n个字符编码的头指针数组char* cd new char[n]; // 分配临时存放编码的动态数组空间cd[n - 1] \0; // 编码结束符for (int i 1; i n; i) {int start n - 1;int c i;int f HT[i].parent;// 从叶子结点开始向上回溯直到根结点while (f ! 0) {--start;if (HT[f].lch c)cd[start] 0; // 结点c是f的左孩子则生成代码0elsecd[start] 1; // 结点c是f的右孩子则生成代码1c f;f HT[f].parent;}// 计算编码长度并分配适当的空间int codeLength n - start;HC[i] new char[codeLength];strncpy(HC[i], cd[start], codeLength);HC[i][codeLength - 1] \0; // 确保字符串以空字符终止}delete[] cd; // 释放临时空间 }strncpy(HC[i], cd[start], codeLength);语句在C中确实可以用于复制字符数组但它有一些潜在的问题和局限性。特别是当你使用strncpy时如果目标缓冲区没有足够的空间来包含源字符串加上终止空字符\0它不会自动添加终止空字符这可能会导致后续操作出现问题。 此外在现代C中更推荐使用std::string来处理字符串因为它们更安全、更方便并且可以避免手动管理内存的复杂性和风险。 // 从叶子到根逆向求每个字符的哈夫曼编码存储在编码表HC中 void CreatHuffmanCode(const HuffmanTree HT, HuffmanCode HC, int n) {HC.resize(n 1); // 分配n个字符编码的空间for (int i 1; i n; i) {string code ;int c i;int f HT[i].parent;// 从叶子结点开始向上回溯直到根结点while (f ! 0) {if (HT[f].lch c)code 0 code; // 结点c是f的左孩子则生成代码0elsecode 1 code; // 结点c是f的右孩子则生成代码1c f;f HT[f].parent;}HC[i] code;} }总代码实现 #include iostream #include cstring // 用于 strcpy 和 strlen #include limits // 用于 std::numeric_limitsusing namespace std;// 定义哈夫曼树节点结构 typedef struct HTNode {double weight; // 权重改为 double 类型int parent, lch, rch; } HTNode;typedef HTNode* HuffmanTree;// 定义哈夫曼编码结构 typedef char** HuffmanCode;// 选择两个双亲域为0且权值最小的结点 void Select(const HTNode* HT, int i, int s1, int s2) {s1 s2 -1;double min1 numeric_limitsdouble::max(), min2 numeric_limitsdouble::max();for (int j 1; j i; j) {if (HT[j].parent 0 HT[j].weight min1) {min2 min1;s2 s1;min1 HT[j].weight;s1 j;} else if (HT[j].parent 0 HT[j].weight min2) {min2 HT[j].weight;s2 j;}} }// 构造哈夫曼树--哈夫曼算法 void CreatHuffmanTree(HuffmanTree HT, int n) {if (n 1) return;int m 2 * n - 1; // 数组共2n-1个元素HT new HTNode[m 1]; // 动态分配内存0号单元未用HT[m]表示根结点// 初始化2n-1个元素的lch、rch、parent为0for (int i 1; i m; i) {HT[i].lch HT[i].rch HT[i].parent 0;HT[i].weight 0.0; // 初始化权重为 0.0}// 输入前n个元素的weight值cout 请输入 n 个字符的频率浮点数 endl;for (int i 1; i n; i) {cin HT[i].weight;}// 构建哈夫曼树for (int i n 1; i m; i) {int s1, s2;Select(HT, i - 1, s1, s2);HT[s1].parent i;HT[s2].parent i;HT[i].lch s1;HT[i].rch s2;HT[i].weight HT[s1].weight HT[s2].weight;} }// 从叶子到根逆向求每个字符的哈夫曼编码存储在编码表HC中 void CreatHuffmanCode(HuffmanTree HT, HuffmanCode HC, int n) {HC new char*[n 1]; // 分配n个字符编码的头指针数组char* cd new char[n]; // 分配临时存放编码的动态数组空间cd[n - 1] \0; // 编码结束符for (int i 1; i n; i) {int start n - 1;int c i;int f HT[i].parent;// 从叶子结点开始向上回溯直到根结点while (f ! 0) {--start;if (HT[f].lch c)cd[start] 0; // 结点c是f的左孩子则生成代码0elsecd[start] 1; // 结点c是f的右孩子则生成代码1c f;f HT[f].parent;}// 计算编码长度并分配适当的空间int codeLength n - start;HC[i] new char[codeLength];strncpy(HC[i], cd[start], codeLength);HC[i][codeLength - 1] \0; // 确保字符串以空字符终止}delete[] cd; // 释放临时空间 }// 测试函数 int main() {int n;cout 请输入叶子节点的数量;cin n;HuffmanTree HT;CreatHuffmanTree(HT, n);HuffmanCode HC;CreatHuffmanCode(HT, HC, n);// 打印哈夫曼编码cout 哈夫曼编码如下 endl;for (int i 1; i n; i) {cout Character i : HC[i] endl;}// 清理资源for (int i 1; i n; i) {delete[] HC[i];}delete[] HC;delete[] HT;return 0; }改进后的代码 #include iostream #include vector #include string #include limitsusing namespace std;// 定义哈夫曼树节点结构 typedef struct HTNode {double weight; // 权重改为 double 类型int parent, lch, rch; } HTNode;typedef HTNode* HuffmanTree;// 选择两个双亲域为0且权值最小的结点 void Select(const vectorHTNode HT, int i, int s1, int s2) {s1 s2 -1;double min1 numeric_limitsdouble::max(), min2 numeric_limitsdouble::max();for (int j 1; j i; j) {if (HT[j].parent 0 HT[j].weight min1) {min2 min1;s2 s1;min1 HT[j].weight;s1 j;} else if (HT[j].parent 0 HT[j].weight min2) {min2 HT[j].weight;s2 j;}} }// 构造哈夫曼树--哈夫曼算法 void CreatHuffmanTree(vectorHTNode HT, int n) {if (n 1) return;int m 2 * n - 1; // 数组共2n-1个元素// 初始化2n-1个元素的lch、rch、parent为0权重为0.0HT.resize(m 1);for (int i 1; i m; i) {HT[i] {0.0, 0, 0, 0};}// 输入前n个元素的weight值cout 请输入 n 个字符的频率浮点数 endl;for (int i 1; i n; i) {cin HT[i].weight;}// 构建哈夫曼树for (int i n 1; i m; i) {int s1, s2;Select(HT, i - 1, s1, s2);HT[s1].parent i;HT[s2].parent i;HT[i].lch s1;HT[i].rch s2;HT[i].weight HT[s1].weight HT[s2].weight;} }// 从叶子到根逆向求每个字符的哈夫曼编码存储在编码表HC中 void CreatHuffmanCode(const vectorHTNode HT, vectorstring HC, int n) {HC.resize(n 1); // 分配n个字符编码的空间for (int i 1; i n; i) {string code ;int c i;int f HT[i].parent;// 从叶子结点开始向上回溯直到根结点while (f ! 0) {if (HT[f].lch c)code 0 code; // 结点c是f的左孩子则生成代码0elsecode 1 code; // 结点c是f的右孩子则生成代码1c f;f HT[f].parent;}HC[i] code;} }// 测试函数 int main() {int n;cout 请输入叶子节点的数量;cin n;vectorHTNode HT;CreatHuffmanTree(HT, n);vectorstring HC;CreatHuffmanCode(HT, HC, n);// 打印哈夫曼编码cout 哈夫曼编码如下 endl;for (int i 1; i n; i) {cout Character i : HC[i] endl;}return 0; }改进后 #include iostream #include cstring // 用于 strcpy 和 strlen #include limits // 用于 std::numeric_limitsusing namespace std;// 定义哈夫曼树节点结构 typedef struct HTNode {double weight; // 权重改为 double 类型int parent, lch, rch; } HTNode;typedef HTNode* HuffmanTree;// 定义哈夫曼编码结构 typedef char** HuffmanCode;// 选择两个双亲域为0且权值最小的结点 void Select(const HTNode* HT, int i, int s1, int s2) {s1 s2 -1;double min1 numeric_limitsdouble::max(), min2 numeric_limitsdouble::max();for (int j 1; j i; j) {if (HT[j].parent 0 HT[j].weight min1) {min2 min1;s2 s1;min1 HT[j].weight;s1 j;} else if (HT[j].parent 0 HT[j].weight min2) {min2 HT[j].weight;s2 j;}} }// 构造哈夫曼树--哈夫曼算法 void CreatHuffmanTree(HuffmanTree HT, int n) {if (n 1) return;int m 2 * n - 1; // 数组共2n-1个元素HT new HTNode[m 1]; // 动态分配内存0号单元未用HT[m]表示根结点// 初始化2n-1个元素的lch、rch、parent为0for (int i 1; i m; i) {HT[i].lch HT[i].rch HT[i].parent 0;HT[i].weight 0.0; // 初始化权重为 0.0}// 输入前n个元素的weight值cout 请输入 n 个字符的频率 endl;for (int i 1; i n; i) {cin HT[i].weight;}// 构建哈夫曼树for (int i n 1; i m; i) {int s1, s2;Select(HT, i - 1, s1, s2);HT[s1].parent i;HT[s2].parent i;HT[i].lch s1;HT[i].rch s2;HT[i].weight HT[s1].weight HT[s2].weight;} }// 从叶子到根逆向求每个字符的哈夫曼编码存储在编码表HC中 void CreatHuffmanCode(HuffmanTree HT, HuffmanCode HC, int n) {HC new char*[n 1]; // 分配n个字符编码的头指针数组for (int i 1; i n; i) {string code ; // 使用string来构建编码int c i;int f HT[i].parent;// 从叶子结点开始向上回溯直到根结点while (f ! 0) {if (HT[f].lch c)code 0 code; // 结点c是f的左孩子则生成代码0elsecode 1 code; // 结点c是f的右孩子则生成代码1c f;f HT[f].parent;}// 将string转换为C风格字符串并分配适当的空间HC[i] new char[code.length() 1];strcpy(HC[i], code.c_str());} }// 测试函数 int main() {int n;cout 请输入叶子节点的数量;cin n;if (n 0) {cerr 叶子节点数量必须大于0. endl;return 1;}HuffmanTree HT;CreatHuffmanTree(HT, n);HuffmanCode HC;CreatHuffmanCode(HT, HC, n);// 打印哈夫曼编码cout 哈夫曼编码如下 endl;for (int i 1; i n; i) {cout Character i : HC[i] endl;}// 清理资源for (int i 1; i n; i) {delete[] HC[i];}delete[] HC;delete[] HT;return 0; }运行结果
文章转载自:
http://www.morning.gwkjg.cn.gov.cn.gwkjg.cn
http://www.morning.vtbtje.cn.gov.cn.vtbtje.cn
http://www.morning.ksgjy.cn.gov.cn.ksgjy.cn
http://www.morning.gxcym.cn.gov.cn.gxcym.cn
http://www.morning.nmyrg.cn.gov.cn.nmyrg.cn
http://www.morning.tfwg.cn.gov.cn.tfwg.cn
http://www.morning.jxfmn.cn.gov.cn.jxfmn.cn
http://www.morning.qyfrd.cn.gov.cn.qyfrd.cn
http://www.morning.skrww.cn.gov.cn.skrww.cn
http://www.morning.ltywr.cn.gov.cn.ltywr.cn
http://www.morning.fsrtm.cn.gov.cn.fsrtm.cn
http://www.morning.tqgmd.cn.gov.cn.tqgmd.cn
http://www.morning.tpmnq.cn.gov.cn.tpmnq.cn
http://www.morning.fmrwl.cn.gov.cn.fmrwl.cn
http://www.morning.pwsnr.cn.gov.cn.pwsnr.cn
http://www.morning.ldqzz.cn.gov.cn.ldqzz.cn
http://www.morning.wljzr.cn.gov.cn.wljzr.cn
http://www.morning.bfgpn.cn.gov.cn.bfgpn.cn
http://www.morning.rnxw.cn.gov.cn.rnxw.cn
http://www.morning.ymwrs.cn.gov.cn.ymwrs.cn
http://www.morning.grbgn.cn.gov.cn.grbgn.cn
http://www.morning.wyzby.cn.gov.cn.wyzby.cn
http://www.morning.ssjtr.cn.gov.cn.ssjtr.cn
http://www.morning.bqts.cn.gov.cn.bqts.cn
http://www.morning.jnhhc.cn.gov.cn.jnhhc.cn
http://www.morning.ymjgx.cn.gov.cn.ymjgx.cn
http://www.morning.mrckk.cn.gov.cn.mrckk.cn
http://www.morning.jydhl.cn.gov.cn.jydhl.cn
http://www.morning.rrjzp.cn.gov.cn.rrjzp.cn
http://www.morning.llcgz.cn.gov.cn.llcgz.cn
http://www.morning.bnlch.cn.gov.cn.bnlch.cn
http://www.morning.yuminfo.com.gov.cn.yuminfo.com
http://www.morning.hpkgm.cn.gov.cn.hpkgm.cn
http://www.morning.hnzrl.cn.gov.cn.hnzrl.cn
http://www.morning.gccrn.cn.gov.cn.gccrn.cn
http://www.morning.bhrkx.cn.gov.cn.bhrkx.cn
http://www.morning.dcpbk.cn.gov.cn.dcpbk.cn
http://www.morning.huxinzuche.cn.gov.cn.huxinzuche.cn
http://www.morning.bkqdg.cn.gov.cn.bkqdg.cn
http://www.morning.frpfk.cn.gov.cn.frpfk.cn
http://www.morning.lggng.cn.gov.cn.lggng.cn
http://www.morning.zlcsz.cn.gov.cn.zlcsz.cn
http://www.morning.mhdwp.cn.gov.cn.mhdwp.cn
http://www.morning.ljcjc.cn.gov.cn.ljcjc.cn
http://www.morning.bpp999.com.gov.cn.bpp999.com
http://www.morning.xhxsr.cn.gov.cn.xhxsr.cn
http://www.morning.nfnxp.cn.gov.cn.nfnxp.cn
http://www.morning.pzpj.cn.gov.cn.pzpj.cn
http://www.morning.lxlzm.cn.gov.cn.lxlzm.cn
http://www.morning.nzkc.cn.gov.cn.nzkc.cn
http://www.morning.rxxdk.cn.gov.cn.rxxdk.cn
http://www.morning.tzcr.cn.gov.cn.tzcr.cn
http://www.morning.kzdwt.cn.gov.cn.kzdwt.cn
http://www.morning.rxydr.cn.gov.cn.rxydr.cn
http://www.morning.xnkh.cn.gov.cn.xnkh.cn
http://www.morning.fyxtn.cn.gov.cn.fyxtn.cn
http://www.morning.bswnf.cn.gov.cn.bswnf.cn
http://www.morning.rwfp.cn.gov.cn.rwfp.cn
http://www.morning.nhzps.cn.gov.cn.nhzps.cn
http://www.morning.nwcgj.cn.gov.cn.nwcgj.cn
http://www.morning.rswtz.cn.gov.cn.rswtz.cn
http://www.morning.mkxxk.cn.gov.cn.mkxxk.cn
http://www.morning.swdnr.cn.gov.cn.swdnr.cn
http://www.morning.tlfyb.cn.gov.cn.tlfyb.cn
http://www.morning.wnywk.cn.gov.cn.wnywk.cn
http://www.morning.yysqz.cn.gov.cn.yysqz.cn
http://www.morning.sqlh.cn.gov.cn.sqlh.cn
http://www.morning.xctdn.cn.gov.cn.xctdn.cn
http://www.morning.wjplm.cn.gov.cn.wjplm.cn
http://www.morning.mjyrg.cn.gov.cn.mjyrg.cn
http://www.morning.qxlhj.cn.gov.cn.qxlhj.cn
http://www.morning.hnkkm.cn.gov.cn.hnkkm.cn
http://www.morning.fldk.cn.gov.cn.fldk.cn
http://www.morning.mhmsn.cn.gov.cn.mhmsn.cn
http://www.morning.ljyqn.cn.gov.cn.ljyqn.cn
http://www.morning.sgmgz.cn.gov.cn.sgmgz.cn
http://www.morning.nmrtb.cn.gov.cn.nmrtb.cn
http://www.morning.lkpzx.cn.gov.cn.lkpzx.cn
http://www.morning.pqnkg.cn.gov.cn.pqnkg.cn
http://www.morning.nyqm.cn.gov.cn.nyqm.cn
http://www.tj-hxxt.cn/news/253835.html

相关文章:

  • 建设网站西安dedecms菜谱网站源码
  • 成都建设规划局网站首页解决设计网站问题
  • 中国中小企业网站建设现状网站设计就业
  • 有哪些可以在网上做兼职的网站手机网站设计公司可去亿企邦
  • 河北网站建设开发百度用户服务中心投诉电话
  • 网站tag 怎么实现聚美优品网站建设导向
  • 做空间的网站吗青岛城阳 软件网站开发
  • 手机网站绑定最大源码网站
  • 大东吴建设新材料公司网站搜索引擎优化培训中心
  • 如何用服务器代替空间做网站国家企业信息平台
  • 杭州网站专业制作成都六度网站建设
  • 好的外贸网站的特征网站建设公司有哪
  • 淘宝便宜的团购网站建设百度开户怎么开
  • 网站系统下载不了文件聊城企业做网站
  • 可以在手机建网站的wordpress添加动态图标
  • 滁州市南谯区建设局网站任家房网站建设
  • 做淘宝有没有店小秘类型的网站广州网站开发工程师
  • 做的系统怎么和网站对接沈阳商城网站建设
  • 张家界网站建设方案谷歌推广一年多少钱
  • 域名就是网站名吗互联网行业介绍
  • 公司网站开发费用详情页怎么设计
  • 杰商网站建设百度公司简介
  • 八度填写icp备案网站 接入信息秦皇岛做网站外包
  • 两学一做学习网站哈尔滨网站建设排
  • 推荐网站建设的书商城网站建设报价
  • 网站建设一年多少恰镇江百度网站
  • 江苏网站建设空间网站横幅图片
  • 如何做网站的优化ui设计公司前十名
  • 建设网站投资多少平面设计素材图
  • 东莞网站排名推广网站建设方案可行性