免费国产精品自在自线-91精品国产色综合久久久浪潮-99热久久免费频精品-国产精品国模在线观看-久久亚洲国产精品成人?V秋霞-久久国产一级A片免费播放-亚洲国产欧洲综合97久久-久久国产白嫩美女呻吟高潮

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運營的一線實戰(zhàn)洞察。

C數(shù)據(jù)結(jié)構(gòu)習(xí)題解答落地:ADT、復(fù)雜度實測與差分對拍

C數(shù)據(jù)結(jié)構(gòu)習(xí)題解答落地:ADT、復(fù)雜度實測與差分對拍 簡介這份資源是《數(shù)據(jù)結(jié)構(gòu)與算法分析C語言描述》第二版的配套習(xí)題解答手冊面向正在學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)與算法分析課程、準(zhǔn)備考試或希望對照課后練習(xí)查漏補缺的讀者。壓縮包內(nèi)僅含1個PDF文件大小約233KB集中呈現(xiàn)原書多數(shù)練習(xí)的參考答案便于按章節(jié)檢索。內(nèi)容覆蓋算法分析、表棧與隊列、樹、哈希、優(yōu)先隊列、排序、不相交集合、圖算法、算法設(shè)計技巧及攤還分析等主題解答以偽C代碼和思路說明為主細(xì)節(jié)多留給讀者自行補全。已有142人學(xué)習(xí)下載。它適合在完成課后題后核對結(jié)論、理解復(fù)雜度推導(dǎo)與經(jīng)典結(jié)構(gòu)實現(xiàn)思路也能幫助讀者發(fā)現(xiàn)理解偏差并深化對數(shù)據(jù)結(jié)構(gòu)與算法設(shè)計的掌握。1. 一份習(xí)題解答手冊真正的用法先跑通再對拍最后改參數(shù)很多人拿到 C 語言數(shù)據(jù)結(jié)構(gòu)與算法分析的教材和配套習(xí)題解答手冊第一反應(yīng)是當(dāng)小說翻看完 AVL 旋轉(zhuǎn)覺得自己懂了合上書寫不出三行。真正有用的用法是把解答手冊當(dāng)成一份“規(guī)范文檔 測試用例庫”而不當(dāng)成閱讀材料。手冊里出現(xiàn)的每一種結(jié)構(gòu)都要落成能編譯、能被 sanitizer 檢查、能被隨機數(shù)據(jù)反復(fù)錘打的一份 C 代碼每一個復(fù)雜度結(jié)論都要在自己的機器上換成可測的數(shù)字。這條路徑適合兩類人正在用 C 語言補數(shù)據(jù)結(jié)構(gòu)底子的開發(fā)者以及面試或工程里需要手寫鏈表、堆、散列的熟手。后面從偽代碼落地講到差分對拍把手冊里的答案變成你倉庫里能回歸的資產(chǎn)。2. 從偽代碼到能編譯的 CADT 骨架、指針與內(nèi)存的三條線解答手冊里的代碼片段多半是“示意性”的函數(shù)簽名省略了錯誤返回節(jié)點定義省略了 typedef內(nèi)存分配干脆寫成new或者一句話帶過。這些片段作為思路無誤直接貼進(jìn)編輯器就會連鎖翻車。這一章解決的是最底層的一步把手冊里的抽象數(shù)據(jù)類型ADT描述還原成一份結(jié)構(gòu)清晰、內(nèi)存可控、能開告警編譯的 C 工程骨架。2.1 為什么解答里的偽代碼不能直接抄成 CC 語言版教材的行文習(xí)慣是先用 ADT 定義接口再給實現(xiàn)思路最后給一段接近 C 但不等同于 C 的代碼。最容易出問題的是三處。第一處是節(jié)點定義。手冊里常寫“設(shè)節(jié)點包含一個元素和兩個指針”實際落地要考慮 key 的類型、是否需要父指針、是否需要維護(hù) size 和 height 這類附加字段。這些字段一旦寫進(jìn)結(jié)構(gòu)體所有旋轉(zhuǎn)、刪除、重建邏輯都要跟著改所以結(jié)構(gòu)體定義必須在動手前一次定清楚中途加字段的代價很高。第二處是錯誤處理。手冊里的Insert往往只關(guān)心“插入成功”這一條路徑?jīng)]有說明分配失敗怎么辦、重復(fù)鍵怎么辦、刪除不存在的鍵怎么辦。真實代碼里這三條路徑都必須有明確返回值否則調(diào)用方只能靠全局變量猜狀態(tài)。第三處是所有權(quán)。手冊講鏈表刪除節(jié)點時寫“釋放該節(jié)點”但沒講清楚被刪除節(jié)點里的數(shù)據(jù)指針由誰釋放。這在單向鏈表上不致命在多級結(jié)構(gòu)散列表的桶、圖的鄰接表上就會變成連鎖泄漏。我一般的做法是先寫頭文件把接口和錯誤返回定死再寫實現(xiàn)。接口定下來之后實現(xiàn)怎么寫都不會跑偏。2.2 一個可復(fù)用的 ADT 頭文件骨架下面這份骨架是從手冊里最常見的“帶哨兵的單向鏈表”抽象出來的可以直接當(dāng)模板用/* list.h —— 接口先行所有權(quán)、返回碼、不變量寫清楚 */ #ifndef LIST_H #define LIST_H #include stddef.h typedef int ElementType; /* 元素類型集中在這里改實現(xiàn)文件不用動 */ typedef enum { LIST_OK 0, LIST_ERR_ALLOC -1, /* 內(nèi)存分配失敗 */ LIST_ERR_NOT_FOUND -2, /* 刪除/查找目標(biāo)不存在 */ LIST_ERR_INVALID -3 /* 空指針、越界等調(diào)用方錯誤 */ } ListStatus; typedef struct ListNode { ElementType value; struct ListNode *next; } ListNode; typedef struct { ListNode *head; /* 哨兵頭節(jié)點不存有效數(shù)據(jù) */ size_t size; /* 維護(hù)長度避免每次都遍歷 */ } List; ListStatus list_init(List *l); ListStatus list_push_front(List *l, ElementType v); ListStatus list_remove(List *l, ElementType v); void list_destroy(List *l); /* 釋放全部節(jié)點調(diào)用后 size 歸零 */ #endif邏輯說明ElementType單獨 typedef 是手冊里 ADT 思想最值錢的一條——換元素類型時只改一行。哨兵頭節(jié)點讓插入和刪除都不需要特判空鏈表這是教材里反復(fù)強調(diào)的“啞節(jié)點”技巧在 C 里收益尤其明顯因為省掉的是最容易寫錯的指針分支。參數(shù)說明size用size_t而不是int避免長度比較時的隱式符號轉(zhuǎn)換ListStatus用枚舉而不是返回布爾值調(diào)用方能區(qū)分“分配失敗”和“目標(biāo)不存在”排錯時少走很多彎路。list_destroy不返回狀態(tài)因為釋放失敗在 C 里沒有可恢復(fù)的語義直接交給 sanitizer 檢查更實際。2.3 把 malloc 和 free 收攏到兩個函數(shù)手冊里每次插入都是一句malloc從不檢查返回值。工程里更糟的做法是到處if (p NULL) return散落各處的判斷沒人維護(hù)。我習(xí)慣把分配和釋放收攏成兩個帶診斷的函數(shù)/* mem.c —— 所有節(jié)點分配都走這里泄漏和重復(fù)釋放能一眼看到 */ #include stdio.h #include stdlib.h #include list.h void *xmalloc(size_t n) { void *p malloc(n); if (p NULL) { fprintf(stderr, xmalloc: out of memory (%zu bytes)\n, n); abort(); /* 教學(xué)與實驗階段直接終止便于定位 */ } return p; } void xfree(void *p) { if (p NULL) return; /* free(NULL) 合法但顯式返回更易讀 */ free(p); } ListStatus list_push_front(List *l, ElementType v) { if (l NULL || l-head NULL) return LIST_ERR_INVALID; ListNode *n xmalloc(sizeof *n); /* sizeof *n 比 sizeof(ListNode) 更抗改類型 */ n-value v; n-next l-head-next; /* 哨兵之后插入無需特判空表 */ l-head-next n; l-size; return LIST_OK; } void list_destroy(List *l) { if (l NULL || l-head NULL) return; ListNode *cur l-head-next; while (cur ! NULL) { ListNode *next cur-next; /* 先存后繼再釋放當(dāng)前 */ xfree(cur); cur next; } xfree(l-head); l-head NULL; l-size 0; }邏輯說明xmalloc把“分配失敗”這件事從每個調(diào)用點收攏到一個地方實驗階段直接 abort 是最省時間的選擇因為你不需要為內(nèi)存耗盡設(shè)計恢復(fù)路徑。list_destroy里先保存next再釋放cur是鏈表釋放的標(biāo)準(zhǔn)寫法順序?qū)懛淳褪墙炭茣壍?use-after-free。參數(shù)說明sizeof *n是防御性寫法結(jié)構(gòu)體字段變化時不用同步修改分配語句list_push_front里的l-head NULL判斷是防御“未初始化就使用”因為list_init之后head一定非空這條分支正常不會觸發(fā)一旦觸發(fā)說明調(diào)用方的生命周期管理有問題。2.4 用固定的編譯選項把問題提前暴露手冊從不提編譯選項但這一步?jīng)Q定了你后面調(diào)試要花多少時間。我固定用下面這組# Makefile —— 告警當(dāng)錯誤sanitizer 常開 CC cc CFLAGS -stdc99 -g -O1 -Wall -Wextra -Werror \ -fsanitizeaddress,undefined -fno-omit-frame-pointer LDFLAGS -fsanitizeaddress,undefined test_list: test_list.o list.o mem.o $(CC) $(LDFLAGS) -o $ $^邏輯說明-O1配合-g是調(diào)試期的甜點-O2會把部分變量優(yōu)化掉導(dǎo)致斷點跳躍-O0又會掩蓋部分未定義行為。-fsanitizeaddress抓越界和 use-after-free-fsanitizeundefined抓有符號溢出、空指針解引用、錯位對齊這兩類問題在數(shù)據(jù)結(jié)構(gòu)代碼里出現(xiàn)頻率極高。參數(shù)說明-Werror把告警升級為錯誤能強制你處理“未使用變量”“隱式聲明”這類問題后者在 C99 里是真正的坑——函數(shù)沒聲明就調(diào)用編譯器會按 int 返回處理指針被截斷成 32 位時只有在特定機器上才崩。-fno-omit-frame-pointer保證 sanitizer 的?;厮菘勺x。3. 復(fù)雜度分析落到實測把 O() 換成計數(shù)器和計時器教材里最容易被跳過的是復(fù)雜度分析這一章因為它“看起來不產(chǎn)出代碼”。但手冊里幾乎所有解答都在用 O() 描述代價如果你不把抽象階數(shù)和實測數(shù)字對上后面選結(jié)構(gòu)就是憑感覺。這一章把 O() 變成可測的量怎么插樁、測什么、怎么判斷你測出來的是階數(shù)而不是噪聲。3.1 上界、常數(shù)因子與“實際更快”的錯覺解答手冊給出的是漸進(jìn)上界它丟掉了常數(shù)因子和低階項。這在 n 很大時成立在你實際處理的規(guī)模上經(jīng)常不成立。典型的例子是插入排序和歸并排序前者是 O(n2)后者是 O(n log n)但在 n 小于幾十、且數(shù)據(jù)基本有序時插入排序往往跑得更快因為歸并排序的分配和拷貝開銷擺在那里。手冊不會告訴你這個交叉點在哪因為它依賴機器。我的處理方式是把“階數(shù)結(jié)論”和“常數(shù)結(jié)論”分開驗證階數(shù)用雙對數(shù)坐標(biāo)的斜率驗證常數(shù)用同一規(guī)模下的絕對耗時或操作計數(shù)驗證。前者回答“這個算法能不能擴展”后者回答“在 n1000 時該選誰”。兩個問題答案不一致是常態(tài)不是手冊錯了。3.2 用計數(shù)器替代 clock()統(tǒng)計比較與賦值次數(shù)clock()的抖動在小規(guī)模下能到 30% 以上測出來的曲線沒法看。更可靠的辦法是插樁計數(shù)把“比較次數(shù)”和“賦值次數(shù)”當(dāng)成代價的代理指標(biāo)/* count.h —— 極輕量的插樁release 時改成空宏即可 */ #ifndef COUNT_H #define COUNT_H extern unsigned long g_cmp, g_assign; #define CMP_LT(a, b) (g_cmp, (a) (b)) #define ASG(dst, val) (g_assign, (dst) (val)) #endif/* sort_measure.c —— 插入排序的插樁版本只改比較和賦值兩處 */ #include count.h void insertion_sort(int *a, int n) { for (int i 1; i n; i) { int key a[i]; /* 取元素不計入交換代價 */ int j i - 1; while (j 0 CMP_LT(key, a[j])) { /* 每次成功比較都計數(shù) */ ASG(a[j 1], a[j]); /* 每次后移都計數(shù) */ j--; } ASG(a[j 1], key); } }邏輯說明把比較和賦值包裝成宏而不是函數(shù)是為了讓計數(shù)器停留在寄存器層面的開銷可忽略同時保證-O1下不會被內(nèi)聯(lián)后優(yōu)化掉宏展開后是真實的全局變量自增編譯器不會刪。用計數(shù)器而不是計時器是為了讓“插入排序在 n50 時比歸并快”這個結(jié)論可以復(fù)現(xiàn)——同樣的輸入、同樣的代碼計數(shù)結(jié)果永遠(yuǎn)一致。參數(shù)說明g_cmp和g_assign定義為全局變量跑完一個用例前必須清零否則數(shù)據(jù)會串。CMP_LT只覆蓋“小于”這一種比較是因為手冊里絕大多數(shù)排序的判定條件都能歸約成小于如果你要測三路快排需要再加一個相等比較的宏否則計數(shù)會偏小。3.3 三個必須釘死的測量參數(shù)同樣的代碼換三個參數(shù)就能測出三條完全不同的曲線。這三個參數(shù)不控制住后面所有結(jié)論都不可信。參數(shù)取值建議不控制會怎樣數(shù)據(jù)規(guī)模 n從 2^8 起每步乘 2至少 8 個點點太少無法判斷斜率擬合出來的階數(shù)隨機性極大初始分布隨機、升序、降序、全等值四組分別測只測隨機數(shù)據(jù)會掩蓋快排在有序輸入上的退化重復(fù)次數(shù)每個規(guī)模至少跑 5 次取中位數(shù)單次測量受緩存和調(diào)度影響小規(guī)模下偏差可達(dá)數(shù)倍第三項容易被忽略。n256 這種規(guī)模一次運行只有微秒級進(jìn)程啟動和頁錯誤的開銷占比很高。我一般在外層套一個循環(huán)把同一組數(shù)據(jù)重復(fù)跑 1000 次再除以次數(shù)讓單次代價落到毫秒級抖動就被攤薄了。3.4 用雙對數(shù)斜率判斷階數(shù)測完數(shù)據(jù)之后不要靠眼睛看曲線“像不像拋物線”直接算斜率。若 T(n) 近似為 c·n^k則 log T 與 log n 是直線斜率為 k# slope.py —— 用相鄰兩點的雙對數(shù)斜率判斷階數(shù) import math def slopes(points): points: [(n, cost), ...] 按 n 升序 out [] for (n1, t1), (n2, t2) in zip(points, points[1:]): if t1 0 or t2 0: continue out.append(math.log2(t2 / t1) / math.log2(n2 / n1)) return out data [(256, 32_100), (512, 128_400), (1024, 513_800), (2048, 2_055_000)] print([round(s, 2) for s in slopes(data)]) # 期望接近 [2.0, 2.0, 2.0]邏輯說明相鄰點斜率比整體擬合更能暴露“小規(guī)模常數(shù)項主導(dǎo)”的區(qū)間。如果前兩個斜率明顯小于后面的說明這一段還在常數(shù)項影響范圍內(nèi)不能用來判斷階數(shù)只有當(dāng)斜率穩(wěn)定在某個值附近才能說這段數(shù)據(jù)呈現(xiàn)該階數(shù)的行為。參數(shù)說明用 log2 而不是自然對數(shù)是因為 n 每次翻倍時斜率正好是 k 本身讀起來直觀斜率 2.0 就是平方階。數(shù)據(jù)里出現(xiàn) cost 為 0 的點要跳過通常是規(guī)模太小、編譯器把整個循環(huán)優(yōu)化掉了這類點留著會污染斜率。4. 樹與散列的復(fù)現(xiàn)AVL 旋轉(zhuǎn)、散列沖突與再散列手冊里平衡樹和散列這兩章篇幅最重也是抄錯率最高的地方旋轉(zhuǎn)的四種情形代碼長得幾乎一樣散列的探測序列一旦寫錯表現(xiàn)是“大部分情況對、偶爾查不到”。這一章把這兩塊的落地細(xì)節(jié)釘死。4.1 AVL先寫不變量再寫旋轉(zhuǎn)AVL 的代碼之所以容易寫崩是因為大多數(shù)人是照著四種情形的圖去湊指針。更穩(wěn)的路徑是先聲明不變量再讓旋轉(zhuǎn)去滿足它。不變量只有兩條任意節(jié)點的左右子樹高度差絕對值不超過 1節(jié)點存儲的 height 字段等于左右子樹高度的較大值加 1空樹高度定義為 -1。有了這兩條四種情形可以歸約成兩個基本操作單旋轉(zhuǎn)和雙旋轉(zhuǎn)雙旋轉(zhuǎn)就是兩次單旋轉(zhuǎn)的組合。/* avl.c —— 高度定義為 -1 起步葉子節(jié)點高度為 0 */ #include stdlib.h #include count.h typedef struct AvlNode { int key; int height; struct AvlNode *left, *right; } AvlNode; static int h(const AvlNode *t) { return t ? t-height : -1; } static int imax(int a, int b) { return a b ? a : b; } /* 左-左情形對 k2 右旋返回新的子樹根 */ static AvlNode *rotate_right(AvlNode *k2) { AvlNode *k1 k2-left; k2-left k1-right; k1-right k2; k2-height imax(h(k2-left), h(k2-right)) 1; /* 先更新下層 */ k1-height imax(h(k1-left), h(k1-right)) 1; /* 再更新新根 */ return k1; } /* 右-右情形對 k1 左旋 */ static AvlNode *rotate_left(AvlNode *k1) { AvlNode *k2 k1-right; k1-right k2-left; k2-left k1; k1-height imax(h(k1-left), h(k1-right)) 1; k2-height imax(h(k2-left), h(k2-right)) 1; return k2; } /* 左右情形先對左兒子左旋再整體右旋 */ static AvlNode *double_left_right(AvlNode *k3) { k3-left rotate_left(k3-left); return rotate_right(k3); }邏輯說明旋轉(zhuǎn)里最容易錯的是高度更新的順序。必須先把下沉的那個節(jié)點的高度算出來再算新根的高度因為新根的高度依賴下沉節(jié)點更新后的值。順序反了不會立刻崩但高度會偏大 1幾輪插入之后平衡判斷就失效表現(xiàn)是“樹越長越歪”。h()對空指針返回 -1 而不是 0是為了讓葉子節(jié)點高度為 0 的約定自洽這也是教材里用的約定換成 0 起步會導(dǎo)致所有平衡因子差一位。參數(shù)說明key用 int 是為了和前面的計數(shù)器配合實際項目里換成ElementType即可。函數(shù)返回新的子樹根而不是原地修改是因為插入和刪除需要把新根掛回父節(jié)點用返回值寫法能避免維護(hù)父指針。插入函數(shù)的關(guān)鍵在回溯路徑上更新高度并判斷平衡因子四個分支的判定條件要寫清楚/* 插入后回溯平衡因子 左高 - 右高 */ AvlNode *avl_insert(AvlNode *t, int key) { if (t NULL) { AvlNode *n calloc(1, sizeof *n); /* 新葉子高度為 0calloc 后需修正 */ if (!n) return NULL; n-key key; n-height 0; return n; } if (CMP_LT(key, t-key)) { t-left avl_insert(t-left, key); if (h(t-left) - h(t-right) 2) { if (CMP_LT(key, t-left-key)) t rotate_right(t); else t double_left_right(t); } } else if (key t-key) { t-right avl_insert(t-right, key); if (h(t-right) - h(t-left) 2) { if (key t-right-key) t rotate_left(t); else t double_left_right_sym(t); } } t-height imax(h(t-left), h(t-right)) 1; return t; }邏輯說明判等分支故意留空即重復(fù)鍵不插入這是手冊里常見的一種約定如果你的場景需要允許重復(fù)改成在相等時往右子樹走即可但要注意這樣會讓刪除邏輯復(fù)雜一檔。平衡因子的判定用 2而不是 2是因為一次插入最多讓高度差從 1 變成 2用等號能在斷言層面盡早發(fā)現(xiàn)邏輯錯誤。參數(shù)說明calloc之后仍顯式設(shè)height 0是因為調(diào)用方可能把節(jié)點高度約定改成 1 起步顯式賦值比依賴零初始化安全。遞歸實現(xiàn)的好處是回溯路徑天然存在壞處是深樹會爆棧生產(chǎn)代碼里一般改成帶父指針的迭代版本但學(xué)習(xí)階段先用遞歸把不變量吃透。4.2 散列裝填因子和再散列閾值必須成對出現(xiàn)手冊講開放定址散列時給的是平方探測并提到“表不能太滿”。這句話在落地時會被簡化成“裝填因子別超過 0.5”然后就沒了。真正的坑是裝填因子閾值和再散列邏輯必須寫在一起只設(shè)閾值不寫再散列插入在表滿時會死循環(huán)。平方探測的探測序列是 i2 而不是 i寫錯這一處查找就會在“應(yīng)該有元素”的位置停下并返回未找到。判定條件要寫成i table_size / 2因為平方探測在表大小為質(zhì)數(shù)且裝填因子低于 0.5 時前一半探測序列就能覆蓋到空位。/* hash.c —— 開放定址平方探測裝填因子超過 0.5 觸發(fā)再散列 */ #define EMPTY_KEY (-2147483647) /* 用哨兵標(biāo)記空槽比額外數(shù)組省空間 */ typedef struct { int *keys; size_t capacity; /* 容量取質(zhì)數(shù)且盡量是 4k3 形 */ size_t size; /* 已用槽數(shù)不包含墓碑 */ } HashTable; static size_t next_prime(size_t n) { while (1) { int ok 1; for (size_t d 2; d * d n; d) if (n % d 0) { ok 0; break; } if (ok) return n; n; } } static void rehash(HashTable *h); void hash_insert(HashTable *h, int key) { if ((double)(h-size 1) / h-capacity 0.5) rehash(h); size_t i (size_t)key % h-capacity; for (size_t k 0; k h-capacity / 2; k) { size_t pos (i k * k) % h-capacity; /* 平方探測注意取模 */ if (h-keys[pos] EMPTY_KEY) { h-keys[pos] key; h-size; return; } if (h-keys[pos] key) return; /* 重復(fù)鍵直接忽略 */ } }邏輯說明rehash放在插入之前判斷而不是插入失敗之后補救這樣保證任何一次插入都有至少一半的空槽可用。k * k用size_t計算避免 n 很大時int溢出成負(fù)數(shù)導(dǎo)致取模結(jié)果為負(fù)這個坑在容量超過 46341 時會真實觸發(fā)。參數(shù)說明容量選 4k3 形的質(zhì)數(shù)是因為平方探測在質(zhì)數(shù)容量下探測序列覆蓋更均勻這是數(shù)論結(jié)論手冊里通常只在注釋里提一句。EMPTY_KEY用INT_MIN是因為題目數(shù)據(jù)都是正整數(shù)實際項目里應(yīng)該用單獨的occupied位圖或者允許存儲任意 int 時改用線性探測加墓碑標(biāo)記。4.3 同一組鍵分別跑 AVL 與散列該看什么跑對比實驗時很多人只比較“插入耗時”這個維度信息量很低散列插入是均攤常數(shù)AVL 是對數(shù)結(jié)論在寫代碼之前就知道了。真正值得看的三個量是觀察量AVL開放定址散列說明最壞一次查找的比較次數(shù)約 1.44 log?n探測次數(shù)不定接近滿載時急劇上升最壞情況才是工程里要防的有序遍歷中序 O(n) 直接輸出需要額外排序散列犧牲了順序性內(nèi)存占用每節(jié)點 3 個字段加對齊槽數(shù)與裝填因子成反比裝填因子 0.5 意味著近 2 倍冗余第三行最容易被忽略。手冊里說散列查找是常數(shù)沒提這個常數(shù)是用空間換來的。裝填因子壓到 0.5意味著容量要是元素數(shù)的兩倍壓到 0.25 會讓探測更快但內(nèi)存直接翻四倍。如果你的場景是百萬級元素、內(nèi)存受限把裝填因子調(diào)到 0.7 以上、同時改用線性探測提升緩存命中率實測往往比教科書參數(shù)更快代價是最壞情況的探測次數(shù)變長。這類結(jié)論靠讀手冊得不出來只能自己壓測。5. 照抄解答最容易翻車的五個現(xiàn)場現(xiàn)象、原因與解法這一章集中處理復(fù)現(xiàn)過程中真實會卡住人的幾類問題。寫代碼的時間可能只占三成剩下七成都在和這些東西耗。每條按現(xiàn)象、原因、解決三段說。5.1 段錯誤與內(nèi)存類現(xiàn)場現(xiàn)象鏈表刪除操作單獨測都能過連續(xù)刪 1000 個節(jié)點后在list_destroy里隨機崩?;厮葜赶騠ree看不出哪一行。原因刪除節(jié)點時先free(cur)再取cur-next。單次刪除時free之后那塊內(nèi)存通常還沒被復(fù)寫next恰好還能讀到所以看不出來連續(xù)刪除時分配器把釋放的塊掛回空閑鏈表會在塊頭寫入指針cur-next讀到的就是空閑鏈表指針再去解釋成節(jié)點就是野指針。解決讀后繼和釋放嚴(yán)格分兩步用臨時變量保存next。這條規(guī)則在雙向鏈表、樹的刪除、散列表的桶鏈上同樣適用。另外把 sanitizer 常開這類問題會在第一次越界時就被 ASan 攔下來不用等到崩潰現(xiàn)場。現(xiàn)象程序跑完不崩但valgrind或 ASan 報告 still reachable罪魁禍?zhǔn)资且粋€只在插入路徑上分配的臨時數(shù)組。原因手冊里的算法描述常常只講主體回收寫在別處或者干脆省略。只按主體實現(xiàn)臨時緩沖區(qū)就漏了。解決把“誰分配誰釋放”寫進(jìn)函數(shù)注釋并在每個返回路徑上核對。我一般的習(xí)慣是讓malloc和free在同一屏代碼內(nèi)出現(xiàn)跨越一屏的分配就要重新審視結(jié)構(gòu)劃分。5.2 結(jié)果對不上類現(xiàn)場現(xiàn)象快速排序在隨機數(shù)據(jù)上結(jié)果正確在“大量重復(fù)元素”的測試集上跑出非遞增序列或者直接崩。原因樸素的快排按“小于 pivot 放左、大于等于放右”劃分遇到全等值數(shù)據(jù)時每次劃分都退化成 1 和 n-1遞歸深度變成 n。崩是棧溢出結(jié)果錯是劃分邊界寫錯時把 pivot 覆蓋了。解決劃分改用雙指針相向掃描遇到相等元素就交換讓相等值均勻分布到兩側(cè)或者直接實現(xiàn)三路劃分把區(qū)間分成小于、等于、大于三段。同時給遞歸加深度上限超過 2 log n 時切換到堆排序這也是很多標(biāo)準(zhǔn)庫的兜底策略。手冊里通常只給基礎(chǔ)版本邊界處理要自己補?,F(xiàn)象圖的最短路徑算法在小圖上正確在帶負(fù)權(quán)邊的圖上給出錯誤答案但沒有報錯。原因Dijkstra 的貪心前提是非負(fù)權(quán)邊手冊在這一節(jié)通常會寫一句前提條件很容易被當(dāng)成廢話跳過。解決加斷言或者前置檢查發(fā)現(xiàn)負(fù)權(quán)邊就切換到能處理負(fù)權(quán)的算法如果只是用來驗證理解至少在測試用例里顯式包含一條負(fù)權(quán)邊看它怎么錯比只在正確輸入上跑通更有價值。5.3 復(fù)雜度與性能類現(xiàn)場現(xiàn)象歸并排序?qū)崿F(xiàn)完n 取到十萬時反而比插入排序慢懷疑自己寫錯了。原因歸并的每次遞歸都在malloc一個臨時數(shù)組分配開銷蓋過了 O(n log n) 的優(yōu)勢。手冊里的偽代碼默認(rèn)“合并用的輔助空間已就緒”沒說明這個空間要在遞歸外一次性分配。解決在排序入口分配一塊與輸入等長的緩沖區(qū)遞歸過程中只做拷貝不在遞歸內(nèi)分配。這一處改動在十萬級數(shù)據(jù)上通常能帶來數(shù)倍差距。順帶把邊界條件改成 n 小于閾值時直接插入排序交叉點實測在 16 到 32 之間?,F(xiàn)象同一份代碼在自己機器上跑 3 秒換臺機器跑 12 秒開始懷疑算法選錯。原因大規(guī)模順序訪問的結(jié)構(gòu)數(shù)組、堆對緩存敏感同樣階數(shù)的算法在緩存命中率上能差一個數(shù)量級。編譯優(yōu)化等級和 CPU 頻率策略也會帶來數(shù)倍差異。解決跨機比較時只比操作計數(shù)不比墻上時間。要比時間就在同一臺機器上、同一編譯選項下、用中位數(shù)比較。這條在選結(jié)構(gòu)時尤其重要手冊里兩個 O(n log n) 的排序?qū)嶋H差三倍是正?,F(xiàn)象別急著推翻階數(shù)結(jié)論。6. 用差分測試把解答手冊變成回歸用例庫手冊里每道題的答案本質(zhì)上都是一個“預(yù)期輸出”。把這層關(guān)系利用起來就能把整本手冊變成回歸測試集一邊寫自己的實現(xiàn)一邊寫一個慢但絕對正確的暴力版本用隨機數(shù)據(jù)喂給兩邊對拍。這個做法在樹、散列、圖算法上都能用尤其是最大子序列和、最短路、拓?fù)渑判蜻@類“結(jié)論唯一、實現(xiàn)容易錯”的題目。最典型的是最大子序列和。手冊給了四種解法復(fù)雜度從立方到線性彼此可以互相驗證/* difftest.c —— 暴力 O(n^3) 作為基準(zhǔn)與分治 O(n log n) 對拍 */ #include stdio.h #include stdlib.h #include time.h #include assert.h static int brute(const int *a, int n) { int best 0; /* 空子序列和為 0與教材約定一致 */ for (int i 0; i n; i) for (int j i; j n; j) { int sum 0; for (int k i; k j; k) sum a[k]; if (sum best) best sum; } return best; } static int max3(int x, int y, int z) { int m x y ? x : y; return m z ? m : z; } static int dc(const int *a, int lo, int hi) { /* 區(qū)間 [lo, hi) */ if (lo hi) return 0; if (hi - lo 1) return a[lo] 0 ? a[lo] : 0; int mid lo (hi - lo) / 2; int left dc(a, lo, mid), right dc(a, mid, hi); int ls 0, lb 0; /* 左半含邊界最大值 */ for (int i mid - 1; i lo; i--) { ls a[i]; if (ls lb) lb ls; } int rs 0, rb 0; for (int i mid; i hi; i) { rs a[i]; if (rs rb) rb rs; } return max3(left, right, lb rb); } int main(void) { srand(20240501); for (int round 0; round 20000; round) { int n 1 rand() % 40; /* 小規(guī)模多輪覆蓋更多形態(tài) */ int a[40]; for (int i 0; i n; i) a[i] rand() % 21 - 10; /* 含負(fù)數(shù)才有意義 */ assert(brute(a, n) dc(a, 0, n)); } puts(diff ok); return 0; }邏輯說明暴力版復(fù)雜度立方但邏輯直白幾乎不可能寫錯適合當(dāng)基準(zhǔn)。分治版是全篇最容易在跨中點的循環(huán)邊界上翻車的地方左半從mid-1向前累加右半從mid向后累加兩邊的初始值都是 0這樣全負(fù)數(shù)組返回 0 與暴力版一致。斷言放在循環(huán)里而不是循環(huán)外是為了在第一次不一致時就能定位到具體的隨機種子和輸入。參數(shù)說明rand() % 21 - 10保證正負(fù)混合全正數(shù)會讓所有版本都返回總和測不出邊界錯誤。規(guī)模限制在 40 以內(nèi)是因為立方復(fù)雜度在 40 上單輪只有 6 萬次運算兩萬輪也才 12 億次幾秒內(nèi)跑完。如果被測算法是百萬級才暴露問題的類型就換方法固定種子、放大規(guī)模、減少輪數(shù)但始終保留至少一個“小規(guī)模多種子”的階段。測試維度建議取值能抓出的問題元素取值全正、全負(fù)、正負(fù)混合、全零初始值約定錯誤、邊界返回錯誤規(guī)模1、2、3、2 的冪、質(zhì)數(shù)附近單元素特判遺漏、遞歸拆分不均勻排列形態(tài)隨機構(gòu)造、已升序、已降序、全等值退化路徑、劃分不均、無限遞歸重復(fù)運行固定隨機種子讓失敗可以精確復(fù)現(xiàn)我踩過最深的一個坑是把對拍腳本的隨機種子設(shè)成time(NULL)。某次跑了兩小時才發(fā)現(xiàn)一個不一致回頭重跑再也復(fù)現(xiàn)不出來因為種子已經(jīng)變了。從那以后所有隨機測試都固定種子把種子號寫進(jìn)日志失敗時直接改一行重放。另外就是別急著上大規(guī)模——小規(guī)模多輪次幾乎總能更快地暴露邏輯錯誤而大規(guī)模只能告訴你性能問題。手冊里的答案只是起點真正吃透一個結(jié)構(gòu)靠的是你自己的對拍腳本跑綠的那一刻。希望幫到你。本文還有配套的精品資源點擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
99热一本| 欧美性猛交 XXXX 乱大交| 国产AV不卡福利| 91九色国产在线| 丁香五月激情六月欧亚激情综合导航 | 激情网婷婷五月天| 成人狠狠成人狠狠成人狠狠成人狠狠| 伊人91| 强辱丰满人妻HD中文字幕 | 五月狠狠| 五月天激情网开心网| 99热这里都是精品| 国产精品色一哟哟| site:jszngf.com| 97在线干| 精品操逼一区二区| 久9精品视频在线| 久久狼人天堂| 五月色亚洲| 丁香色情五月天| xxxx五月天色色| 天天综合精品| 九九无码| 色人久久| 丁香五月婷婷网| 色色AV色色色东莞| 97在线/亚洲| 97色色网| 激情深爱五月天| www,超碰| 99超级碰碰| 69激情小说| 色色色999| 无码一区二区三区四区五区91c| 伊人在线视频| 精品久久久久成人码免费动漫| 丁香色色色| 天天插,天天射| 久久久久久天天日天天爱| 丁香五月婷婷色偷偷| 成人做爰A片免费看视频| 91超碰人人操| 天天干夜夜想| 婷婷啪啪| 色吧婷婷五月亚洲| 九九伦子片| 日韩免费视频| 激情五月丁香五月色| 五月婷婷六月激情在线| AV美美午夜| 婷婷伊人久久| 天天草人人摸| www.五月激情红色| 精品A√| 婷婷五月天激情视频| 婷婷五月成人有| 色综合网上班开心婷婷久久| 狠狠干五月丁香| 色综合网上班开心婷婷久久| 色五月婷婷、老熟女| 无码网| 99re思思热在线视频| www.综合久久.com| 激情另类综合| 伊人午夜综合色啪| 成人在线99| 丁香婷婷色情| 国产人妻777人伦精品HD| 美日韩成人| 日本色色色| 超碰在线成人| 丁香婷婷综合影院| 五月天激情影院| 99在线观看| 99精品久久| 俺也去婷婷五月天第五色| 五月色视频| 男人天堂亚洲综合| pacopacomama 070722_670 素人奥様初撮りドキュメント 103 大久保純子 | 亚洲成人电影aaaa| 99网| 青柠影视免费高清电视剧| 99精品国产乱码久久久人妻| 大香蕉七区| 国产操B视频| 99re热在线视频| 五月天开心激情网色欲无码| 亚洲99精品欧美一区| 五月婷婷成人| 思思re最新视频| wwww.9免费视频| 五月婷婷婷综合网| 五月婷婷插一插| 五月丁香在线观看| 疯狂做受XXXX高潮A片动画| 国产成人综合亚洲| 久久五月天色婷婷| www.色五月| 26uuu亚洲| 精品少妇人妻AV无码专区偷人 | 婷婷色香六月综合激情| 黄网在线免费观看| 日韩三级视频一区二区| 亚州精品色情在线观看| www久久艹| 色婷婷成人做爰A片免费看网站| 91精品91久久久久77777| 色爱综合五月| 五月天堂在线| 99re在线播放| 99热这里只有精品268| 青青草蜜臀| 人人操人人爰人人一天天碰夜夜拍夜夜爽-中国A级毛片天天看天天谢… | 日美三级| 婷婷激情丁五月| 午夜成人综合| 亚洲激情六月| 99精品爱| 国产一区二区三区影院| 日本色婷婷| 亚洲成人乱码av网站| 五月婷啪| 丁香五月停停基地| 色五月色五天免费视频| 国产首页在线| 精品99只有。| 亚洲精品国产熟女久久久| 天天se在线视频| 99热九九这里只有精品10| 狠狠操天天干| 五月丁香啪。| 精品成人a v无码内射| 99re在线播放| 婷婷久久五月天亚洲欧美国产日韩在线观看| 日本丁香五月| 亚洲成人九九九| 开心五月深爱五月婷| 超碰99在线观看| 色婷婷文字幕| 五月天婷婷色| 亚洲一级色电影| www.99成人视频| 欧美私人家庭影院| 婷婷六月丁香1| 99热精品在这里| 无码动漫av| 男人的天堂五月丁香| 丁香五月偷拍| 日日激情网| 另类少妇人与禽zOZZ0性伦| 九九色色网| 五月天激情视频| 热久免费视频9| 天天干天天爽天天爽| 91操人| 色色五月婷婷| 99精品无码| 人人爽天天莫| 无码激情AAAAA片-区区| 久久这里只有精品无码| 91/九色黑人| 伊人丁香婷婷东京| cao视频,现在观看| 97九色视频| 六月丁香婷婷综合狠狠爱夜夜爱| 色婷婷影视| 日韩狠狠色| 五月婷婷与六月丁香图片激情| 亚洲午夜一区二区| 丁香五月天堂| 五月婷婷免费在线观看| 91丨九色熟女丨首页| 这里只有精品无码| 亚洲综合字幕色色| 影音 五月 婷婷 久久| 狠狠干 狠狠操| 好吊兆人妻| 99热这里只有的精品视 | 我爱大香蕉| www.25五月婷婷| 亚洲精品V天堂中文字幕| 成人精品一区二区三区四区五区| 91久久精品国产91性色TV| 美女要搞搞天天搞搞搞网站| 丁香操逼| 狠狠操狠狠操AV| 蜘蛛女免费观看完整版高清电影| 婷婷酒色网| AVDV久久| 久久久久综合激动五月天| 老师的粉嫩小又紧水又多A片视频| 丁香五月婷婷香| 久久er99| 91精品熟女| 婷婷六久久| 天天噜| 久久99这里只有精品| 乱精品一区字幕二区| 深情五月天| 丁香五月网| 婷婷五月天久久久| 激情综合网激情五月天| 深爱五月亚洲| 九九99精品| 影音 五月 婷婷 久久| 99热这里是精品| 婷婷六月丁香在线| 98色花堂98t.R| 被强行糟蹋的女人A片| 夜夜操夜夜操| 99久久婷婷五月天| 亚洲五月天第一综合干| 婷婷综合视频| 五月婷综合| 日本欧美在线| 久久久婷婷五月亚洲97号色| 五月婷婷狠狠干| 久久综合九色综合88i| 停停五月色宗合| 97人人做| 色欲Av五月天| 日本久久爽| 91男女视频在线观看| 久久丁香五月| 亚洲操b| 涩五月婷婷| 操婷婷基地| 国产亚洲99| 亚洲综合成人网站| 青青草原中文字幕| 九九热自拍| 丁香五月婷婷五月基地| 色播五月婷婷五月| 日逼免费视频 | 国产99久久久国产精品免费看| 国产精品久久久爽爽爽麻豆色哟哟 | 91精品久久久久久77777| 日本黄色三级片内射| 狠狠五月激情丁香六月| 99热热九九| 91一起艹| 五月激情丁香六月狠狠干| 在线播放中文字幕| 天干夜夜操| 国产噜一噜天天噜| 色5在线| www.韩日视频| 六月五月天婷婷涩播在线| 黄色三级日本| 色五月婷婷综合| 玖玖精品视频99| 婷婷中文字幕| 成人短视频在线| 色婷婷AⅤ| 五月综合激情婷婷六月色窝| 九九热只有这里精品| 一本色道久久88加勒比—| 熟女人妻视频| 欧美怡红院黄站| 久热大香蕉| 五月丁香啪啪啪啪| 欧美内射AA| 久久婷五月综合| 丁香五月天成人| 丁香五月婷婷亚洲另类| 高清无码中文字幕aVDV| 伊人狠狠干| 狠狠干狠狠干狠狠干狠狠干| 亚洲成人电影aaaa| 婷婷四色成人综合色视| 亚洲第一综合| 丁香婷婷六月激情文学 | 五月天婷婷成人网| 九九这里是免费的视频5| 99精品国产在热久久婷婷| 久热这里只有精品在线| 色五月激情五月| 99操逼| 激情五月天色婷婷| 婷婷五月六月丁香| 丁香五月天啪啪| 99热免费| 五月天丁香| 久久久精品人妻| 久久婷婷综合五月天| 久热无码| 亚洲亚洲人成综合网络| 天久综合91综合首页| 国产精产国品一二三在观看| 五月丁香另类网| 激情电影五月婷婷| 婷婷射丁香| 丁香五月婷婷啪啪| tingtingzonghewang| 99久久综合| 激情五月六月婷婷| 九九碰九九爱97超碰| 久久久激情视频| 九九热这里只有精品5| 国产伦理精品高清在线观看网站一区二区| 日日干日日s| 丁香五月激情无码视频| 丁香五月色五月| 九九精品热| 思思热在线观看| 91中文狠狠综合| 91N 一起草| 婷婷精品在线| 综合网五月天123| 99视频这里只有精品10| 亚洲中文乱字字幕在线永久| 丁香婷婷成年| 99热日韩| 天天插综合网| 五月天黄色激情小说| 日日爱699| 婷婷五月天天爽| 夜夜骑夜夜操| 日日噜噜久久婷婷五月天| www激情| 亚洲狠狠婷婷综合久久久| 婷婷五月天资源| 色婷婷电影网| 青草视频在线播放| 午夜婷婷丁香| 免费AV在线| 五月天婷婷基地| 青青999| 亚州精品色情无码A片| 色综合性视频| 思思久久思思| 婷婷丁香五月麻豆| 亚洲视频在线观看区| 亚洲综合1024| 天天干天天色综合| 五月综合激情| 日日夜夜狠狠婷婷色| 亚洲第79页| 囯产精品久久欠久久久久久九大| 国产亚洲色婷婷久久99精品91 www.riverspirits.org www.hnnun.com www.changh | 婷婷五月天电影网| 婷婷色五月大香蕉在线观看| 久久少妇视频| 久久婷婷五月天大香蕉| 怡红院99| 欧美色色色色色色色色色色影视| 97色啪| 182.t午在线观看| site:xiongshengzz.com| 2025色婷婷| 日本三级大片| ay2区| 精品99在线| 婷婷丁香六月天激情四射网| 森林影视大全,最好看的2019年视频| 在线观看亚洲视频影院| 玖色色综合| 色色丁香五月婷婷| 欧美精品XXXXBBBB| 草婷婷在线| 婷婷综合激情| 婷婷激情五月天天天开心| 激情啪啪五月| 亚洲视频操| 五月色影院| 韩国97天堂| 欧洲综合色| 内射爽无广熟女亚洲| 日本久久综合| 九九aV| 久久久免费图片视频| 婷婷十月丁香| 任你干线上免费视频有3吗| 五月激情丁香五月宗合| 91人久| 色天天狠狠干| 婷婷五月在线视频| 五月丁香六月婷婷久久久综合| 色婷婷成人做爰A片免费看网站| 性日本激情| 九九伊人网| 亚洲精品国产setv| 99色在线| 另类小说五月天综合网| 涩涩激情五月婷婷| 久久婷婷五月天激情| 婷婷久久综| 婷婷五月激情综合| 激情五月天啪啪视频| 99这里都是精品| 九九热这里都是精品6| 色播五月| 99色看| 超碰妻人人| av色色国产| 在线免费观看激情视频| 狠狠五月激情丁香六月| 激情五月丁香婷婷夜夜操| 伊人五月天在线| 久久草人妻| 激情五月综合| 亚洲色频| 久久这里只有精彩| 五月做爱| 日韩无码专区| 伊人久久婷婷五月天激情四射| 97色一二三| 丁香 亚洲 久久| 婷婷性爱| 9九九久久精品无码专区| 色丁香婷婷| 1024国产| 99A片| 婷婷狠狠97| 91九色精品熟女内射| 五月丁香综合网| 天天透天天摸天天舔| 五月婷久久草| 精品香蕉99久久久久网站| 97色色色视频| 大香蕉久久| 日本不卡高字幕在线2019| 五月天狠狠网| 五月丁香综合网色欲| 激情婷婷狠狠干综合| 综合色播| 亚洲婷婷丁香五月视频| 男人的天堂五月丁香| 性无码专区无码| 热久久99热欧美国产亚洲| 久操激情| 99久久婷婷国产综合亚洲| www久久99| 日本少妇裸体做爰高潮片| 丁香婷婷月| mmm1717.6dbm人人爱人人操| 五月丁香好婷婷A片网| 丁香五月AV| 四月婷婷五月丁香| www.av骚货| 在线成人网站| 日本在线wwww| 99热传媒| 久久久一级AAA| 午夜激情综合| 99热这里是精品| 五月丁香久久综合精品| 91日韩在线| 波多婷婷久久| 五月丁花六月丁香综合| 五月天·www·com| 久99热| 97热超碰| 91九九九九九九| 丁香六月婷| 亚洲午夜视频| 五月天婷婷綜合院| 五月丁香激情综合网| 日本熟妇人妻在线| 5月丁香婷婷| 色五月婷婷基地| 五月丁香六月婷婷激情四射| 91精品国产色猫| 丁香六月婷婷操逼网| 婷婷五月色| 91碰| 天天操无码| 99资源在线视频| www.成人婷婷综合| 26uuu欧美激情另类| 国产99热在线看| 久久久ww| Xx色综合| 午夜 外网 精品 在线| 97碰啪啪| 九九99九九99偷拍视频免费看| 影音先锋91视频| 久热A片| 99在线精品免费视频| 五月天综合网| 国产人妻777人伦精品HD| 激情婷婷综合| 五月婷婷丁香av| 亚洲AAAA网| 另类婷婷丁香| 色婷婷六月天在线| 五月婷婷手机在线| 噜噜久| 婷婷久久亚洲| 九九热婷婷| 久久这里都是精品| 婷婷五月天激情文学| 99操视频| 亚洲色综合| 五月色综合| 亚洲国产精品VA在线看黑人| 日韩成人影片在线观看| 99亚洲精美视频在线观看| 综合九九日本| 久久久久亚洲AV成人无码电影| www狠狠com| 大香蕉啪啪| 婷婷成人网五月天| 天天日人人爽| 五月婷婷六月色| 99综合视频一体| 天天日天天操心| 人妻体体内射精一区二区| 国产精品久久久久久久久久| 91色色色视频| 婷婷五月69| 很很干在线视频| 五月天婷婷在线播放免费| 99精品在线观看视频| 强伦轩人妻一区二区电影| 九九RE视频在线精品| 久久久亚洲精品一区二区三区浴池 | 色婷婷影| 99热精品少| 射久久丁香五月| 亚洲色另类| 五月天精品视频| 国产精品天天狠天天看| 丁香五月激情啪| 欧美日韩大黄| 婷婷综合五月| 一本大道伊人AV久久综合| 极品少妇婷婷五月| 99在线观看免费精品视频| 亚洲aV写真天天综合网久久| 99热免| 五月停视频天堂| 天天骑天天操| 久久久五月天婷婷成人网| 亚洲六月婷婷| 婷婷丁香人妻天天| 色色婷婷五月天| 視频福利乱色| 五月丁香九九九综合| 日韩啪啪视频| 看逼中文字幕| 久久九九99字幕| 99九九玖玖| 天天久久婷婷| 爱的综合网| 97人人操人人| 色九九丁香九月色九九色| 玖玖精品视频99| 五月丁香婷婷久久| 久久午夜丁香| 久热只有这里精品| 五月色亭丁香| 亚洲区视频| 影音先锋男人站,影音先锋男人色资源网,影音先锋AV最新资源站,影音先锋AV资源 | 精品成人a v无码内射| 五月婷婷狠狠干| 97超碰在线观看免费| 色丁香综合影院| 日本久久婷| 狠狠 久久| 无码婷婷五月天| 久久丁香五月婷婷| 性日本激情| 性色天| 美女久久婷婷| 99热这里只有精品热| 99免费热视频在线| 久久综合干| 天天做天天爱天天爽| 九九爱精品网站| 色色色视频| 九九热九九| 99日精品视频| AV九九| 99热免费精品| 九热免费视频| 91|九色|动漫| 91九色精品熟女内射| 婷婷六月视频| 日本一级一片免费视频| 日韩久久色| 26UUU一区二区| 香蕉婷婷| www,8050,午夜三级| 91viP在线看| 99精品热视频| av色色国产| WWW,激情五月天,COM| 在线中文av| 五月丁香激情综合网| 在线另类视频| 综合玖玖性爱免费视频| 久久婷婷伊人| 天天做天天双| 欧美婷婷综合网| 99热地址| 91se在线视频| 亚洲中文字幕在线观看| 五月天久久www| 色婷婷色综合久久精品V| 久久aaaa片一区二区| 91九色 熟| 五月婷婷综合在线| 亚洲不卡| 国产精品第一国产精品| 99视频精品8| 可以免费观看的av| 婷婷噜噜| 91丁香五月| 丁香六月狠狠干| 亚洲欧洲小视频9| 激情图片五月天| 色婷婷五月天激情久久| 啊V视频在线观看| 五月综合久久| 免费无码毛片一区二区A片| 99热官网| 丁香婷婷五月激情| 久久98| 第五婷婷伊人丁香| 亚洲色色色| 中文字幕综合| 大大香蕉综合在线| 性爱先锋AV| 久re热视频| 狠狠色综合久久久久| 亚洲国产网站| dingxiangtingtingliuyue| 国产视频色色色色色色色| 激情开心五月天婷婷基地丁香社区| wwccc久久久| 亚洲国产精品VA在线看黑人| 99操久久| 日韩九区| 99这里只有| 久久婷婷原创视频| 五月婷六月| 久久五月天色| 五月婷激情影院| 日本97在线视频| 51精品国自产在线| 五月综合久久| 六月色狠狠色| 99热这里都是精品| 思思99热| 伊人网啪啪| 婷婷激情五月综合丁香社| 影音先锋一区| 色婷婷五月影院| 久青草影院| 天天狠狠六月婷丁香影院| site:xmssd.com| 久久新| 大香蕉在九| 五月婷婷婷| 五月婷在线观看| 日韩操逼小电影| 日韩好吊操| 9色视频在线| wuyuedingxiang| 久久99国产综合精品免费 | 97色婷婷| 91精品综合久久久久久五月丁香| 91狠狠色丁香| 婷婷激情五月色综合| 色噜久| 韩日AV片| 97操在线| 亚洲精品久久久无码| 伊人久久婷婷| 九九99免费理论| 激情图片五月天| 人人爽欧美婷婷久久久五月丁香| 激情五月五月五月婷婷| 婷婷五月天成人动漫| ay2区| 五月丁香六月香香蕉| 亚洲操B视频| 91碰免费视频| 亚洲色频| 丁香深五月婷婷| 激情性爱五月天网页| 五月婷婷色在线| 99在线精品免费视频| 国产99热| 婷婷99狠狠躁天天躁| 激情丁香五月| 亚洲妇女熟BBW| 97婷婷色| 狠狠五月婷婷| 国产精品 的国产| 日韩 mm 不卡| 大香蕉九九操| 亚洲AV网站| 色欲天天综合网| 日本一道久久| 天天色伊人| 六月婷伊人| 五月天综合区| 欧美婷婷精品激情| 丁香在线视频| 欧美日韩99| 国产成人亚洲综合A∨婷婷| 丁香五月成人| 亚洲99热| 69色婷婷| 另类的婷婷| 深爱开心激情网| 亚洲男人的天堂婷婷色五月| 五月激情基地| 啪啪婷婷五月天激情| 丁香婷婷久久| 亚洲亚洲人成综合网络 | 人人操91| 五月天婷婷久色| 真实亲子乱子伦高清在线观看| 婷婷色综合| 久久婷婷热| 国产AV国片偷人妻麻豆| 玖玖99婷婷| 欧美久人人| 丁香五月亚洲激情婷婷射| 男人天堂亚洲综合| 五月婷导航| 国内外色色色色色成人视频| 激情久久久| 在线色婷婷| 色婷婷88| 天天干天天操天天爱| 婷婷成人五月天成人文学| 婷婷精品视频| 91免费试看| 色99视频| 五月花婷婷丁香| 涩五月婷婷| 日本熟妇乱妇熟色A片蜜桃| 自拍视频在线观看9| 无码人妻激情| 99操逼| 五月天成人综合| 97碰精品| AV美美午夜| 天天日天天舔| 婷婷不干网| 婷婷久久图片| 天天日夜夜夜操操操操| 欧美精品啪啪| 丰滿爆乳一区二区三区| av婷婷丁香 六月| 天天激情欧美美女| 最近中文字幕在线中文视频| 无码人妻电影| 婷婷五月激情在线视频| 爱射综合| 婷婷五月丁香综合| 激情五月婷婷丁香| 99精品偷自拍| 人妻久久久久久久久妻久久久久久久久 | 色99在线| 国产五月视频| 《诡秘之主》在线观看| 婷婷五月综合久久中文字幕| 99久| 五月亚洲激情| 大香蕉手机视频| 99色日本| 九九色综合视频| 99精品性爱| 丁香六月色婷婷| 久久99网| 色婷婷小视频| 五月情涩综合婷婷| 思思久久99热只有频精品66| 这里只有精品视频视频在线观看| 日本激情91| 丁香五月婷婷亚洲天堂| 97韩国久久电影院| 婷婷五月在线影院| 欧美日韓成人亚洲精品另类| 婷婷丁香五月综合| 99视频久久| 亚洲顶级VA在线观看-高清完整版在线影院观看-S022AV | 午夜免费试看| 9超碰在线| 五月天丁香婷婷久久九| 亚洲小视频免费看| 开心五月婷婷激情| 婷婷五月大| 精品婷婷| 开心久久五月天| 操骚货在线| 婷婷久久五月| 婷婷大香蕉| 色六月天天激情综合网| 亚洲激情网| 开心五月激情| 婷婷五月天av| site:901-07.com| 国产FREESEXVIDEOS性中国| 综合天天综合| 色婷婷在线视频| 天天成人五月天| 欧美成人猛片AAAAAAA| 俺五月| 欧美一级毛卡片无码| 国产日日操夜夜操的肉棒视频| 国产精品电| 深爱五月激情| a在线免费v| 色综合色五月| 五月婷婷狠天天色综合| 日本不卡高字幕在线2019| 欧美婷婷五月激情| 超碰99成人在线| 五月丁香色六月激情干大屄| 色综合狠狠色| 五月丁香综合激情| 激情五月天开心网丁香无码| caop视频| 91色在线 | 日韩| 51成人| AV九九| 深爱激情网五月天| 超碰网站在线观看| 9久久精品| 丁香伊人综合| 《丁香激情综合久久伊人久久》影视在线观看 -高清预告手机免费播放 -三妹影院 | 日韩无码专区| 翔田千里无码| 婷婷精品综合| 91精品丝袜久久久久久| 五月花婷婷最新| 九月婷婷综合网| 26uuu精品一区二区| 婷婷六月丁香色| 97超碰欧美中文字幕| 久久婷婷色| 五月丁香网中文字幕| 丁香五月天婷婷91| 色五月播五月| www一区二区三区| 九九色影视| 国产黄大片在线观看画质优化 | 五月丁香久久综合色| 色婷婷五月综合| 婷婷五月天性| 久热欧美| 人操综合| 欧美一级色| 九九热在线99| 激情啪啪五月天| 免费看片在线观看| 99精品综合视频| 最新丁香六月婷婷| 久久er九九| 色婷婷五月影院| 国产成人精品亚洲线观看| 激情五月天综合网| 九玖欧洲亚洲| 色婷婷综合网站| 丁香五月婷婷婷桃花影院| 成人午夜无码视频| 久久爱婷婷| 丁香五月天无码| 9l视频自拍9l九色成人| 国产肥白大熟妇BBBB视频| 91九色中文字幕女在线观看| 亭亭五月激情亚洲在线| 丁香五月婷婷狠狠色| 久久色吧| 麻豆AV一区二区三区| 可以直接看的av| 96丁香六月婷婷蜜桃综合久久| 六月香五月婷| 五月天丁香啪啪综合| 很很色丁香久久停停| 狠狠狠狠狠| 日韩成人无码人妻| 99热6精品| 日本AAAAAAAAAAAAAA片| 婷婷色五月综合丁香| 色天堂在线| 99日本视频| 亚洲一区二区色图-亚洲精品国产精品乱码-成人AV| 97色在线| 婷婷综合网站| 五月天丁香综合| 九九热免费视频| 色五月丁香五月婷婷五月成人网| 噜噜噜噜噜日本视频| 玖月婷婷爱丁香| 婷婷五月天激情小说| 色九综合| 亚洲婷婷久久综合| 人人草碰| 国产精品天天狠天天看| 少妇出轨做爰高潮A片| 婷婷五月天影院| 久久九九99| 99只有精品| 丁香五月天啪啪| 欧美色色色色色| a网站免费观看| 激情五月婷婷五月| 99热这里只有精品2| 激情久久久久久久久久久| 丁香激情四射| 超碰九九热| 五月天另类激情在线| 成人网在线视频| 亚洲熟妇无码乱子AV电影| www.久久99热地址发布| 亚洲综合在线播放| 99热这里都是精品| 天天插天天射| 五月丁香久久| 狠狠婷婷综合| 狠狠色婷婷综合开心影视| 色五月噜噜| 九色在线观看91av| 91干视频| 性爱AV天堂| 婷婷丁香五月激情综合站_久久五月丁香激情综合_开心五月综合激情综合五月_婷 | 深爱开心激情| 六月丁香av| 狠狠综合| 五月天激情小说| 国产精女同一区二区三区久| 九一牛视频探花| 国洲夜色亚热在线久久| 天天se在线视频| 武则天精品久久| 天天狠狠插| 区区欧美你爱| 伊人婷婷大香蕉| 久久婷五月| 欧美成人AAA片一区国产精品 | 亚洲最大视频| 丁香五月婷婷影院| 嫩BBB槡BBBB搡BBBB| 欧美成人在线观看| 《久久综合九色综合97婷婷| 狠狠香蕉| 五月天色网站| 荷兰av一级| 中文av网| 噜噜五月天综合| 色色色在线| 欧美久久五月婷婷| 夜夜干 夜夜操| 色综合婷婷| 综合色、色综合| www91精品| 五月婷婷综合网在线播放| 五月婷婷丁香色播网| 九九热在线精品视频| 99在线观看| 色色色宗合网| 噜噜色五月| 婷婷综合色播网| 成人丁香五月| 久久99网| 思思久久99热| 婷婷五月六月丁香| 99碰碰| 91人人操| www.操逼comm| 九九热啪啪| 久久九九热38| 久九色| 99热网站| 丁香婷婷综合激情五月色| 97婷婷丁香五月天激情图片| 深爱五月天婷综合| 久草狼人| 丁香五月天日韩无码| 伊人91| 无码髙清| 国产高清av黄色看片| 爆乳熟妇一区二区三区爆乳| 狠狠色噜噜色狠狠狠综合久久成人波| 日韩欧美颜射| 人人爽欧美婷婷久久久五月丁香| 爱之国产色情综合| 欧美乱码国产一级A片| 久久日婷婷| av在线超清中文| 激情丁香婷婷| 久热婷婷在线视频| 久久五月婷天天干| 亚洲色综合| 久99在线视频| 99这里热| Y11111111111少妇电影院| 五月激情婷婷色| 久久伊人大香蕉| 九九色大香蕉| 激情五月天伊人av| 五月婷婷五月天| 大香AV| 99热成人在线| 91九色白丝| 高清无码 一区 二区 三区| 久久久这里有精品| 色噜噜狠狠色综合成人99| 六月丁香激情| 日本高清不卡免费一区二区三区| 色的色综合| 人妻中文在线| 色五月首页| 九九黄色网| 色婷婷激情| 大香蕉婷婷久久| 99小视频在线观看| http://www.lingjunshare.com/| 欧美性色A片免费免费观看的 | renre人人操国产超碰在线| 亚洲天天| www.激情在线| 噜噜五月天综合| 热99这里只是精品| 激情婷婷色色| 欧美日韩一a.无| 色色五月婷婷| 成人短视频在线| 色婷婷视频| 丁香五月婷婷激情小说| 激情婷婷| 99热99成人| 亚洲V国产V欧美V久久久久久| 亚洲婷婷在线播放十月| 99精品久久| 狠狠草天天草| 国产乱妇无乱码大黄AA片| 69午夜成人影片| 熟女人妻一区二区三区免费看| 丁香五月深爱五月婷婷| 国产AV一区二区三区最新精品| 色五月开心开心五月激情五月| av一级棒av| 99热精品中文字幕| 综合网狠狠| 久久久无码精品成人A片小说 | 五月综合丁香婷婷| 9l视频自拍9l九色成人| 五月丁香婷婷成人网| 99激情视频热| www,999日本色| 五月的色婷婷高潮| 婷婷射图五月天| 亚州操人在线视频| 婷婷五月开心中文字幕色| 亚洲AV在线免费看| 婷婷婷婷婷婷婷婷| 色欲天天综合| 日本不卡高字幕在线2019| 玖久精品视频9| 大香蕉人人人| 国产在线中文字幕| 五月天色婷婷视频| 色婷婷亚洲综合网站| 欧美婷婷日本| 久久精品国产色| 婷婷性爱五月天丁香网| 欧美色色色色色色| 久久精品99| 国产国产乱老熟女视频网站97| 色婷婷五月天天天做| 中文字幕亚洲-区久久99婷婷| 久草A片| 色五月视频无码播放| 五月丁香天堂| 99热最新| 婷婷五月天堂一本在线| 婷婷天堂站| 欧美综合激情| 日韩人妻无码专区| 26UUU在线观看| 久热AA| 午夜69成人做爰视频| 五月天开心网| 亚洲 25P| 久久五月天色婷婷| 九九9久九9国产视频| 激情九月综合| 亚洲无码成人性爰网| 丁香五月综合婷婷| 婷婷中文字幕网站| 天天精品视频免费观看| 五月天激情婷婷小说| 啊v视频在线观看| 3p九色在线| 涩涩涩五月天| 国产日韩亚洲欧美在线观看| 色婷婷综合影院| 狠狠干.com| 狠狠综合久久| 色婷婷的五月天| 99爽视频| 婷婷丁香www视频日本韩国| 影音先锋AV资源男人站| 久久人妻情侣| 九月影院義母在线播放| 超碰京东热av男人的天堂| 色五月五月婷婷| 99综合自拍| 午夜电影网VA内射| 99这里只有精品国产| 三级毛片7979| 色五月婷婷天堂| 日韩精品AV一区二区三区| 人妻AV在线| 丁香六月久久| 深夜A片| 婷婷五月欧美综合| 五月婷婷开心亚洲无| 激情中文在线| 一区二区三区XXXXXX| 性生生活大片又黄又| 色5月婷婷| 91精品久久久久久| 色呦呦美女| 99亚洲色| 俺五月| 天天爽夜夜爽夜夜爽精| 开心婷婷五月天综合| 色婷婷五月天成人网| 青青久久大香蕉| 蒲京久久无码视频| 久久桃花网色婷婷| 精品夜夜澡人妻无码AV| 亚洲激情在线| 狠狠干在线| 色情成人五月天| 91操人视频| 五月婷婷无码| 色五月婷婷av| 亚洲午夜AV| 午夜成人天堂久久无码日韩久久| 国产欧洲欧洲精品久久| 九九婷婷网五月天| 伊人五月丁香| 亚洲婷婷免费| 五月婷婷六月丁香激情| 五月婷婷综合精品| 五月婷婷中文| 色在线视频网2025| 六月激情网| 亚洲男女激情| 激情性爱五月| 超碰在线观看9| 五月丁香啪啪综合| 人人干99| 九九精品免费| 五月婷婷久久综合| 国产成人精品一区二三区熟女在线| 激情五月综合亚洲另类| 国产3p露脸普通话对白| 日日做A爰片久久毛片A片英语| 丁香五月婷婷激情97| 美女婷婷激情亚洲| 黄页免费一级视频懂色| 97热九九| 97色色色| 亚洲在线激情婷婷五月| 婷婷五六日| www色婷婷com| 野战毛片三一3| 日本三级日本三级99| 99热在线播放| 校花娇喘呻吟校长陈若雪视频| 久久精品一区二区三区四区| 婷婷五月欧美AA片免费| 亚洲无码黄色| 五月天色色激情综合| 玖玖福利视频资源| 丁香五月婷婷色情综合| www九九热| 九九热精品| 超碰97色| 色伊人婷婷| 伊人婷婷激情| 五月婷婷第四色| 丁香五月色| 色五月,com| 在线看av| 婷婷免费精品视频| 丁香六月毛片| 91狠狠综合网| 丁香色五月 97干| 另类图片五月天激情| 婷婷综合视频| www.思思99热| 99热亚洲| 青青草免费公开视频| 高清国产AV| 伊人久久大香蕉网| 99综合色色色| 亚洲激情97五月天| 色婷丁香| 天天爽天天干| 国产一区二区av免费| 97碰在线免费观看| 丁香五月在线伊人| 激情五月深爱婷婷| AV在线免费网站| 色婷丁香91| 玖玖婷婷色五月| 五月丁香在线偷拍视频| 亚洲中文字幕AV| 最新无码专区| 这里只有精品偷拍| 五月激情婷婷六月| 久99| 最近中文字幕2019视频1| 亚洲不卡欧洲| 五月天狠狠草| 99色网站| 色婷婷综合综合网| 婷婷天天综合| 五月色丁香| 色爽九九| 婷婷五月中文字幕国产| 亚洲综合五月| 激情五月天婷婷丁香| 手机看片日日做夜夜| 66色在线日韩| 91av视频| 精品综合五月| 五月花免费视频| 六月丁香婷婷色狠狠久久| 深爱激情小说五月婷婷| 五月激情婷婷在线| 色欧美影院| 丁香五月天啪啪激情综和网| 国产精品电影| 五月天丁香久久| 色婷婷亚洲精品天天综| 九色综合网| 九九热视频精品2| 五月婷婷六月丁香综合| 婷婷丁香六月天激情四射网| 就爱干 在线| 久久97| 日本69日人视频| 97九色视频| 色噜婷婷| 99久久久| 猫咪伊人AV| 色婷婷伦理| 国产乱妇无乱码大黄AA片| 五月天成人综合| 9有码中文| 在线观看亚洲视频影院| 久久亚洲激情五码| 色婷婷激情视频| 欧美久久五月婷婷| 婷婷五月天影院| 91操色| 天天干一干| Av性爱网站| 日日夜夜狠狠| 精品国产va久久久久| 在线不卡视频| 婷婷综合| 五月婷婷开心网|