中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁(yè) > news >正文

網(wǎng)站創(chuàng)作規(guī)劃百度搜圖

網(wǎng)站創(chuàng)作規(guī)劃,百度搜圖,wordpress種子在線(xiàn)播放,最好的免費(fèi)網(wǎng)站空間本文承接自: 算法實(shí)戰(zhàn):親自寫(xiě)紅黑樹(shù)之一-CSDN博客 算法實(shí)戰(zhàn):親自寫(xiě)紅黑樹(shù)之二 完整代碼-CSDN博客 算法實(shí)戰(zhàn):親自寫(xiě)紅黑樹(shù)之三 算法詳解-CSDN博客 算法實(shí)戰(zhàn):親自寫(xiě)紅黑樹(shù)之四 插入insert的平衡-CSDN博客 目錄 一、入口…

? ? ? ? 本文承接自:

????????算法實(shí)戰(zhàn):親自寫(xiě)紅黑樹(shù)之一-CSDN博客

????????算法實(shí)戰(zhàn):親自寫(xiě)紅黑樹(shù)之二 完整代碼-CSDN博客

????????算法實(shí)戰(zhàn):親自寫(xiě)紅黑樹(shù)之三 算法詳解-CSDN博客

????????算法實(shí)戰(zhàn):親自寫(xiě)紅黑樹(shù)之四 插入insert的平衡-CSDN博客

目錄

一、入口

二、刪除

三、轉(zhuǎn)換中間節(jié)點(diǎn)(左右子樹(shù)都存在)

四、簡(jiǎn)單情形

五、復(fù)雜情形


一、入口

? ? ? ? 有幾個(gè)不同參數(shù)的刪除入口:

	bool erase(const_iterator it){T_COMP comp;return erase(it, comp);}//刪除并指向下一個(gè)iterator& DeleteAndMoveNext(iterator& it){if (end() == it)return it;iterator& ret = it;iterator tmp = ret;++ret;erase(tmp);return ret;}bool erase(const_iterator it, T_COMP& comp){if (it.handle < 0)return true;//DEBUG_LOG<<"要?jiǎng)h除節(jié)點(diǎn)"<<show(it.handle)<<endi;bool ret = _erase(it.handle);return ret;}bool erase(T_DATA const& data){T_COMP comp;return erase(data, comp);}bool erase(T_DATA const& data, T_COMP& comp){const_iterator it = find(data, comp);if (it.handle < 0)return true;return erase(it, comp);}

? ? ? ? 最終都進(jìn)入_erase(h),直接刪除一個(gè)節(jié)點(diǎn)。

? ? ? ? 在到達(dá)這一步之前要先找到要?jiǎng)h除的節(jié)點(diǎn),這個(gè)屬于二叉樹(shù)的標(biāo)準(zhǔn)算法,很簡(jiǎn)單。

二、刪除

? ? ? ? 刪除的控制代碼:

	//刪除bool _erase(T_SHM_SIZE position){string  report;//DEBUG_LOG<<"開(kāi)始刪除...."<<Report(report) <<endi;bool vLeft;//刪除的節(jié)點(diǎn)是左子節(jié)點(diǎn)bool vRed;//刪除的節(jié)點(diǎn)是紅色T_SHM_SIZE p = TREE_NODE::at(position).hParent;//父節(jié)點(diǎn)T_SHM_SIZE u;//替換節(jié)點(diǎn)bool uRed;//替換節(jié)點(diǎn)是紅色(-1為黑色)if (TREE_NODE::at(position).hLeft != -1 && TREE_NODE::at(position).hRight != -1){debug_log << "左右都存在,替換為左子樹(shù)最大值" << endi;if (!__erase_change_middle(position, vLeft, vRed, u, uRed, p))return false;debug();return _erase(position);}else if (-1 == TREE_NODE::at(position).hLeft && -1 == TREE_NODE::at(position).hRight){vLeft = TREE_NODE::at(position).isLeft();vRed = TREE_NODE::at(position).bColorRed;u = -1;uRed = false;if (-1 == p){debug_log << "最后一個(gè)節(jié)點(diǎn)" << endi;tree_head->hHead = -1;vRed = true;//阻止后面繼續(xù)處理,刪除紅色無(wú)需額外處理}else{debug_log << "葉子節(jié)點(diǎn)" << endi;if (TREE_NODE::at(position).isLeft())TREE_NODE::at(p).hLeft = -1;else TREE_NODE::at(p).hRight = -1;}}else{vLeft = TREE_NODE::at(position).isLeft();vRed = TREE_NODE::at(position).bColorRed;if (-1 != TREE_NODE::at(position).hLeft){debug_log << "左子樹(shù)存在" << endi;u = TREE_NODE::at(position).hLeft;}else{debug_log << "右子樹(shù)存在" << endi;u = TREE_NODE::at(position).hRight;}if (-1 == p){debug_log << "根節(jié)點(diǎn)" << endi;tree_head->hHead = u;}else{if (vLeft)TREE_NODE::at(p).hLeft = u;else TREE_NODE::at(p).hRight = u;}TREE_NODE::at(u).hParent = p;uRed = TREE_NODE::at(u).bColorRed;p = TREE_NODE::at(u).hParent;}bool ret = true;if (vRed){debug_log << "刪除紅色節(jié)點(diǎn),不用調(diào)整" << endi;}else if (!vRed && uRed){debug_log << "刪除黑色節(jié)點(diǎn),替換節(jié)點(diǎn)紅色改為黑色" << endi;TREE_NODE::at(u).bColorRed = false;}else{debug_log << "刪除雙黑節(jié)點(diǎn)================================================" << endi;ret = _RB_erase_Balance(p, u);}debug();if (ret)__erase_node(position);if (-1 != tree_head->hHead)TREE_NODE::at(tree_head->hHead).bColorRed = false;return ret;}

? ? ? ? 這個(gè)函數(shù)的邏輯分為兩部分:

  1. 分析要?jiǎng)h除的節(jié)點(diǎn)的分支情況,將左右節(jié)點(diǎn)都存在的情形改為刪除葉子數(shù)據(jù)節(jié)點(diǎn)(不是紅黑樹(shù)意義的葉子節(jié)點(diǎn),指一般意義的葉子節(jié)點(diǎn)),然后確定刪除節(jié)點(diǎn)和替換節(jié)點(diǎn)。
  2. 根據(jù)刪除節(jié)點(diǎn)和替換節(jié)點(diǎn)的顏色進(jìn)行處理,黑節(jié)點(diǎn)減少則需要平衡。

三、轉(zhuǎn)換中間節(jié)點(diǎn)(左右子樹(shù)都存在)

? ? ? ? 很容易把中間節(jié)點(diǎn)替換掉,跟左子樹(shù)最大值或者右子樹(shù)最小值交換即可。

? ? ? ? 本代碼用__erase_change_middle(h)函數(shù)做這件事,將顏色也做了交換(邏輯上相當(dāng)于不改變結(jié)構(gòu)數(shù)據(jù),只交換用戶(hù)數(shù)據(jù),但是我們的用戶(hù)數(shù)據(jù)一般都很大,所以反過(guò)來(lái)操作,改變了除用戶(hù)數(shù)據(jù)以外的所有結(jié)構(gòu)數(shù)據(jù)),執(zhí)行完畢后紅黑樹(shù)結(jié)構(gòu)仍然正確,刪除節(jié)點(diǎn)變成了最多只有一個(gè)子樹(shù)的節(jié)點(diǎn)。

	//刪除中間節(jié)點(diǎn),將中間節(jié)點(diǎn)替換為左子樹(shù)最大值(數(shù)據(jù)不動(dòng),改變樹(shù)結(jié)構(gòu))bool __erase_change_middle(T_SHM_SIZE const position, bool& vLeft, bool& vRed, T_SHM_SIZE& u, bool& uRed, T_SHM_SIZE& p){string tmp;T_SHM_SIZE new_position = TREE_NODE::at(position).hLeft;if (-1 != new_position){while (-1 != TREE_NODE::at(new_position).hRight){new_position = TREE_NODE::at(new_position).hRight;}}debug_log << "position " << position << " new_position " << new_position << endi;debug_log << "position " << position << TREE_NODE::at(position).toString(tmp) << endi;debug_log << "new_position " << new_position << TREE_NODE::at(new_position).toString(tmp) << endi;vLeft = false;vRed = TREE_NODE::at(new_position).bColorRed;p = TREE_NODE::at(new_position).hParent;debug_log << "p " << TREE_NODE::at(p).toString(tmp) << endi;if (p != position){debug_log << "非直接對(duì)調(diào) p " << TREE_NODE::at(p).toString(tmp) << ende;TREE_NODE t;t._CopyWithoutData(TREE_NODE::at(new_position));TREE_NODE::at(new_position)._CopyWithoutData(TREE_NODE::at(position));TREE_NODE::at(position)._CopyWithoutData(t);debug_log << "position " << TREE_NODE::at(position).toString(tmp) << endi;debug_log << "new_position " << TREE_NODE::at(new_position).toString(tmp) << endi;//注意,這里無(wú)法用isLeft來(lái)判斷,因?yàn)楦腹?jié)點(diǎn)的hLeft和hRight是舊數(shù)據(jù)if (TREE_NODE::at(new_position).hParent != -1){if (TREE_NODE::at(TREE_NODE::at(new_position).hParent).hLeft == position)TREE_NODE::at(TREE_NODE::at(new_position).hParent).hLeft = new_position;else TREE_NODE::at(TREE_NODE::at(new_position).hParent).hRight = new_position;}if (TREE_NODE::at(position).hParent != -1){if (TREE_NODE::at(TREE_NODE::at(position).hParent).hLeft==new_position)TREE_NODE::at(TREE_NODE::at(position).hParent).hLeft = position;else TREE_NODE::at(TREE_NODE::at(position).hParent).hRight = position;}if (TREE_NODE::at(new_position).hLeft != -1)TREE_NODE::at(TREE_NODE::at(new_position).hLeft).hParent = new_position;if (TREE_NODE::at(position).hLeft != -1)TREE_NODE::at(TREE_NODE::at(position).hLeft).hParent = position;if (TREE_NODE::at(new_position).hRight != -1)TREE_NODE::at(TREE_NODE::at(new_position).hRight).hParent = new_position;if (TREE_NODE::at(position).hRight != -1)TREE_NODE::at(TREE_NODE::at(position).hRight).hParent = position;}else{debug_log << "直接對(duì)調(diào) p " << TREE_NODE::at(p).toString(tmp) << endi;TREE_NODE t;t._CopyWithoutData(TREE_NODE::at(new_position));TREE_NODE::at(new_position)._CopyWithoutData(TREE_NODE::at(position));TREE_NODE::at(position)._CopyWithoutData(t);debug_log << "position " << TREE_NODE::at(position).toString(tmp) << endi;debug_log << "new_position " << TREE_NODE::at(new_position).toString(tmp) << endi;//注意,這里無(wú)法用isLeft來(lái)判斷,因?yàn)楦腹?jié)點(diǎn)的hLeft和hRight是舊數(shù)據(jù)if (TREE_NODE::at(new_position).hParent != -1){if (TREE_NODE::at(TREE_NODE::at(new_position).hParent).hLeft == position)TREE_NODE::at(TREE_NODE::at(new_position).hParent).hLeft = new_position;else TREE_NODE::at(TREE_NODE::at(new_position).hParent).hRight = new_position;}TREE_NODE::at(position).hParent = new_position;TREE_NODE::at(new_position).hLeft=position;if (TREE_NODE::at(position).hLeft != -1)TREE_NODE::at(TREE_NODE::at(position).hLeft).hParent = position;if (TREE_NODE::at(new_position).hRight != -1)TREE_NODE::at(TREE_NODE::at(new_position).hRight).hParent = new_position;if (TREE_NODE::at(position).hRight != -1)TREE_NODE::at(TREE_NODE::at(position).hRight).hParent = position;}//如果是根節(jié)點(diǎn)if (-1 == TREE_NODE::at(new_position).hParent){TREE_NODE::at(new_position).bColorRed = false;tree_head->hHead = new_position;}debug_log << "position " << TREE_NODE::at(position).toString(tmp) << endi;debug_log << "new_position " << TREE_NODE::at(new_position).toString(tmp) << endi;debug();return true;}

? ? ? ? 這個(gè)代碼不復(fù)雜,就是累。

四、簡(jiǎn)單情形

? ? ? ? 現(xiàn)在要?jiǎng)h除的節(jié)點(diǎn)要么沒(méi)有子樹(shù),要么只有一個(gè)子樹(shù)(說(shuō)起來(lái)是子樹(shù),其實(shí)最多就是一個(gè)紅節(jié)點(diǎn),否則必定違反紅黑樹(shù)規(guī)則),只需要把子樹(shù)接上去就可以了,然后把要?jiǎng)h除的節(jié)點(diǎn)扔掉。

? ? ? ? 這里我們還是用一般二叉樹(shù)的概念來(lái)理解,以下說(shuō)的節(jié)點(diǎn)都是數(shù)據(jù)節(jié)點(diǎn),不包括空節(jié)點(diǎn)。

  1. ? ? ? ? 如果刪除節(jié)點(diǎn)是紅節(jié)點(diǎn),不管下面有沒(méi)有子樹(shù),不用平衡,因?yàn)椴挥绊懸?guī)則。
  2. ? ? ? ? 如果刪除節(jié)點(diǎn)是黑節(jié)點(diǎn)而下面有一個(gè)紅節(jié)點(diǎn)(前面已經(jīng)說(shuō)了,沒(méi)有更多可能性),把這個(gè)紅節(jié)點(diǎn)變成黑節(jié)點(diǎn)就行了。
  3. ? ? ? ? 如果刪除節(jié)點(diǎn)是黑節(jié)點(diǎn)而下面沒(méi)有可供變色的紅節(jié)點(diǎn)(也就是沒(méi)有子節(jié)點(diǎn),紅黑樹(shù)規(guī)則不允許下面有黑色數(shù)據(jù)節(jié)點(diǎn),因?yàn)橹挥幸粋€(gè)子樹(shù),另外一邊深度是0),這就導(dǎo)致紅黑樹(shù)規(guī)則被破壞,很多文章稱(chēng)這種情況為“雙黑”,其實(shí)就是黑節(jié)點(diǎn)少了。

? ? ? ? 第三種情形就被稱(chēng)為“復(fù)雜情形”,需要調(diào)用_RB_erase_Balance()來(lái)平衡。

五、復(fù)雜情形

? ? ? ? 前面已經(jīng)說(shuō)了,所謂復(fù)雜情形就是少了一個(gè)黑節(jié)點(diǎn),現(xiàn)在涉及到這么幾個(gè)節(jié)點(diǎn):

? ? ? ? u 替換節(jié)點(diǎn),也就是出問(wèn)題的節(jié)點(diǎn),這個(gè)節(jié)點(diǎn)的高度比兄弟少一。這個(gè)節(jié)點(diǎn)可能是是空節(jié)點(diǎn)。

? ? ? ? p 替換節(jié)點(diǎn)的父節(jié)點(diǎn)

? ? ? ? s 替換節(jié)點(diǎn)的兄弟節(jié)點(diǎn)

? ? ? ? 由于紅黑樹(shù)的規(guī)則限制,最初進(jìn)入這種情形只可能是被刪除節(jié)點(diǎn)下沒(méi)有子節(jié)點(diǎn),所以一定是p的一邊為空另一邊黑高為1。遞歸之后黑高少一的節(jié)點(diǎn)就有了各種可能,可能是紅色或黑色,可能有或沒(méi)有子節(jié)點(diǎn)。

? ? ? ? 重新平衡有三種策略:

  1. 如果能把p改成黑同時(shí)讓s黑高減一,這樣就恢復(fù)平衡了,這要求p為紅,p為紅則s必為黑,如果s的子節(jié)點(diǎn)均為黑(此時(shí)s的子節(jié)點(diǎn)必定都是空節(jié)點(diǎn),否則違反紅黑樹(shù)規(guī)則),只需要將p和s顏色交換就可以了。
  2. 另一邊如果有紅色節(jié)點(diǎn),能挪過(guò)來(lái)改成黑色,平衡就完成了。按照紅色節(jié)點(diǎn)的位置不同,需要有不同的挪法,雖然繁瑣但并不困難。
  3. 另一邊如果有紅色節(jié)點(diǎn),挪過(guò)來(lái)也不能平衡,想辦法把問(wèn)題往上移,遞歸處理。
psss處理
1黑黑/不存在p、s交換顏色,問(wèn)題上移,遞歸
2紅紅挪一個(gè)紅改成黑
3黑黑-[紅紅紅紅]旋轉(zhuǎn)p,p、s交換顏色,p還是少1,但是變色了,重新處理p,遞歸
4紅紅挪一個(gè)紅改成黑
5黑黑/不存在p、s交換顏色

? ? ? ? 上表是所有情形,“不存在”指的是空節(jié)點(diǎn),也是黑色。ss指的是s的子節(jié)點(diǎn)?!凹t紅”也可能是只有一個(gè)紅,因?yàn)樘幚頃r(shí)只要有一個(gè)紅就不用管另一個(gè)。第三種情形的ss是雙黑,后面還可能有紅色子節(jié)點(diǎn),不過(guò)與算法無(wú)關(guān)。

? ? ? ? 為什么只有五種組合而不是八種?因?yàn)椴辉试S連續(xù)紅,另外三種不可能存在。

? ? ? ? 上面第二種和第四種處理方式相同,因?yàn)椴⒉魂P(guān)心p的顏色,通過(guò)挪一個(gè)改成黑,下面就平衡了。

? ? ? ? 代碼的實(shí)際處理邏輯是從ss開(kāi)始判斷的,先分成ss至少有一個(gè)紅和沒(méi)有紅,然后沒(méi)有紅的分三種,有紅的分四種(所謂四種不過(guò)是四種結(jié)構(gòu)的挪法而已)。

? ? ? ? 代碼如下:

	//刪除時(shí)做平衡,u可能是空節(jié)點(diǎn)bool _RB_erase_Balance(T_SHM_SIZE p, T_SHM_SIZE u){if (-1 == p){debug_log << "已經(jīng)到頂,結(jié)束" << endi;return true;}string tmp;debug_log << "p " << TREE_NODE::at(p).toString(tmp) << endi;if (u != -1)debug_log << "u " << TREE_NODE::at(u).toString(tmp) << endi;else debug_log << "u -1" << endi;bool isL = (u == TREE_NODE::at(p).hRight);//兄弟節(jié)點(diǎn)是否是左節(jié)點(diǎn)T_SHM_SIZE s = (isL ? TREE_NODE::at(p).hLeft : TREE_NODE::at(p).hRight);T_SHM_SIZE r = -1;//s的紅色子節(jié)點(diǎn)bool is_rL;//s的紅色子節(jié)點(diǎn)是否是左節(jié)點(diǎn)debug_log << "平衡:p " << p << " u " << u << " s " << s << " TREE_NODE::at(s).hRight " << TREE_NODE::at(s).hRight << endi;if (TREE_NODE::at(s).hRight != -1 && TREE_NODE::at(TREE_NODE::at(s).hRight).bColorRed){r = TREE_NODE::at(s).hRight;is_rL = false;}else if (TREE_NODE::at(s).hLeft != -1 && TREE_NODE::at(TREE_NODE::at(s).hLeft).bColorRed){r = TREE_NODE::at(s).hLeft;is_rL = true;}else{r = -1;is_rL = false;//無(wú)意義}debug_log << "p " << p << " u " << u << " s " << s << " r(-1表示雙黑) " << r << endi;debug();if (-1 == r){debug_log << "s子節(jié)點(diǎn)均為黑" << endi;if (TREE_NODE::at(p).bColorRed){debug_log << "p為紅,s必為黑 s改為紅p改為黑 結(jié)束" << endi;//s子節(jié)點(diǎn)均為黑,p改為黑,所以s改為紅是安全的,不會(huì)造成雙紅TREE_NODE::at(s).bColorRed = true;TREE_NODE::at(p).bColorRed = false;debug();}else{debug_log << "p為黑" << endi;if (!TREE_NODE::at(s).bColorRed){debug_log << "s為黑 s改為紅平衡下層并向上遞歸" << endi;//p的左右分支均少1,所以p成為新的雙黑節(jié)點(diǎn)//置s為紅,p為新的u,遞歸TREE_NODE::at(s).bColorRed = true;debug();return _RB_erase_Balance(TREE_NODE::at(p).hParent, p);}else{debug_log << "s為紅 " << TREE_NODE::at(s).toString(tmp) << endi;debug_log << TREE_NODE::at(TREE_NODE::at(s).hParent).toString(tmp) << endi;if (TREE_NODE::at(s).isLeft()){debug_log << "s為左 " << s << endi;//右旋p_RRotate(p);}else{debug_log << "s為右" << endi;_LRotate(p);}//p和s變色TREE_NODE::at(s).bColorRed = false;TREE_NODE::at(p).bColorRed = true;debug();//此時(shí)深度情況不變,但p變成了紅,重新對(duì)p和u做平衡處理return _RB_erase_Balance(p, u);}}}else{if (isL && is_rL){debug_log << "LL" << ende;TREE_NODE::at(r).bColorRed = TREE_NODE::at(s).bColorRed;TREE_NODE::at(s).bColorRed = TREE_NODE::at(p).bColorRed;_RRotate(p);TREE_NODE::at(p).bColorRed = false;}else if (isL && !is_rL){debug_log << "LR" << endi;debug();TREE_NODE::at(r).bColorRed = TREE_NODE::at(p).bColorRed;debug();_LRotate(s);debug();_RRotate(p);debug();TREE_NODE::at(p).bColorRed = false;debug();}else if (!isL && is_rL){debug_log << "RL------------------------" << endi;debug();TREE_NODE::at(r).bColorRed = TREE_NODE::at(p).bColorRed;debug();_RRotate(s);debug();string tmp;debug_log << "p " << TREE_NODE::at(p).toString(tmp) << endi;debug_log << "s " << TREE_NODE::at(p).toString(tmp) << endi;_LRotate(p);debug();TREE_NODE::at(p).bColorRed = false;debug();}else if (!isL && !is_rL){debug_log << "RR" << endi;TREE_NODE::at(r).bColorRed = TREE_NODE::at(s).bColorRed;TREE_NODE::at(s).bColorRed = TREE_NODE::at(p).bColorRed;_LRotate(p);TREE_NODE::at(p).bColorRed = false;}else{thelog << "非預(yù)期的狀態(tài)" << ende;return false;}}return true;}

? ? ? ? 我感覺(jué)吧,我應(yīng)該剛好解決了一部分人的困惑。

(這里是結(jié)束,而且是整個(gè)系列的結(jié)束)

http://www.risenshineclean.com/news/50015.html

相關(guān)文章:

  • 山東省城鄉(xiāng)建設(shè)廳官網(wǎng)seo經(jīng)典案例分析
  • 衡水wap網(wǎng)站建設(shè)會(huì)計(jì)培訓(xùn)班的費(fèi)用是多少
  • 可以查企業(yè)備案的網(wǎng)站最新軍事新聞事件今天
  • 深圳專(zhuān)業(yè)網(wǎng)站制作多少錢(qián)十大騙子教育培訓(xùn)機(jī)構(gòu)
  • 武漢設(shè)計(jì)網(wǎng)優(yōu)化seo系統(tǒng)
  • 國(guó)外做文化的網(wǎng)站如何搭建網(wǎng)站平臺(tái)
  • 水果網(wǎng)站設(shè)計(jì)論文營(yíng)銷(xiāo)案例分析報(bào)告模板
  • 建筑模板生產(chǎn)廠家東莞seo外包平臺(tái)
  • 福田附近網(wǎng)站建設(shè)怎么自己搭建網(wǎng)站
  • python做調(diào)查問(wèn)卷網(wǎng)站百度指數(shù)批量
  • 廣西南寧生活網(wǎng)百度推廣優(yōu)化
  • 廣東省城鄉(xiāng)與住房建設(shè)廳網(wǎng)站網(wǎng)站seo優(yōu)化培訓(xùn)
  • 羽毛球賽事策劃方案石家莊seo推廣公司
  • 唐山做網(wǎng)站建設(shè)公司搜索引擎數(shù)據(jù)庫(kù)
  • 如何規(guī)劃網(wǎng)站欄目建網(wǎng)站用什么軟件
  • 南陽(yáng)響應(yīng)式網(wǎng)站seo基礎(chǔ)入門(mén)
  • 江蘇煙草電商網(wǎng)站電商網(wǎng)站搭建
  • 泰安可以做網(wǎng)站的公司好搜網(wǎng)惠州seo
  • 交河做網(wǎng)站價(jià)格深圳網(wǎng)絡(luò)推廣外包公司
  • 網(wǎng)站沒(méi)有備案可以做百度推廣嗎關(guān)鍵詞如何確定
  • 微信后臺(tái)怎么做微網(wǎng)站磁力棒
  • 孝感網(wǎng)站建設(shè)公司站點(diǎn)推廣是什么意思
  • a站免費(fèi)最好看的電影片推薦百度推廣怎么推廣
  • 網(wǎng)站建設(shè)肆金手指排名8模板建站公司
  • 網(wǎng)站如何做頁(yè)數(shù)無(wú)憂(yōu)seo博客
  • 創(chuàng)辦個(gè)人網(wǎng)站交換友情鏈接的注意事項(xiàng)
  • 專(zhuān)門(mén)做婚慶的網(wǎng)站拓客平臺(tái)有哪些
  • 廣州購(gòu)物網(wǎng)站建設(shè)報(bào)價(jià)今天的新聞最新消息
  • 網(wǎng)站開(kāi)發(fā)后端開(kāi)發(fā)深圳網(wǎng)站建設(shè)專(zhuān)業(yè)樂(lè)云seo
  • wordpress跳轉(zhuǎn)頁(yè)面插件百度seo關(guān)鍵詞排名s