日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

数据结构教程(c语言)(已完结)

發布時間:2023/12/18 编程问答 64 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据结构教程(c语言)(已完结) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、基本概念和術語

  • 數據: 是客觀事物的符號表示,能夠輸入到計算機中并能被計算機程序處理的符號的總稱
  • 數據元素: 是數據的基本單位,用于完整地描述一個對象
  • 數據對象: 是性質相同的數據元素的集合,是數據的一個子集
  • 數據項: 是組成數據元素的,有獨立含義的,不可分割的最小單位
  • 數據結構: 是相互之間存在的一種或者多種的特定關系的數據元素的集合,換句話說,數據結構是帶結構的數據元素的集合,“結構”,就是指數據元素之間的關系。數據結構包括,邏輯結構和存儲結構兩個層次。

邏輯結構: 兩個要素:數據元素和關系
四種基本邏輯結構:集合結構,線性結構,樹結構,圖結構

非線性結構:樹,二叉樹,有向圖,無向圖 線性結構:線性表(線性表,棧與隊列,字符串,數組,廣義表)

具體如下圖:

存儲結構: 數據對象在計算機中的存儲表示成為數據的存儲結構,也稱為物理結構

順序存儲結構:順序存儲是借助元素在存儲器中的相對位置來表示數據元素之間的邏輯關系通常借助程序設計語言的 數組 來表示。 鏈式存儲結構:順序存儲結構要求所有元素依次存放在一片連續的存儲空間內鏈式存儲結構,則不需要占據一整塊存儲空間只需要給每個節點附加指針,用于存放后繼元素的存儲地址通常借助于程序設計語言的 指針 來表示。

二、算法和算法分析

  • 算法:是為了解決某類問題而規定的一個有限長的操作序列

    算法具有的五個特性:
    有窮性: 有限步驟,有限時間
    確定性: 不產生二義性
    可行性: 基本操作運算執行有限次來實現
    輸入: 有零個或者多個輸入
    輸出: 有一個或者多個輸出

  • 評價算法優劣的基本準則:
    正確性,可讀性(易于理解,相互交流),健壯性(能對非法輸出做出良好的回應),高效性(時間復雜度,空間復雜在度來衡量)


接下來介紹時間復雜度和空間復雜度: 先來說明兩個概念:

問題規模: 算法求解問題輸入量的多少,是問題大小的本質表示
語句頻度: 一條語句重復執行的次數

時間復雜度:(重要)

先來看個簡單的例子

//求兩個n階矩陣的乘積算法 for(i=1;i<=n;i++){ //頻度為 n+1for(j=1;j<=n;j++){ //頻度為 n*(n+1)c[i][j]=0; //頻度為 n^2for(k=1;k<=n;k++){ //頻度為 n^2*(n+1)c[i][j] = c[i][j]+a[i][k]*b[k][j]; //頻度為 n^3}} }

該算法中的所有語句頻度之和,是矩陣階數n的函數
f(n)f(n)f(n)表述:f(n)=2n3+3n2+2n+1f(n)=2n^3+3n^2+2n+1f(n)=2n3+3n2+2n+1
為了方便,我們這樣來理解,至少我就是這樣來理解的,忽略低階,忽略系數,在數學中,當n無窮大時,f(n)=n3f(n)=n^3f(n)=n3,3次方對該方程的影響最大。

所以一般情況下:算法中的基本語句的,重復執行的次數,是問題規模n的某個函數f(n)f(n)f(n),算法的時間度量記為:T(n)=O(f(n))T(n)=O(f(n))T(n)=O(f(n))他表示問題規模n的增大,算法執行時間的增長率和f(n)的增長率相同,成為算法的漸進時間復雜度,簡稱為時間復雜度
上述例子的時間復雜度為:O(n3n^3n3)

加深理解,我們再來看兩個例子:

{x++;s=0}//時間復雜度為O(1)

實際上如果算大執行時間不隨問題規模n的增加而增長,算法中的語句頻度就是個常數,即使這個常數再大,算法的時間復雜度都是O(1)O(1)O(1)

再來看一個例子:

for(i=0;i<10000;i++){x++;s=0; } //時間復雜度仍然為O(1)

再來一個例子(對數階):

for(i=1;i<=n;i=i*2){x++;s=0; }

設循環體內兩條基本語句的頻度為f(n),
那么就有2f(n)≤n2^{f(n)}\leq n2f(n)nf(n)≤log2nf(n)\leq log_2 nf(n)log2?n時間復雜度:T(n)=O(log2n)T(n)=O(log_2 n)T(n)=O(log2?n)

i=1; while(i<=n)i=i*3;

同設:3f(n)≤n3^{f(n)}\leq n3f(n)n
時間復雜度:O(log3n)O(log_3 n)O(log3?n)
常見的時間復雜度按數量級遞增排列依次為:
常量階O(1),常量階O(1),O(1)對數階O(log2n),對數階O(log_2n),O(log2?n)線性階O(n),線性階O(n),O(n)線性對數階O(nlog2n),線性對數階O(n log_2 n),O(nlog2?n)平方階O(n2),平方階O(n^2),O(n2)立方階O(n3),立方階O(n^3),O(n3)k次方階O(nk),k次方階O(n^k),kO(nk)指數階O(2n)指數階O(2^n)O(2n)

最好時間復雜度:算法計算量可能達到的最小值
最壞時間復雜度:算法計算量可能達到的最大值
平均時間復雜度:算法在所有可能下,按輸入實例以等概率出現,算法計算量的加權平均值

說明:一般情況人們只關心最壞情況下的時間復雜度,一般的時間復雜度,指的就是最壞時間復雜度

接下來舉個例子說明

for(i=0;i<n;i++){if(a[i]==e) return i+1; return 0; }

上述例子語句頻度不止與n有關,還與輸入實例中的數組a[i]的各元素值以及e的取值有關, 假定數組中存在與e相同的值,且要查找的值就在a[0]位置,這樣的情況最好,為O(1)O(1)O(1),最壞的情況下為O(n)O(n)O(n)


空間復雜度

關于算法存儲空間需求,類似于算法的時間復雜度,我們采用漸進空間復雜度作為算法所需存儲空間的度量民間稱空間復雜度,它也是問題規模n的函數,記作: S(n)=O(f(n))S(n)=O(f(n))S(n)=O(f(n))

一般情況下,一個程序在機器上執行時,除了需要本身所用的指令,常數,輸入數據外,還需要一些對數據進行操作的輔助存儲空間,其中對于輸入數據所占的具體存儲量取決于問題本身,與算法無關,這樣,只需要分析該算法在實現時所需要的輔助空間就可以了

下面看兩個例子:
均實現數組逆序
算法一

for(i=0;i<n/2;i++){t=a[i];a[i]=a[n-i-1];a[n-i-1]=t; }

算法二

for(i=0;i<n;i++){b[i]=a[n-i-1]; } for(i=0;i<n;i++){a[i]=b[i]; }

算法一僅需要借助一個變量t,與問題規模n大小無關,空間復雜度為:O(1)
算法二需要借助另外一個大小為n的輔助數組b,空間復雜度為:O(n)

總結:對于一個算法,其時間復雜度和空間復雜度往往是相互影響的,當追求一個較好的時間復雜度時,可能會導致占用較多的存儲空間,即可能會使空間復雜度的性能變差,反之亦然。不過通常情況下鑒于運算空間較為充足,人們都以算法的空間復雜度作為算法的衡量指標

三、線性表

  • 基本特點:除第一個元素無直接前驅,最后一個元素無直接后繼以外,其他每個基本元素都有一個前驅和后繼
  • 線性表是最基本最常用的一種線性結構,也是其他數據結構的基礎,尤其單鏈表
  • 定義:由n(n≥0)n(n≥0)n(n0)個數據特性相同的元素構成的有限序列稱為線性表
  • 空表: 線性表中元素的個數n定義為線性表的長度,n=0時為空表
  • 順序表: 線性表的順序表示指的時用一組地址連續的存儲單元依次存儲線性表的數據元素,這種表示頁稱作表的順序存儲結構(隨機存取)或順序映像。
    順序表特性:邏輯上相鄰的數據元素,其物理地址次序也是相鄰的
線性表的兩種實現(java)
順序表鏈表
空間性能順序表的存儲空間是靜態分布的,需要一個固定的數組,總有部分數組元素要浪費鏈表的存儲空間是動態分布,因此不會有空間被浪費。但由于鏈表需要額外的空間來為每個節點保存指針,因此也要犧牲一部分空間
時間性能順序表中的元素的邏輯順序和物理存儲順序保持一致,而且支持隨機存取。因此順序表在查找,讀取時候效率很快鏈表采用鏈式結構來保存表內的元素,因此在插入、刪除的時候效率比較高
1. 線性表本質上是一個充當容器的工具類,當程序有一組結構相同的數據元素需要保存的時候,就可以考慮使用線性表來保存。
2. Java中經常使用的線性表是list,Java中list接口就是代表線性表,線性表中常見的兩種實現分別是ArrayList和LinkedList,其中LinkedList是一個雙向鏈表,而ArrayList是動態數組來實現。
3. ArrayList實現原理是數組,有點在于遍歷查找速度很快,但是對于插入和刪除效率不高。
4. LinkedList的實現就是鏈表遍歷和查找速度不高,但是插入和刪除的效率很高。
至于具體的線性表操作算法,此處不再贅述! 實在想知道,百度一下~

接下來,我們要關注的是線性鏈表(單鏈表)

  • 線性鏈表的存儲結構特點: 用一組任意的存儲單元存儲線性表的數據(存儲單元可連續,也可不連續)

所以,數據元素aia_iai?,與其直接后繼元素的ai+1a_{i+1}ai+1?的邏輯關系。對于a1a_1a1?來說,處理本身的存儲信息外,還需要一個指示其直接后繼的信息(即直接后繼的存儲位置),這兩部分組成了aia_iai? 的存儲映像,即結點,它包括兩個域:數據域(存儲數據信息),指針域(存儲直接后繼的位置信息),指針域中存儲的信息稱為:指針或者鏈



以上兩張圖,比較全面的表示出了單鏈表的特點!

一般情況下,為了方便處理,我們還會再單鏈表的第一個節點之前附設一個節點,稱為頭結點,作用有如下兩點:1. 便于首元結點的處理 2 .便于空表和非空表的統一處理

下面對三個容易混淆的概念加以說明:

  • 首元結點: 指鏈表中存儲第一個數據元素a1a_1a1?的結點,例如圖2.8中的結點“ZHAO”
  • 頭結點: 在首元結點之前的一個結點,其指針域只想首元結點,頭節點的數據域可以不存儲任何信息
  • 頭指針: 指向鏈表中的第一個結點的指針。若鏈表設有頭結點, 則頭指針所指結點為線性表的頭結點;若鏈表沒有設頭節點,則頭指針所指結點為該線性表的首元結點

同上,單鏈表的操作算法,不在贅述

接下里,介紹循環鏈表雙向鏈表

  • 循環列表:是一種形式的鏈式存儲結構,其特點是,表中的最后結點的指針域指向頭結點,整個鏈表形成一個環。

  • 雙向鏈表: 顧名思義,在雙向鏈表中有兩個指針域,一個指向直接后繼,另一個指向直接前驅

接下來是總結,為了方便,直接貼圖!

一個公式:

存儲密度=數據元素本身所占的存儲量結點結構占用的存儲量存儲密度=\frac{數據元素本身所占的存儲量}{結點結構占用的存儲量}=?

四、棧和隊列

  • 棧和隊列的定義和特點

    棧:是限定僅在表尾進行插入或者刪除的線性表,所以,對于棧來說,表尾端有特殊含義,稱為棧頂,表頭稱為棧底,其最大的特點就是后進先出

    個人覺得,火車的例子很好理解~

    隊列:是僅允許在表的一端插入,一端刪除,前者那一端稱為隊尾,后者那一端稱為隊頭,實際生活中,排隊時最好的例子,其最大的特點是先進先出

  • 棧的表示和操作實現

    棧的類型定義,順序棧和鏈棧,初始化,增刪改查!

  • 棧和遞歸

    遞歸: 若是在一個函數、過程或者數據結構定義的內部又直接(或間接)出現定義本身的應用,則稱它們是遞歸

    例如:

    階乘的定義:
    若n=0,則若n=0,則n=0Fact(n)=1Fact(n)=1Fact(n)=1若n>0,則若n>0,則n>0Fact(n)=n?Fact(n?1)Fact(n)=n*Fact(n-1) Fact(n)=n?Fact(n?1)
    Hanoi問題:

    • 問題描述:假設有3個分別命名為A、B、C的塔座,在塔座A上插有n個直徑大小各不同,一小到大標號為1,2,…,n的圓盤,要求將塔座A上的n個圓盤移動到C盤上,并且仍按原來的順序疊排。

      同時遵循下列規則:

      • 每次只能移動一個圓盤
      • 圓盤可以插在A、B、C中的任一塔座上
      • 任何時刻都不能將一個較大的圓盤壓在較小的圓盤之上


      算法如下:

      void Hanoi(int n,char A,char B,char C){//將塔座A上的n個圓盤按規則搬到C上,B做輔助塔if(n==1) move(A,1,C); //將編號為1的圓盤從A移動到Celse{Hanoi(n-1,A,C,B); //將編號為1至n-1的圓盤移動到B,C做輔助塔move(A,n,C); //將編號為n的圓盤從A移動到CHanoi(n-1,B,A,C); //將B上編號為1至n-1的圓盤移動到C,A做輔助塔} }

      個人理解:當有3個圓盤時,怎么移動大家應該都很清楚,那么當有多個圓盤時,把最底層的兩個圓盤除外,上面的所有圓盤當作整體,然后在研究這個 “整體”,如果數量還很多,可以繼續使用整體思想

    而上述算法,則是一直遞歸到n=1為止,然后在把遞歸,一層層“翻”出來!

    遞歸算法優缺點

    • 優點:程序結構清晰,形式簡潔但遞歸程序在執行時需要系統提供隱式的工作棧來保存調用過程中的參數、局部變量和返回地址
    • 缺點:占用內存空間多,運行效率較低

與此類似的還有八皇后問題迷宮問題等。。

  • 隊列的表示和操作實現

    隊列也有兩種存儲表示:順序存儲,鏈式存儲
    其操作實現和順序棧類似,具體算法,具體分析,此處不再贅述

五、串,數組,廣義表

  • 串:

    定義:是由零個或者多個字符組成的有限序列,或者稱為字符串。
    特點:串是一種特殊的線性表,特殊性體現在,其處理的數據元素是一個字符。串中的字符數目n稱為串的
    長度
    ,0個字符的串稱為空串
    子串:串中任意個連續的字符組成的子序列稱為該串的子串,包含子串的串稱為主串
    位置: 通常,稱字符在序列中的序號為該字符在串中的位置,子串在主串中的位置則以子串的第一個子都在主串中的位置來表示

下面舉例說明:

a = "BEI" b = "JING" c = "BEIJING" d = "BEI JING"他們的長度長度分別為:3,4,7,8 a和b都是c和d的子串 a在c和d中的位置都是1 b在c中的位置是4,在d中的位置則是5

相等的串: 當且僅當這兩個串的值相等,也就是說,兩個串的長度,并且對應位置的字符都相等時才相等。
空格串: 由一個或者多個空格組成的串“ ”,注意:此處并不是空串

串的存儲結構: 順序存儲,鏈式存儲,但考慮到存儲效率和算法的方便性,串多采用順序結構

順序存儲:

//--------串的定長順序存儲結構------------ #define MAXLEN 225 //串的最大長度 typedef struct{char ch[MAXLEN+1]; //存儲串的一維數組int length; //串的當前長度 }//----------串的堆式存儲結構----------- type struct{char *ch; //若是非空串,則按串長分配存儲區,否則ch為空int length; //串的當前長度 }

鏈式存儲:

//順序串的插入和刪除不方便,需要移動大量元素,因此采用單鏈表方式存儲串 #define CHUNKSIZE 80 //由用戶定義塊大小 typedef struct{char ch[CHUNKSIZE];struct Chunk *next; }Chunk; typedef struct{Chunk *head,*tail; //串的頭和尾指針int length; //串的當前長度 }LString;

貼一張圖加深理解:


下面介紹兩個著名的模式匹配算法: 應用于:搜索引擎,拼寫檢查,語言翻譯,數據壓縮等
1.BF算法
此算法是最簡單直觀的模式匹配算法

int Index_BF(SString S,SString T,int pos){//返回模式T在主串S中第pos個字符開始第一次出現的位置,若是不存在,則返回0//其中,T為非空,1<=pos<=S.lengthi=pos;j=1; //初始化while(i<=S.length && j<=T.length){//兩個串均為比較到串尾if(S.ch[i] == T.ch[j]){//繼續比較后繼字符++i;++j;}else{//指針后退重新開始i=i-j+2;j=1;}if(j>T.length) return i-T.length;//匹配成功else return 0;//匹配失敗} }

下圖為子模式:T=“abcac”T=“abcac”T=abcac和主串S匹配過程:

2.KMP算法
此算法是BF算法的改進版

int index_KMP(SString S,SString T,int pos){//利用模式串T的next函數求T在主串S中的第pos個字符之后的位置//其中,T非空,1<=pos<=S.lengthi = pos;j=1; //初始化while(i<=S.length && j<=T.length){//兩個串均為比較到串尾if(j==0 || S.ch[i] == T.ch[j]){//繼續比較后繼字符++i;++j;}else{//模式串向右移動j=next[j];}if(j>T.length) return i-T.length;//匹配成功else return 0;//匹配失敗 }

KMP算法是在已知模式串的next函數值的基礎上進行的。
下面兩張圖說明函數next()next()next():


以上可以看出,next()next()next()的函數值,取決于模式串本身。下面介紹求next()next()next()函數值的算法

void get_next(SString T,int next[]){//求模式串T的next值,并存放到數組next中i=1;next[1]=0;j=0;while(i<T.length){if(j==0 || T.ch[i]==T.ch[j]){++i;++j;next[i]=j;}else j=next[j];} }
  • 數組:

    定義: 數組是由類型相同的元素構成的有序集合,每個元素稱為數組元素
    特點: 結構中的元素本身可以是具有某種結構的數據,但屬于統一數據類型
    數組的順序存儲:
    由于數組一般不做插入或刪除操作,所以一般采用順序存儲。
    對于二維數組來說,有兩種存儲方式

    • 以行序為主的存儲
      假設每個數據元素占L個存儲單元,則二維數組A[0...m?1,0...n?1]A[0...m-1,0...n-1]A[0...m?1,0...n?1] (即下標從0開始,共有m行n列)中任意元素aij的存儲單元位置可由下式確定:LOC(i,j)=LOC(0,0)+(n?i+j)LLOC(i,j)=LOC(0,0)+(n*i+j)LLOC(i,j)=LOC(0,0)+(n?i+j)L
      式中,LOC(i,j)LOC(i,j)LOC(i,j)aija_{ij}aij?的存儲位置;LOC(0,0)LOC(0,0)LOC(0,0)a00a_{00}a00?的存儲位置,即二維數組A的起始位置,也稱為基地址或者基址

推廣到n維數組:LOC(j1,j2,...,jn)=LOC(0,0,...,0)+∑i=1ncijiLOC(j_1,j_2,...,j_n)=LOC(0,0,...,0)+\sum_{i=1}^nc_ij_iLOC(j1?,j2?,...,jn?)=LOC(0,0,...,0)+i=1n?ci?ji?其中,Cn=L,Ci?1=bici,1<i≤n其中,C_n=L,C_{i-1}=b_ic_i,1<i≤nCn?=LCi?1?=bi?ci?,1<in

  • 以列序為主的存儲:
    同理有以下公式可確定位置:LOC(i,j)=LOC(0,0)+(m?i+j)LLOC(i,j)=LOC(0,0)+(m*i+j)LLOC(i,j)=LOC(0,0)+(m?i+j)L

特殊矩陣的壓縮存儲:

  • 對稱矩陣
  • 三角矩陣
  • 對角矩陣

以上,自行了解,不再贅述

  • 廣義表:
    定義:顧名思義廣義表就是線性表的推廣,也稱為列表,一般記作:LS=(a1,a2,...,an)LS=(a_1,a_2,...,a_n)LS=(a1?,a2?,...,an?)其中,LS是廣義表的名字,n是其長度其中,LS是廣義表的名字,n是其長度LSnai既可以是單個元素,也可以是廣義表,分別稱為廣義表LS的原子和子表ai既可以是單個元素,也可以是廣義表,分別稱為廣義表LS的原子和子表aiLS

舉例如下:

  • A=() ——A是一個空表,其長度為0
  • B=(e) ——B只有一個原子e,其長度為1
  • C=(a,(b,c,d)) ——C的長度為2,兩個元素分別為原子a和子表(b,c,d)
  • D=(A,B,C) ——D的長度為3,3個元素都是廣義表,可以將值帶入
  • E=(a,E) ——E的長度為2,這是一個遞歸表,E相當于一個無限廣義表E=(a,(a,(a,…)))

由上述例子得出三個結論

  • 廣義表的元素可以是子表,而子表的元素還可以是子表,由此,廣義表是一個多層次結構
  • 廣義表可以為其他廣義表所共享,由D可以看出
  • 廣義表可以是一個遞歸的表

廣義表的運算

  • 取表頭
  • 取表尾

注意:廣義表()和(())不同,前者為空表,長度為0,后者長度為1,可分解得到其表頭,表尾均為空表()

廣義表的存儲結構
通常情況,采用鏈式存儲結構,分為兩種:

  • 頭尾鏈表的存儲結構
  • 擴展線性鏈表的存儲結構

以上兩種結構,自行了解,此處不再贅述

六、樹和二叉樹

  • 樹和二叉樹的定義:
    樹:n(n≥0)n(n≥0)nn0個結點的有限集,它或為空樹(n=0),或為非空樹,對于非空樹T:
    • 有且僅有一個稱之為根的結點;
    • 出根節點以外的其余結點可分為m(m>0)m(m>0)mm>0個互不相交的有限集T1,T2,...,TmT_1,T_2,...,T_mT1?,T2?,...,Tm?,其中每一個集合本身又是一棵樹,并且稱為根的子樹

樹的一般表示:

樹的其他表示:

  • 嵌套集合形式:

  • 廣義表形式:

  • 凹入表示法(類似書的編目):

    樹的基本術語:

    • 結點: 樹中的一個獨立單元,包含一個數據元素及若干指向子樹的分支,如圖5.1(b)中的A,B,C,D等(下面術語,均以圖5.1(b)為例)
    • 結點的度: 結點擁有的子樹數稱為結點的度,例如,A的度為3,C的度為1,F的度為0
    • 樹的度: 樹的度是樹內各結點度的最大值,5.1(b)所示的樹的度為3
    • 葉子: 度為0的結點稱為葉子或者終端結點。結點K,L,F,G,M,I.J都是樹的葉子
    • 非終端結點: 度不為0的結點稱為非終端結點或者分支結點,除根結點,非終端結點也稱為內部結點
    • 雙親和孩子: 結點的子樹的根稱為該結點的孩子,相應的該結點稱為孩子的雙親,例如:B的雙親為A,B的孩子由E和F
    • 兄弟: 同一個雙清的孩子之間互稱為兄弟,例如H,I,J互為兄弟
    • 祖先: 從根到該結點所經分支上的所有結點,例如:M的祖先為A,D,H
    • 子孫: 以某結點為根的子樹中的任一結點都稱為該結點的子孫,如B的子孫為E,K,L,F
    • 層次: 結點的層次從根結點定義起,根為第一層,根的孩子為第二層,樹中任一結點的層次等于其雙親層次加1
    • 堂兄弟: 雙親在同一層的結點互為堂兄弟。例如:結點G與E,F,H,J,I為堂兄弟
    • 樹的深度: 樹中的結點的最大層次稱為樹的深度或高度,例子中的深度為4
    • 有序樹和無序樹: 如果將樹中結點的各子樹看成從左至右是有次序的(即不能互換),則稱該樹為有序樹,否則稱為無序樹。在有序樹中最左邊的子樹的根稱為第一個孩子,最右邊的稱為最后一個孩子
    • 森林:m(m≥0)m(m≥0)mm0棵互不相交的樹的集合,對于樹中每個結點而言,其子樹的集合即為森林

    二叉樹:

    • 定義:n(n≥0)n(n≥0)nn0個結點所構成的集合,它或為空樹或為非空樹,對于非空樹T:

      • 有且僅有一個稱之為根的結點;
    • 除根結點以外的其余結點分為兩個互不相交的子集T1,T2T_1,T_2T1?T2?,分別稱為T的左子樹和右子樹,且T1,T2T_1,T_2T1?T2?本身又都是二叉樹

    • 二叉樹與樹的區別

      • 二叉樹每個結點至多只有兩棵子樹(即二叉樹中不存在度大于2的結點)
    • 二叉樹的子樹有左右之分,其次順序不能任意顛倒

    • 二叉樹的性質和存儲結構:

      性質:

      • 性質1: 在二叉樹的第i層上至多有2i?12^{i-1}2i?1個結點(i≥1),至少有1個
      • 性質2: 深度為k的二叉樹至多有2k?12^{k-1}2k?1個結點(k≥1),至少有k個
      • 性質3: 對任一棵二叉樹T,如果其終端結點數為n,度為2的結點數為m,則n=m+1

    接下來,先介紹滿二叉樹完全二叉樹

  • 滿二叉樹: 深度為k且含有2k?12^{k-1}2k?1個結點的二叉樹
    特點
    - 每一層上的結點數都是最大結點數
    - 對滿二叉樹的結點進行連續編號,約定編號從根結點開始,自上而下,自左向右,由此得出完全二叉樹的概念

  • 完全二叉樹: 深度為k的,有n個結點的二叉樹,當且僅當其每一個結點都與深度為k的滿二叉樹中的編號從1至n的結點一一對應時,稱為完全二叉樹

    特點:

    • 葉子結點只可能是在層次最大的兩層出現;
    • 對于任一結點,若其右分支下的子孫的最大層次為 i,則其左分支下的子孫的最大層次必為 i 或者 i+1

    性質

    • 性質4: 假設深度為k,則根據性質2和完全二叉樹的定義有2k?1?1<n≤2k?1或者2k?1≤n<2k2^{k-1}-1<n≤2^{k-1}或者2^{k-1}≤n<2^k2k?1?1<n2k?12k?1n2k于是k?1≤log2n<k,因為k是整數,所以k=?log2n?+1k-1≤log_2n<k,因為k是整數,所以k=\lfloor{log_2n}\rfloor +1k?1log2?nkkk=?log2?n?+1
    • 性質5: 如果對一棵樹有n個結點的完全二叉樹(其深度為?log2n?+1\lfloor{log_2n}\rfloor +1?log2?n?+1)的結點按層序編號(從第一層到第?log2n?+1\lfloor{log_2n}\rfloor +1?log2?n?+1層,每層從左到右),則對任一結點i(1≤i≤n)i(1\leq i\leq n)i(1in),則有:
      • (1)如果i=1,則結點i是二叉樹的根,無雙親,如果i>1,則其雙親PARENT(i)是接待你?i/2?\lfloor i/2 \rfloor?i/2?
      • (2)如果2i>n,則結點i無左孩子(結點i為葉子結點);否則其左孩子LCHILD(i)是結點2i
      • (3)如果2i+1>n,則幾點i無右孩子;否則其右孩子RCHILD(i)是結點2i+1

    符號說明:

    • ?x?\lfloor x\rfloor?x?表示不大于xxx的最大整數
    • ?x?\lceil x\rceil?x?表示不小于xxx的最小整數

    存儲結構:

  • 順序存儲結構
    適用于完全二叉樹,按層序存儲,一般的二叉樹會造成空間的浪費

  • 鏈式存儲結構
    類似于線性表,設置數據域,左右指針域

  • 遍歷二叉樹:

    • 遍歷二叉樹: 是指按某條搜索路徑巡訪樹中的每個結點,使得每個接待你均被訪問一次,而且僅被訪問一次

      • 約定:L,D,R分別代表遍歷左子樹,訪問根結點,遍歷右子樹
      • 訪問方法:一般有三種方式:前序遍歷(DLR),中序遍歷(LDR),后序遍歷(LRD),這是在不分左右的情況下,如果分左右,可得到另外三種訪問方式
      • 結論:得知前序遍歷和中序遍歷或者中序遍歷和后序遍歷,可以畫出該二叉樹,前序遍歷和后續遍歷不能確定唯一的一棵二叉樹

      下面舉個例子:
      先來看看幾個特性

      • 特性A,對于前序遍歷,第一個肯定是根節點;
      • 特性B,對于后序遍歷,最后一個肯定是根節點;
      • 特性C,利用前序或后序遍歷,確定根節點,在中序遍歷中,根節點的兩邊就可以分出左子樹和右子樹;
      • 特性D,對左子樹和右子樹分別做前面3點的分析和拆分,相當于做遞歸,我們就可以重建出完整的二叉樹;

      題目:前序遍歷的順序是: CABGHEDF,中序遍歷的順序是: GBHACDEF,畫出這棵二叉樹,找到其后序遍歷
      解:

  • 哈夫曼樹:

    • 定義:哈夫曼樹又稱最優樹,是一類帶權路徑長度最短的樹

    接下來介紹一些基本概念:

    • 路徑: 從樹的一各結點到另一個結點之間的分支構成兩個結點之間的路徑
    • 路徑長度: 路徑上的分支數目稱作路徑長度
    • 樹的路徑長度: 從樹根到每一個接待你的路徑長度之和
    • 權: 賦予某個實體一個量,是對實體的某個或某些屬性的數值化描述,在數據結構中實體有結點(元素)和邊(關系)兩大類,所以對應有結點權和邊權。結點權或邊權具體代表什么意義,由實際情況決定,如果在一棵樹中的結點上帶有權值,則對應的就帶有權樹等概念
    • 結點的帶權路徑長度: 從該結點到樹根之間的路徑長度與結點上權的乘積
    • 樹的帶權路徑長度: 樹中所有葉子結點的帶權路徑長度之和,通常記作:∑k=1nwklk\sum_{k=1}^nw_kl_kk=1n?wk?lk?
    • 哈夫曼樹:假設有m個權值{w1,w2,...,wm}\{w_1,w_2,...,w_m\}{w1?,w2?,...,wm?},可以構造一棵含有n個葉子結點的二叉樹,每個葉子結點的權為wiw_iwi?,其中帶權路徑長度WPL最小的二叉樹稱作最優二叉樹或哈夫曼樹

      上圖(c)即為哈夫曼樹

那么如何構造一棵哈夫曼樹呢?
哈夫曼樹構造過程:

  • 根據給定的n個權值{w1,w2,...,wn}\{w_1,w_2,...,w_n\}{w1?,w2?,...,wn?},構造n棵只有根結點的二叉樹,這n棵二叉樹構成一個森林F。
  • 在森林F中選取兩棵根結點權值最小的樹最為左右子樹構造一棵新的二叉樹,且置新的二叉樹的根結點的權值為其左右子樹上根結點的權值之和
  • 在森林F中刪除這兩棵樹,同時將新的到的二叉樹加入F中
  • 重復第二步,第三步,直到F中含有一棵樹為止,這棵樹便是哈夫曼樹

七、圖

  • 圖定義和基本術語:

  • 定義:圖G由兩個集合V和E組成,記作G=(V,E)G=(V,E)G=(V,E),其中V是頂點的有窮非空集合,E是V中的頂點偶對的有窮集合,這些頂點偶對稱為V(G)V(G)V(G)E(G)E(G)E(G)通常分別表示圖G的頂點集合和邊集合,E(G)E(G)E(G)可以為空集。若E(G)E(G)E(G)為空,則圖G只有頂點而沒有邊。

    對于圖G,若邊集E(G)E(G)E(G)為有向邊的集合,則該圖為有向圖;反之,則該圖為無向圖
    在有向圖中頂點對用尖括號表示,例如:<x,y><x,y><x,y>是有序的
    在無向圖中用圓括號表示,例如:(x,y)(x,y)(x,y)是無序的。

    用n表示圖中的頂點數目,用e表示邊的數目,來說明一些基本術語:

    • 子圖: 假設有兩個圖G=(V,E)G=(V,E)G=(V,E)G′=(V′,E′)G'=(V',E')G=(V,E),如果V′∈VV'\in VVVE′∈EE'\in EEE,則稱G′G'GGGG的子圖
    • 無向完全圖和有向完全圖: 對于無向圖,若具有n(n?1)/2n(n-1)/2n(n?1)/2條邊,則稱為無向完全圖,對于有向圖,若具有n(n?1)n(n-1)n(n?1)條弧,則稱為有向完全圖
    • 稀疏圖和稠密圖: 有很少條邊或弧(如e<nlog2ne<nlog_2ne<nlog2?n),的圖稱為稀疏圖,反之稱為稠密圖
    • 權和網: 每條邊可以標上具有某種意義的數字,該數值就稱為該邊的,這些權可以表示從一個頂點到另一個頂點的距離或耗費。這種帶權的圖通常稱為
    • 鄰接點: 對于無向圖G,如果圖的邊(v,v′)∈E(v,v')\in E(v,v)E,則頂點v,v’稱為鄰接點。
    • 度,入度,出度: 頂點y的度是指和y相關聯的邊的數目,記為TD(v)TD(v)TD(v),入度是指以頂點v為頭的弧的數目記作ID(v)ID(v)ID(v),出度是以v為頂點的弧數目,記作OD(v)OD(v)OD(v) ,三者滿足:TD(v)=ID(v)+OD(v)TD(v)=ID(v)+OD(v)TD(v)=ID(v)+OD(v)。一般的滿足:e=12∑i=1nTD(vi)e=\frac 12 \sum_{i=1}^nTD(v_i)e=21?i=1n?TD(vi?)例如:圖6.1中,G1G_1G1?V1V_1V1?的出度為2,入度1,度為3
    • 路徑和路徑長度: 在無向圖G中,從頂點v到頂點v’的路徑是一個頂點序列集合,如果是有向圖,那么路徑也是有向的。路徑長度是一條路徑上經過的邊或弧的數目
    • 回路或環: 第一個頂點和最后一個頂點相同的路徑
    • 簡單路徑,簡單回路,簡單環: 序列中頂點不重復出現的路徑稱為簡單路徑,除了第一個頂點和最后一個頂點之外,其余頂點不重復出現的回路,稱為簡單回路或簡單環
    • 連通,連通圖,連通分量: 在無向圖中,兩個頂點之間有路徑,則稱這兩個頂點之間是連通的,如果一個圖中的任意兩個頂點之間連通,則稱該圖為連通圖,連通分量是指無向圖中的極大連通子圖
    • 強連通圖,強連通分量: 在有向圖中,如果任意兩個頂點(不相等的兩個頂點),之間都存在路徑。則稱該圖為強連通圖,有向圖中的極大連通子圖稱為有向圖的強連通分量
    • 連通圖的生成樹: 一個極小連通子圖,它含有圖中全部頂點,但只有足以構成一棵樹的n-1條邊,這樣的連通子圖稱為連通圖的生成樹
  • 圖的存儲結構:

  • 鄰接矩陣

    • 表示頂點之間相鄰關系的矩陣,設G(V,E)是具有n個頂點的圖,則矩陣具有如下性質:若<vi,vj>或(vi,vj)∈E若<v_i,v_j>或(v_i,v_j)\in E<vi?,vj?>(vi?,vj?)E則A[i][j]=1則A[i][j]=1 A[i][j]=1反之反之A[i][j]=0A[i][j]=0A[i][j]=0
      下圖是圖6.1所示G1G_1G1?G2G_2G2?的鄰接矩陣

      若G是網:

      鄰接矩陣的優點:

      • 便于判斷兩個點之間是否有邊
      • 便于計算各個頂點的度

      鄰接矩陣的 缺點:

      • 不便于增加和刪除頂點
      • 不便于統計邊的數目
      • 空間復雜度高
  • 鄰接表
    鄰接表是圖的一種鏈式存儲結構,在鄰接表中,對圖中每個頂點viv_ivi?建立一個單鏈表,把與viv_ivi?相鄰接的頂點放在這個鏈表中,鄰接表中每個單鏈表的第一個結點存放有關頂點的信息,把這以結點看出鏈表的表頭,其余節點存放有關邊的信息,這樣,鄰接表便有兩部分組成,表頭結點表和邊表

    • 表頭結點表:由所有表頭結點以順序結構的形式存儲,以便可以隨機訪問任一頂點的邊鏈表。表頭結點包括數據域鏈域
    • 邊表:由表示圖中頂點間關系的2n個邊鏈表組成,邊鏈表中邊結點包括鄰接點域數據域鏈域

      下圖為表示圖6.1的鄰接表

      注意:一個圖的鄰接矩陣表示是唯一的,但其鄰接表表示不唯一

    鄰接表優點:

    • 便于增加和刪除頂點
    • 便于統計邊的數目
    • 空間效率高

    鄰接表缺點:

    • 不便于判斷頂點之間是否有邊
    • 不便于計算各個頂點的度
  • 十字鏈表
    十字鏈表是有向圖的另一種鏈式存儲結構。可以看成將有向圖的鄰接表和逆鄰接表結合起來得到的一種鏈表。
    在十字鏈表中,對應有向圖中每一條弧由一個結點,對應每個頂點也有一個結點

    在弧結點中有5個域:

    • 尾域(tailvex):弧尾這個頂點在圖中的位置
    • 頭域(headvex):弧頭這個頂點在圖中的位置
    • 鏈域(hlink):指向弧頭相同的下一條弧
    • 鏈域(tlink):指向弧尾相同的下一條弧
    • info域(info):指向弧的相關信息

    在頂點結點中有3個域:

    • data:存儲和頂點相關的信息
    • firstin:指向該頂點為弧頭的第一個弧結點
    • firstout:指向該頂點為弧尾的第一個弧結點
  • 圖的遍歷:

圖的遍歷類似于樹的遍歷們也是從圖中某一頂點出發,按照某種方法對圖中所有頂點訪問且僅訪問一次,圖的遍歷算法是求解圖的連通性問題,拓撲排序和關鍵路徑等算法的基礎

根據搜索路徑的方向:有兩條遍歷圖的路徑:

首先說明:這兩種方法對有向圖和無向圖都適用

  • 深度優先搜索(depth first search DFS)

  • 這種遍歷類似于樹的前序(先序)遍歷,是樹的線序遍歷的推廣

    • (1)從圖中某個頂點v出發,訪問v
    • (2)找出剛訪問過的頂點的第一個未被訪問的鄰接點,訪問該頂點,以該頂點為新頂點,重復此步驟,直到剛訪問過的頂點沒有未被訪問的鄰接點為止
    • (3)返回前一個訪問過的且仍有未被訪問的鄰接點的頂點,找出該頂點的下一個未被訪問的鄰接點,訪問該頂點
    • (4)重復(2)(3),直到圖中所有頂點都被訪問過,搜索結束
  • 廣度優先搜索 (breadth first search BFS)

    • (1)從圖中某個頂點v出發,訪問v
    • (2)依次訪問v的各個未曾訪問過的鄰接點
    • (3)分別從這些鄰接點出發依次訪問它們的鄰接點,并使“先被訪問的頂點的鄰接點”先于“后被訪問的頂點的鄰接點”被訪問,重復步驟(3)直到圖中所有已被未訪問的頂點的鄰接點都被訪問到

    接下來看個例子:

    可以看出:
    DFS的訪問序列為:

    • v1→v2→v4→v8→v5→v3→v6→v7v_1→v_2→v_4→v_8→v_5→v_3→v_6→v_7v1?v2?v4?v8?v5?v3?v6?v7?

    BFS的訪問序列為:

    • v1→v2→v3→v4→v5→v6→v7→v8v_1→v_2→v_3→v_4→v_5→v_6→v_7→v_8v1?v2?v3?v4?v5?v6?v7?v8?

    圖中以帶箭頭的粗實線表示遍歷時的訪問路徑,以帶箭頭的虛線表示回溯路徑,小圓圈表示已經被訪問過的鄰接點,大圓圈表示未被訪問的鄰接點

    至于兩者的算法實現:只做一點說明:遍歷過程為了區別頂點是否被訪問,需要附設一個標志數組visited[n],其初值為“false”,一旦頂點被訪問,相應的分量置為“true”,其他情況,具體問題具體分析

  • 圖的應用:

  • 最小生成樹:在一個連通網中,各邊代價之和最小的那棵生成樹為該連通網的最小代價生成樹,簡稱最小生成樹

    • 具體算法應用有:
      • 普里姆算法
      • 克魯斯卡爾算法
  • 最短路徑:從源點終點的所有路徑中,路徑上的邊的權值之和最小的即為最短路徑

    • 具體算法應用有:
      • 迪杰斯特拉算法
      • 弗洛伊德算法
  • 拓撲排序算法

  • 關鍵路徑算法

以上四點就是圖的應用,具體算法,自行查找
下來是一個小結:

八、查找

  • 查找的基本概念:
  • 查找表:是同一類型的數據元素(或記錄)構成的集合。
  • 關鍵字:是數據元素(或記錄)中某個數據項的值,用它可以標識一個數據元素(或記錄) 。若此關鍵字可以唯一標識一個記錄,則稱此關鍵字為主關鍵字(不同記錄,不同主關鍵字),反之,稱用以識別若干記錄關鍵字為次關鍵字。當數據元素只有一個數據項時,其關鍵字即為該數據元素的值
  • 查找:根據給定的某個值,在查找表中確定一個其關鍵字等于給定值的記錄或數據元素,若表中存在這樣一個記錄,則查找成功,此時查找結果可以給出整個記錄信息,或指示該記錄在查找表中的位置,若表中不存在關鍵字等于給定值的記錄,則稱查找不成功,此時查找結果可以給出一個“空”記錄或“空”指針
  • 動態查找表和靜態查找表:若查找的同時對表做修改操作(如:插入和刪除),則相應的表稱為動態查找表,反之,稱為靜態查找表
  • 平均查找長度: 為確定記錄在查找表中的位置,需和給定值進行比較的關鍵字個數的期望值,稱為在查找成功時的平均查找長度。
    對含有n個記錄的表,查找成功時的平均查找長度為:ASL=∑i=1nPiCiASL=\sum_{i=1}^nP_iC_iASL=i=1n?Pi?Ci?其中,PiP_iPi?為查找表中第iii個記錄的概率,且∑i=1nPi=1\sum_{i=1}^nP_i=1i=1n?Pi?=1CiC_iCi?為找到表中其關鍵字與給定值相等的第iii個記錄時,和給定值已進行比較過的關鍵字個數。顯然,CiC_iCi?隨查找過程不同而不同
  • 線性表的查找:
  • 順序查找
    • 過程:從表的一端開始,依次將記錄的關鍵字和給定值進行比較,若記錄的關鍵字和給定值相等,則查找成功;反之,若掃描整個表后,仍未找到關鍵字和給定值相等的記錄,則查找失敗 。順序查找,前面已經介紹過了,此處不再贅述
  • 二分查找
    • 二分查找也稱折半查找,它是一種效率較高的查找方法,但是,折半查找要求線性表必須采用順序存儲結構

例如:已知如下 11個數據元素的有序表(關鍵字即為數據元素的值)
(5,16,20,27,30,36,44,55,60,67,71)
查找27,65的過程:

  • 分塊查找
    • 分塊查找又稱索引順序查找,這是一種性能介于順序查找和二分查找之間的一種查找方法。在此方法中,除表本身外,尚需建里一個索引表。

      這樣,分塊查找分為兩步,先和索引表做比較,在確定子表。例如:查找38,22<38<48,如果38存在,那么一定在第二子表中,然后在該子表中做順序查找

分塊查找的平均查找度:
將長度為n的表,平均分為b塊,每個塊有s個記錄,即b=?n/s?b=\lceil n/s \rceilb=?n/s?假定表中每個記錄的查找概率相等,則,每塊查找的概率為1/b1/b1/b,塊中每個記錄的查找概率為1/s1/s1/s,設Lb,LwL_b,L_wLb?Lw?分別為:查找索引表確定所在的塊的平均查找長度,在塊中查找元素的平均查找長度。則分塊查找的平均查找長度為:ASLbs=Lb+Lw=1b∑j=1bj+1s∑i=1s=b+12+s+12=12(ns+s)+1ASL_{bs}=L_b+L_w=\frac 1 b \sum_{j=1}^b j +\frac 1 s \sum_{i=1}^s=\frac {b+1} 2 +\frac{s+1} 2=\frac 1 2 ( \frac n s+s)+1ASLbs?=Lb?+Lw?=b1?j=1b?j+s1?i=1s?=2b+1?+2s+1?=21?(sn?+s)+1可見,此時的平均查找長度不僅與n有關還和s有關,容易證明當s=ns=\sqrt ns=n?時,平均查找長度取到最小值n+1\sqrt n +1n?+1,但其遠不及折半查找

分塊查找的優缺點:

  • 優點:在表中插入和刪除數據元素時,只需要找到該元素對應的塊,就可以在該塊內進行插入和刪除運算
  • 缺點:要增加一個索引表的存儲可見并對初始索引進行排序運算

樹表的查找:

  • 二叉排序樹

    • 二叉排序樹又稱二叉查找樹,它是一種對排序和查找都很有用的特殊二叉樹

    • 二叉排序樹定義:二叉排序樹或者式一棵空樹,或者是具有下列性質的二叉樹

      (1) 若**左子樹**不空,則左子樹上所有結點的值**均小于它的根結點的值**(2) 若**右子樹**不空,則右子樹上所有結點的值**均大于它的根結點的值**(3)它的左,右子樹分別也為二叉排序樹

    由二叉排序樹的定義(遞歸定義)得知一個重要性質:中序遍歷一棵二叉樹時,可以得到接待你值遞增的有序序列

    所以在二叉排序樹上進行查找和折半查找類似

  • 平衡二叉樹

    • 定義:或者是空樹,或者是具有以下性質的二叉排序樹
      • 左子樹和右子樹的深度之差的絕對值不超過1;

      • 左子樹和右子樹也是平衡二叉樹

        若將二叉樹上的所有結點的定義為該結點左子樹和右子樹的深度之差,則平衡二叉樹上所有結點的平衡因子只可能是1 0 -1 。如下圖

  • 散列表的查找:

  • 散列表查找又叫哈希表查找,通過查找關鍵字不需要比較就可以獲得需要記錄的存儲位置,它是通過在記錄的存儲位置和它的關鍵字之間建立一個確定的對應關系f,使得每個關鍵字key對應一個存儲位置f(key)。即:
    —存儲位置=f(關鍵字),其中f為哈希函數。

    • 幾個基本術語:
    • 散列函數和散列地址:在記錄的存儲位置ppp和其關鍵字keykeykey之間建立一個確定的對應關系HHH,使p=H(key)p=H(key)p=H(key),稱這個對應關系HHH為散列函數,ppp為散列地址。
    • 散列表:一個有限連續的地址空間,所以存儲按散列函數計算得到的相應散列地址的數據記錄,通常散列表的存儲空間是一個一維數組,散列地址是數組的下標
    • 沖突和同義詞:對不同的關鍵字可能得到同一散列地址,即key1≠key2key_1≠key_2key1??=key2?,然而H(key1)=H(key2)H(key_1)=H(key_2)H(key1?)=H(key2?),這種現象稱為 沖突,具有相同函數值的關鍵字對該散列函數來說稱作同義詞,key1和key2key_1和key_2key1?key2?互稱為同義詞
    • 哈希表的構造方法:
      • 直接定址法
      • 數字分析法
      • 平方取中法
      • 折疊法
      • 除留余數法
    • 處理沖突的方法:
    • 開放地址法
      • 線性探測法
      • 二次探測發
      • 偽隨機探測法
    • 鏈地址法

      圖中裝填因子α定義為:α=表中填入的記錄數散列表的長度α=\frac {表中填入的記錄數}{散列表的長度}α=?α標志散列表的裝滿程度

下來,是一個小結:


九、排序

  • 基本概念和方法:
  • 排序: 是按關鍵字的非遞減或非遞增順序對一組記錄進行重新排列的操作
  • 排序穩定性:當排序記錄中的關鍵字右兩個或以上的關鍵字記錄相等時。假設ki=kj(i≠j,i,j都在范圍內)k_i=k_j(i≠j,i,j都在范圍內)ki?=kj?(i?=jij),且排序前的序列中RiR_iRi?領先RjR_jRj?i<ji<ji<j若排序后RiR_iRi?仍然領先RjR_jRj?那么,稱所使用的排序方法是穩定的,反之,稱為不穩定
  • 內部排序和外部排序:內部排序是指排序記錄全部存放在計算機內存中進行排序的過程,外部排序是指排序記錄數量很大,內存不能全部容納,在拍戲過程中尚需對外村進行訪問的排序過程
  • 內部排序的分類:
    • 插入類:
      • 插入排序
      • 折半插入排序
      • 希爾排序
    • 交換類:
      • 冒泡排序
      • 快速排序
    • 歸并類:
      • 2-路歸并排序
    • 分配類:
      • 基數排序
    • 選擇類:
      • 簡單選擇排序
      • 樹形選擇排序
      • 堆排序
  • 插入排序:
    • 直接插入排序
      • 最簡單的排序方法,基礎操作為:將一條記錄插入到已排好序的有序表中

        時間復雜度為:O(n2)O(n^2)O(n2)
        空間復雜度為:O(1)O(1)O(1)
    • 折半插入排序
      • 在直接插入排序的基礎上增加“折半查找”這一操作,例如,在圖8.1中,在每一次插入新的數據時,都得從第一個元素開始比較,而折半插入排序,則是,每次“比較”都使用折半查找找到要插入數據的該插入位置,而不是一個個的比較。
      • 時間和空間復雜度和直接插入排序相同
      • 此算法時穩定排序
      • 適用于順序結構,
      • 適用于初始記錄無須,n較大
    • 希爾排序
      • 又稱縮小增量排序,希爾排序,從減少記錄個數序列基本有序,兩個方面對直接插入排序進行改進
      • 本質上時采用分組插入法

        d代表所有間隔為d的記錄在一組。對組兩頭的數據進行交換即可
  • 交換排序:
    • 冒泡排序:
      • 是一種最簡單的交換排序方法,它通過兩兩比較相鄰記錄的關鍵字,如果發生逆序,則進行交換,從而實現排序

        時間復雜度:O(n2)O(n^2)O(n2)
        空間復雜度:O(1)O(1)O(1)
    • 快速排序
      • 由冒泡排序改進而來,在冒泡排序中,支隊相鄰的兩個記錄進行比較,因此每次交換兩個相鄰的記錄只能消除一個逆序,如果能通過兩個(不相鄰)記錄的一次交換,消除多個逆序,則會大大增加排序的速度。快速排序即可一次交換消除多個逆序

        說明:

        • 先選擇排序表中的第一個記錄作為樞軸(pivotkey),將其暫時記錄在r[0]的位置,附設兩個指針low和high,分別指向表的下界和上界
        • 從表的右側依次向左搜索,找到第一個關鍵字小于樞軸關鍵字的記錄,將其移動到low處
        • 從表的左側依次向右搜索,找到第一個關鍵字大于樞軸關鍵字的記錄,將其和樞軸關鍵字交換位置。
        • 重復第二步和第三步,直到low和high相等

        時間復雜度:O(nlog2n)O(nlog_2n)O(nlog2?n)
        空間復雜度:

        • 最好情況下:O(log2n)O(log_2n)O(log2?n)
        • 最壞情況下:O(n)O(n)O(n)
  • 選擇排序:
    • 選擇排序的基本思想:每一趟從待排序的記錄中選出關鍵字最小的記錄,放到已排序的序列中,重復直到全部拍完
      • 簡單選擇排序:
        • 也稱為直接選擇排序


          時間復雜度:O(n2)O(n^2)O(n2)
          空間復雜度:O(1)O(1)O(1)
      • 樹形選擇排序:
        • 又稱錦標賽排序,是一種按照錦標賽的思想進行選擇排序的方法,首先對n個記錄的關鍵字進行兩兩比較,然后在其中[n2][\frac n2 ][2n?]個較小者之間再進行兩兩比較,如此重復,直到選出最小關鍵字的記錄為止。這個記錄可用一棵由n個葉子結點的完全二叉樹表示。

          接下來,看一種樹形選擇排序
      • 堆排序:
        • 堆排序是一種樹形選擇排序,是維洛姆斯在1964年提出的,在該排序過程中,將待排序的記錄 r[1…n] 看成是一棵完全二叉樹的順序存儲結構,利用完全二叉樹中雙親結點和孩子結點之間的內在關系,在當前無序的序列中選擇關鍵字最大(或最小)的記錄
        • 堆分為最大堆最小堆,其實就是完全二叉樹。最大堆要求節點的元素都要不小于其孩子,最小堆要求節點元素都不大于其左右孩子,兩者對左右孩子的大小關系不做任何要求,其實很好理解。有了上面的定義,我們可以得知,處于最大堆的根節點的元素一定是這個堆中的最大值。
        • 其實我們的堆排序算法就是抓住了堆的這一特點,**每次都取堆頂的元素,將其放在序列最后面,**然后將剩余的元素重新調整為最大堆,依次類推,最終得到排序的序列。

          時間復雜度:O(nlog2n)O(nlog_2n)O(nlog2?n)
          空間復雜度:O(1)O(1)O(1)
  • 歸并排序:
    • 歸并排序就是將兩個或兩個以上的有序表合并成一個有序表的過程。
    • 2-路歸并:
      • 將兩個有序表合并成一個有序表的過程稱為2-路歸并
      • 思想:假設初始序列由含有n個記錄,則可看成n個有序的子序列,每個子序列的長度為1,然后兩兩歸并,得到[n/2]個長度為2或1 的有序子序列,在兩兩歸并,…,如此重復,直至得到一個長度為n的有序序列為止。

        時間復雜度:O(nlog2n)O(nlog_2n)O(nlog2?n)
        空間復雜度:O(n)O(n)O(n)
  • 基數排序:
    • 基數排序與前面的排序方法都不同,它不需要比較關鍵字的大小。它是根據關鍵字中各位的值,通過對排序的N個元素進行若干趟“分配”與“收集”來實現排序的。 例如:撲克牌的按花色分配收集和按面值分配收集
      例如:

      • 初始序列: R {50, 123, 543, 187, 49, 30, 0, 2, 11, 100}

      我們知道,對于數字來說,個十百位的數字無非0~9,所以先按個位分類得到:

050300100
111
22
3123543
4
5
6
7187
8
949

接下來,按照,0~9的順序,排列得到 :
{50, 30, 0, 100, 11, 2, 123, 543, 187, 49}
同理,按十位數排列,百位數排列,…,最后得到的必然是有序序列

  • 外部排序:
    • 外部排序指的是大文件的排序,即待排序的記錄存儲在外存儲器上,待排序的文件無法一次裝入內存,需要在內存和外部存儲器之間進行多次數據交換,以達到排序整個文件的目的

總結

以上是生活随笔為你收集整理的数据结构教程(c语言)(已完结)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

国产高清亚洲 | 97av视频在线观看 | 国产专区一 | 波多野结衣一区二区 | 色综合欧洲 | 一区二区三区日韩视频在线观看 | 欧美精品中文字幕亚洲专区 | 日韩久久午夜一级啪啪 | 成人免费视频视频在线观看 免费 | 国产在线欧美在线 | 日韩免费一区 | 91视频成人免费 | 欧美一级片免费观看 | 免费看一级特黄a大片 | 日韩r级在线 | 亚洲午夜剧场 | 91免费国产在线观看 | 色香com.| 亚洲乱码国产乱码精品天美传媒 | 国产精品免费看久久久8精臀av | 96av麻豆蜜桃一区二区 | 日韩在线播放av | 久草在线免费色站 | 亚洲国产美女精品久久久久∴ | 亚洲天堂网在线视频观看 | 成人av在线影视 | 天天操天天爱天天爽 | 九九视频网站 | 成人黄色在线视频 | 亚洲理论在线 | 一区二区三区日韩在线观看 | 国产专区第一页 | 在线网址你懂得 | 人人爽人人香蕉 | 天天色天天射综合网 | 天天插综合 | 91热视频在线观看 | 日韩精品一区二区三区第95 | 日韩电影在线一区二区 | 不卡电影一区二区三区 | 西西人体4444www高清视频 | 91在线精品播放 | 国产亚洲精品久久久久5区 成人h电影在线观看 | 欧美色888| 欧美一级电影在线观看 | 色天天综合网 | 91色综合 | 中文字幕中文字幕在线中文字幕三区 | 国产精品永久久久久久久久久 | 免费看十八岁美女 | 色www精品视频在线观看 | 最近日本韩国中文字幕 | 99人久久精品视频最新地址 | 日韩成人看片 | 亚洲精品视频免费 | 久久在线免费观看视频 | 免费看高清毛片 | 成年人视频在线免费观看 | 日韩电影一区二区在线观看 | 中文字幕丝袜制服 | 亚洲国产成人精品在线 | av在线播放一区二区三区 | 国产精品福利在线观看 | 久免费视频 | 免费观看视频的网站 | 午夜精品一区二区三区在线视频 | 天天射天天搞 | 中文日韩在线 | www.av在线.com | 91麻豆精品国产91久久久无限制版 | av在线网站观看 | 欧美成人播放 | 日韩av影视在线 | 五月天中文字幕mv在线 | 久久中文字幕导航 | 日本激情视频中文字幕 | av电影免费 | 亚洲精品tv久久久久久久久久 | 一区二区三区在线观看免费 | 又黄又爽又湿又无遮挡的在线视频 | 日韩一区二区三区免费视频 | 精品视频999 | 免费福利片2019潦草影视午夜 | 国产黄色高清 | 人人干人人搞 | 国产999精品久久久久久绿帽 | www.伊人网 | 精品久久久久久久久久久久 | 久久99操| 成人午夜毛片 | 成人av免费在线看 | 免费毛片一区二区三区久久久 | 天天激情综合 | 久久99热国产| 久久黄色网址 | 久久亚洲精品国产亚洲老地址 | 99国产一区二区三精品乱码 | 久久久综合电影 | 色吧久久 | 国产综合片 | 蜜臀91丨九色丨蝌蚪老版 | 韩国av不卡 | 久久久免费观看完整版 | 一区 二区 精品 | 国产成人一区二区三区免费看 | 在线观看一区二区精品 | 五月天天在线 | 国产小视频在线看 | 日本在线免费看 | 国产亚洲婷婷 | 亚洲 成人 欧美 | 天天玩天天干 | 97av视频 | 国产精品淫片 | 欧美日韩视频在线一区 | 日韩精品视频免费专区在线播放 | www.啪啪.com | 91精品久久久久久粉嫩 | 在线观看成人网 | 亚洲午夜精品福利 | 天天色播 | 日本二区三区在线 | 精品国产视频一区 | 国产精品99在线播放 | 99久久国产免费,99久久国产免费大片 | 精品国精品自拍自在线 | 亚洲精品在线观看的 | 国产亚洲精品久久久久久移动网络 | 国产午夜免费视频 | 成人久久精品视频 | 91亚洲成人 | 亚洲精品日韩在线观看 | 国产成人精品一区二区三区 | 国产不卡在线观看 | 国内99视频| 国际精品久久久 | 黄色美女免费网站 | 91九色porny蝌蚪视频 | 五月天久久狠狠 | 国产日产精品久久久久快鸭 | 色网站中文字幕 | 国产精品一区二区三区久久 | 日韩乱色精品一区二区 | 91人人爽人人爽人人精88v | 国产成人精品在线观看 | 欧美成人黄| 日韩理论片中文字幕 | 成人在线一区二区 | 婷婷网站天天婷婷网站 | 天天射天天操天天 | 欧美日本一二三 | 最近中文字幕完整高清 | 色综合久久88 | 中文字幕一区二区在线播放 | 日韩av影视 | 天堂av在线 | av在线收看| 久草在线视频网 | 国产在线精 | 综合网天天 | 国产成人高清av | 国产精品 国内视频 | 亚洲天堂社区 | 国产在线a不卡 | 久久久久成| 五月婷婷激情综合网 | 久久人人爽爽人人爽人人片av | 亚洲婷婷在线 | 国产高清第一页 | 亚洲精品视频在线观看网站 | 在线中文视频 | 国产欧美最新羞羞视频在线观看 | 青春草免费在线视频 | 香蕉久久国产 | 操操日日 | 免费网站在线观看成人 | 国产精品久久久久久吹潮天美传媒 | 99在线视频观看 | av电影中文字幕 | 成人在线视频网 | 免费特级黄毛片 | 久久精品永久免费 | 欧美日韩国产高清视频 | 成人免费xxx在线观看 | 毛片基地黄久久久久久天堂 | 深爱综合网 | a视频在线 | 久久国产手机看片 | 91成人免费| 中文字幕高清在线 | 亚洲va天堂va欧美ⅴa在线 | 四虎亚洲精品 | 亚洲精品中文字幕视频 | 国产日韩欧美视频 | 久久公开免费视频 | 欧美日韩不卡一区 | 欧美一区二区精品在线 | 99精品成人 | 日本精品一区二区在线观看 | 久久久精品网 | 青春草免费在线视频 | 香蕉视频在线观看免费 | 91超级碰碰 | 区一区二区三区中文字幕 | 国产成人精品一区二 | 日韩av中文字幕在线免费观看 | 91精品1区 | 国产精品av在线 | 日日操日日插 | 久久综合免费视频 | 久久精品成人热国产成 | 国产在线黄 | 不卡的av电影在线观看 | 啪啪免费视频网站 | 在线视频一二三 | 玖玖精品在线 | 最近免费中文字幕mv在线视频3 | 久久99欧美| 最近中文字幕大全中文字幕免费 | 美女免费视频观看网站 | 日韩电影中文字幕在线观看 | 在线日本看片免费人成视久网 | 三级在线视频播放 | 午夜体验区 | 欧美一级裸体视频 | 国产日韩精品一区二区在线观看播放 | 天天超碰 | 久久手机看片 | 国产一二区视频 | 69视频国产 | 97热久久免费频精品99 | 精品亚洲国产视频 | 久久艹人人| 国产成人精品不卡 | 国产精品久久久久久一区二区 | 中文字幕在线播放第一页 | 久久精品视频在线看 | 久久国产午夜精品理论片最新版本 | 日韩精品一区二区三区中文字幕 | 日韩1级片 | 欧美一级性视频 | 97免费在线观看 | 国内精品福利视频 | 久久久国产电影 | 三级黄色免费 | 91免费观看网站 | 国产精品四虎 | 手机在线黄色网址 | 探花视频在线观看 | 日韩中文字 | 4p变态网欧美系列 | 91久久久久久久 | 天天激情在线 | 国产 字幕 制服 中文 在线 | 欧美精品一二三 | 亚洲色图 校园春色 | 黄色福利视频网站 | 色综合久久久久综合体桃花网 | 亚洲一级片免费观看 | 在线看片一区 | 91麻豆精品国产91久久久久 | 99草视频| 欧美最新大片在线看 | 午夜美女福利 | www.亚洲精品 | 精品久久久久国产免费第一页 | 亚洲精品成人网 | 国产免费专区 | 99色网站 | 婷婷六月综合网 | 国产人成在线观看 | 99久久99久久精品国产片果冰 | 国产精品24小时在线观看 | 亚洲国产视频a | 久草精品视频在线观看 | 夜色资源站wwwcom | 66av99精品福利视频在线 | 91亚洲精品久久久中文字幕 | 91九色蝌蚪在线 | 日韩资源在线播放 | 99re6热在线精品视频 | 色噜噜日韩精品欧美一区二区 | 亚洲无线视频 | av亚洲产国偷v产偷v自拍小说 | 亚洲午夜精品电影 | 日韩综合一区二区 | 韩国av免费看 | 在线看的毛片 | 最近更新好看的中文字幕 | 色香网 | 欧洲精品码一区二区三区免费看 | 狠狠综合久久av | 国产123区在线观看 国产精品麻豆91 | 久草电影免费在线观看 | 久久激情视频 久久 | 99热9 | 久久精品久久久久电影 | 日韩精品视频在线观看网址 | 视频91在线| 国产69精品久久久久久 | 91精品国产一区二区在线观看 | 99视频在线免费观看 | 欧洲亚洲激情 | 日韩二区在线播放 | 婷婷婷国产在线视频 | 国产精品永久在线观看 | 日韩精品中文字幕av | 婷婷综合影院 | 尤物97国产精品久久精品国产 | 国产中文在线观看 | 国产成人在线网站 | 91xav | 亚洲精品国产免费 | 亚洲免费视频在线观看 | 狠狠色香婷婷久久亚洲精品 | 婷婷综合激情 | 高清国产一区 | 久久激情影院 | 成人一级| 天天操天天舔天天爽 | 日韩综合一区二区 | 91精品色| 黄色在线免费观看网址 | 久久97超碰| 亚洲韩国一区二区三区 | 一本色道久久精品 | 久久久久福利视频 | 久草在线官网 | 中文字幕之中文字幕 | 日韩精品一区二区三区第95 | 韩日成人av | 久久精品一区二区三区视频 | 五月天天色 | 丁香婷婷久久 | 久久人人爽人人爽人人片av软件 | 久草精品视频在线观看 | 国产精品国产三级在线专区 | 久久精品欧美一区 | 成人一区不卡 | 99性视频 | 欧美天堂久久 | 久久久久久久福利 | 97视频免费观看 | 在线免费性生活片 | 97手机电影网| 久久免费视频1 | 欧美一区中文字幕 | 亚洲精选国产 | 国产一区二区综合 | 国产成人一二片 | 久精品一区| 亚洲永久av| 欧美视频在线观看免费网址 | 久久久免费看片 | 国产 av 日韩 | 国产三级av在线 | 日韩一区二区三区免费视频 | 香蕉视频4aa | 综合网天天色 | 日本在线观看一区二区三区 | 久久久精品欧美 | 久久久高清视频 | 日韩69av | 国内三级在线观看 | 99精品视频播放 | 日韩一区精品 | 欧美男同网站 | 国产在线观看免费观看 | 91大神精品视频 | 在线之家官网 | 欧美国产日韩一区二区三区 | 欧美极品少妇xxxxⅹ欧美极品少妇xxxx亚洲精品 | 97精品国产97久久久久久免费 | 国产九色91| 嫩嫩影院理论片 | 中文在线字幕免费观看 | 久久免费视频7 | 麻豆免费观看视频 | 97精品久久 | 国产69熟| 激情五月看片 | 亚洲精品久久久蜜臀下载官网 | 综合影视 | 亚洲精品久久久久久国 | 国产免费a| 97免费在线观看视频 | 久久久亚洲国产精品麻豆综合天堂 | 高清在线一区二区 | 在线不卡a | wwwwww国产| 97视频在线观看网址 | 欧美一级视频在线观看 | 天天插天天狠 | 国产精品国产三级国产aⅴ9色 | 9999精品| 亚洲欧美成人综合 | 国产不卡在线 | 日韩二区在线播放 | 菠萝菠萝在线精品视频 | 99精品一区二区 | 九九热在线视频免费观看 | 日韩欧美精品在线观看视频 | 狠狠色噜噜狠狠狠狠 | 国产二区电影 | 99久久夜色精品国产亚洲 | 久久精品国产99国产 | 久久亚洲欧美日韩精品专区 | 国产v在线观看 | 精品久久久久一区二区国产 | 在线观看中文 | 久久精品在线免费观看 | 久草在线观看视频免费 | 成人久久18免费网站图片 | 中文字幕av电影下载 | 一区二区三区不卡在线 | av经典在线 | 欧美精品久久久久a | 在线观看电影av | 日韩精品2区 | 久久亚洲国产精品 | 天天超碰 | 国产精品岛国久久久久久久久红粉 | 亚洲国内在线 | 国产在线播放观看 | 免费在线观看视频一区 | 中文字幕av网站 | 亚洲 欧美变态 另类 综合 | 国产中文在线播放 | 人人澡人人爽欧一区 | 午夜视频99 | 色视频网页| 久久99精品久久久久久久久久久久 | 日日爽天天 | 久久久在线免费观看 | 国产又粗又猛又爽又黄的视频免费 | 日韩手机在线观看 | 91最新视频在线观看 | 日韩一区二区免费播放 | 9ⅰ精品久久久久久久久中文字幕 | www,黄视频 | 国产a高清 | 亚洲精品小区久久久久久 | 国产免费xvideos视频入口 | caobi视频 | 福利一区二区 | 亚洲精品美女久久17c | 欧美少妇bbwhd| 国产在线视频导航 | 最近中文国产在线视频 | 免费进去里的视频 | www.午夜视频 | 亚洲影视九九影院在线观看 | 黄色软件网站在线观看 | 亚洲欧美日韩国产一区二区 | 久久97久久| 在线观看黄网站 | 97国产一区二区 | 激情丁香5月 | 亚洲综合五月 | 99国产成+人+综合+亚洲 欧美 | 91福利视频免费 | 国产精品99久久久久人中文网介绍 | www.久久久久 | 9999亚洲 | 精品久久久久久久久久久久久 | 日韩专区视频 | 一二三区视频在线 | 99久久久国产精品 | 国产精品麻豆欧美日韩ww | 中文字幕第一页在线播放 | 国产一级在线观看视频 | 992tv人人草| 91免费观看视频网站 | 五月天综合网站 | 国产小视频在线免费观看 | 欧美综合在线观看 | 日韩中文幕 | 午夜精品久久久久久久99热影院 | 久久影院亚洲 | 特级西西444www大精品视频免费看 | 狠狠色丁香婷婷综合久小说久 | 欧美另类网站 | 国产又粗又猛又黄 | 人人躁 | japanesexxxhd奶水 91在线精品一区二区 | 91av在线视频播放 | 欧美另类调教 | 一区二区三区在线观看 | 97超碰人人| 日韩黄色av网站 | 久久国产精品免费视频 | 亚州日韩中文字幕 | 欧洲性视频 | 在线免费色视频 | 免费在线观看污网站 | 亚洲无吗视频在线 | 欧美激情亚洲综合 | 在线精品视频免费观看 | 日日夜夜精品视频天天综合网 | 精品视频999| 香蕉视频在线免费 | 日韩在线视频一区二区三区 | av免费观看网站 | av观看网站| 亚洲不卡av一区二区三区 | 日日干网 | 91九色免费视频 | 成年人在线观看 | 国产字幕在线看 | 成人精品亚洲 | 激情视频免费在线观看 | 波多野结衣在线视频免费观看 | 国产精品欧美日韩在线观看 | 日韩免费视频观看 | 在线精品视频免费播放 | 国内精品久久久久久久久久久 | 天天玩天天操天天射 | 日韩精品网址 | 精品国产免费人成在线观看 | 久久国产色 | 欧美男同视频网站 | 午夜精品成人一区二区三区 | 超碰成人网 | 九九影视理伦片 | 久久精品视频2 | 天天天天天天干 | 国产精品麻豆三级一区视频 | www.伊人网 | 国产高清视频在线免费观看 | 亚洲有 在线 | 亚洲 中文字幕av | 国产精品18videosex性欧美 | 日日弄天天弄美女bbbb | 99综合久久 | 亚洲精品国产精品久久99热 | 91在线精品播放 | 最近2019好看的中文字幕免费 | 久久人人精 | 欧美日韩视频网站 | 国产日韩高清在线 | 亚洲国产精品激情在线观看 | 国产99免费视频 | 五月天色中色 | 国产精品igao视频网网址 | 丁香av | 久草视频在| 在线日韩亚洲 | 国产午夜免费视频 | 中文字幕成人av | 免费看毛片网站 | 在线亚洲欧美视频 | 免费看91的网站 | 免费看国产视频 | 天天操比 | 亚洲国内精品在线 | 97电影在线 | 最新久久久 | 天天干夜夜干 | 日韩黄色在线观看 | 日韩黄色在线观看 | 亚洲黄色免费在线看 | 国产精品9区 | 91精品国产自产在线观看永久 | 久久99久久99| 天天综合网 天天综合色 | 综合色中文 | 中文字幕韩在线第一页 | 天天色天天骑天天射 | 免费精品在线观看 | 天天射天天色天天干 | 国产韩国日本高清视频 | 一级片视频免费观看 | 久久久亚洲麻豆日韩精品一区三区 | 中文字幕日本电影 | 自拍超碰在线 | 色天天久久 | 蜜桃麻豆www久久囤产精品 | 国产一二区在线观看 | 中文字幕国语官网在线视频 | 日韩av免费在线看 | 久久艹国产视频 | 亚洲欧洲xxxx| 国产探花在线看 | av在线免费观看网站 | 亚洲乱码精品 | 久久香蕉电影 | 97精品电影院| 午夜精品久久久久久中宇69 | 九九久久成人 | 天天艹天天干天天 | 综合久久2023| 最近2019中文免费高清视频观看www99 | 日韩手机视频 | 国产中文字幕在线 | 激情欧美一区二区免费视频 | 一区二区欧美激情 | 亚洲国产精品一区二区久久,亚洲午夜 | 国产黄在线看 | 亚洲精品乱码久久久久久按摩 | 欧美调教网站 | 成人中文字幕av | 在线观看视频中文字幕 | 少妇性aaaaaaaaa视频 | 久久久久免费精品视频 | 日韩三级中文字幕 | 国产99久久九九精品免费 | 色婷婷狠狠五月综合天色拍 | a视频在线观看免费 | 国产精品99久久免费观看 | 欧美色图88| a黄在线观看 | 国产另类av | 国产精品福利在线 | 五月婷婷中文字幕 | 日韩有码在线观看视频 | 中文字幕.av.在线 | 国产精品久久99综合免费观看尤物 | 久久久性| 久久精品久久精品久久 | 国产一级一片免费播放放a 一区二区三区国产欧美 | 久久av网| 久久免费成人网 | 黄污在线看 | 国产小视频在线观看免费 | 九九九九精品 | 国产原厂视频在线观看 | 亚洲一区欧美激情 | 96香蕉视频 | 黄色.com| 成人在线一区二区三区 | 黄色小说在线观看视频 | 日韩激情片在线观看 | 婷婷久久婷婷 | 99久久99久久精品国产片 | 国产在线观看免费观看 | 日韩精品一区二区免费 | 国产精品黄网站在线观看 | 色婷婷影视 | 91高清在线 | 国产免费成人 | 久久婷婷国产 | 久久久夜色 | 伊人久久精品久久亚洲一区 | 人人躁| 国产一级电影免费观看 | 久久er99热精品一区二区 | 国产资源精品 | 欧美激情精品久久久久久变态 | 在线看福利av | 国产精品久久久久久久毛片 | 久久久国产99久久国产一 | 操操操夜夜操 | 91麻豆网| 欧美一级电影免费观看 | 国产99久久久久久免费看 | www.五月婷婷.com | 伊人久在线 | 成人在线观看资源 | 六月丁香社区 | 在线观看不卡的av | a黄色影院 | 成年在线观看 | 黄网站www | 亚洲国产精品人久久电影 | 久久国产视频网站 | 成人av影院在线观看 | 日韩视频专区 | 毛片在线播放网址 | 精品视频在线视频 | 国产精品一区二区av影院萌芽 | 国产色视频网站 | 久久av一区二区三区亚洲 | 欧美精品久久久久久久久久丰满 | 99r在线精品 | 午夜久操 | 国产精品女同一区二区三区久久夜 | 久久好看免费视频 | 日日摸日日添夜夜爽97 | 人人搞人人干 | 久久久久久毛片 | 成人av在线亚洲 | 欧洲在线免费视频 | 91精品在线视频观看 | 久久69精品久久久久久久电影好 | 99久久精品免费一区 | 国产日产av| 综合黄色网 | 天天爽天天爽夜夜爽 | 精品一区 在线 | 中文字幕亚洲国产 | 日韩成人免费在线电影 | 欧美a√在线 | 精品久久久久久亚洲综合网站 | 日韩成人黄色av | 最近日本中文字幕 | 精品一区二区亚洲 | 日韩电影中文,亚洲精品乱码 | 婷婷激情五月 | 婷婷久久综合九色综合 | 一区二区三区国 | 99久久影院 | 一级做a视频 | 黄色精品国产 | 亚洲精品三级 | 欧美一区日韩一区 | 国产精品久久久久久一二三四五 | a级国产乱理伦片在线播放 久久久久国产精品一区 | 黄色一级网 | 人人干人人爽 | 久草视频手机在线 | 91久久国产露脸精品国产闺蜜 | 91麻豆精品91久久久久同性 | 亚洲精品66 | 91大片成人网| 国产色视频一区 | 国产91欧美 | 欧美日韩色婷婷 | 91香蕉视频色版 | 国产成人精品日本亚洲999 | 天天色图| 九九热国产视频 | 天天干.com | 五月天综合激情网 | 欧美另类一二三四区 | 18国产精品白浆在线观看免费 | 久久精品国产免费 | 日韩精品一区二区在线视频 | 色噜噜在线观看视频 | 亚洲美女视频在线观看 | 成人91视频 | 黄色免费视频在线观看 | 亚洲精品理论片 | 一区二区三区免费网站 | 很黄很污的视频网站 | 久久只精品99品免费久23小说 | 久久精品中文字幕少妇 | 国产美女永久免费 | 亚洲精品网站在线 | 中文字幕久久网 | 人人爽人人做 | 狠狠色丁香婷婷综合最新地址 | 精品国产福利在线 | 国产探花在线看 | 91传媒在线 | 色97在线| 久久久福利影院 | 人人澡人人爱 | 婷婷开心久久网 | av一级网站 | 亚洲在线视频播放 | 91在线看黄 | 碰超在线| 婷婷亚洲综合五月天小说 | 狠狠干电影 | 天天综合日日夜夜 | av网站免费线看精品 | 99久久婷婷国产综合亚洲 | 久久国产高清 | 少妇18xxxx性xxxx片 | 天堂av在线免费 | 国产99久久九九精品 | 就色干综合 | 精品亚洲网 | 成年人看片网站 | 99视频在线免费观看 | 97超碰中文字幕 | 国产精品一区二区免费在线观看 | 在线播放亚洲激情 | 久久亚洲日本 | 成年人三级网站 | 手机色在线 | 精品视频在线观看 | 国产亚洲成人网 | 在线免费性生活片 | 欧美日韩精品久久久 | 日本成人a| 91成人精品一区在线播放69 | 成人免费亚洲 | 丝袜美腿在线播放 | 一级黄色片毛片 | 国产精品99久久99久久久二8 | 黄色三级av | 十八岁以下禁止观看的1000个网站 | 成人手机在线视频 | 久久九九久久九九 | 麻豆免费视频 | 在线视频免费观看 | 天天干,天天草 | 99色免费 | 久久国产精品免费看 | 久久久久久久18 | 色资源二区在线视频 | 色欲综合视频天天天 | 精品人人人 | 久久国产经典 | 日韩视频图片 | 欧美精品一区二区蜜臀亚洲 | 亚洲情婷婷| 看毛片网站 | 久久99国产精品久久99 | 五月天激情视频 | 91精品在线免费 | 高清在线观看av | 久久一本综合 | 国产色视频网站2 | 97夜夜澡人人爽人人免费 | 国产精品免费视频久久久 | 美女网站免费福利视频 | 亚洲欧美少妇 | 五月天堂网 | 亚洲精品乱码久久久久久蜜桃不爽 | 国产精品久久久久久久久久免费 | 成人高清在线 | 国产一级免费在线观看 | 最新国产精品亚洲 | 国产福利精品视频 | 日韩中文字幕免费 | 久久婷婷影视 | 狠狠色丁香婷婷 | 久草视频在 | 久久久免费毛片 | 337p西西人体大胆瓣开下部 | 狠狠色丁香婷婷综合久小说久 | 日韩动漫免费观看高清完整版在线观看 | 亚洲性xxxx| 91伊人影院 | a v在线视频 | 欧美日韩高清在线一区 | 欧美精品在线观看免费 | 天天av天天| 免费人做人爱www的视 | 欧美日韩成人一区 | 在线观看国产一区二区 | 99国产成+人+综合+亚洲 欧美 | 日韩在线第一 | 91网址在线观看 | 在线 高清 中文字幕 | 99久热| 久久爽久久爽久久av东京爽 | 欧美一区二区视频97 | 成人h电影在线观看 | 97av在线视频 | 久操视频在线观看 | 曰本三级在线 | 一区二区中文字幕在线 | 在线小视频国产 | 麻豆国产精品视频 | 久久精品屋 | 国产美女精品 | 蜜桃视频精品 | 国产精品久久久久久吹潮天美传媒 | 国产色婷婷精品综合在线手机播放 | www.国产高清 | 中文字幕在线观看免费观看 | 久久国产精品99久久人人澡 | 亚洲精品videossex少妇 | 日日夜夜天天久久 | 超碰在线网 | 99精品欧美一区二区 | 天天操人人要 | 91在线www| 九九综合久久 | 亚洲日本成人网 | 911免费视频 | 成人午夜影视 | 国内小视频 | 久草在线观看资源 | 欧美另类xxx| 激情欧美网 | 国产精品18久久久 | 国产精品福利无圣光在线一区 | 亚洲午夜精品久久久 | 不卡的av在线播放 | 成年人免费观看国产 | 日日夜夜干 | 国产一级黄色电影 | 欧美日韩一区二区视频在线观看 | 黄色毛片视频免费观看中文 | 午夜 免费| 人人澡人人爱 | 国产精品久久久一区二区 | 成人中文字幕在线观看 | 91麻豆操 | 天天操天天艹 | 免费高清在线一区 | 欧美成人理伦片 | 日日夜夜精品 | 亚洲精品一区二区在线观看 | 最近中文字幕完整视频高清1 | 国产精品免费久久久久影院仙踪林 | av先锋中文字幕 | 成人av高清 | 最新免费中文字幕 | 久久午夜电影 | 国产视频亚洲精品 | 韩日精品在线观看 | 在线观看国产麻豆 | 欧美日韩国产欧美 | 麻豆国产露脸在线观看 | 日韩精品在线视频免费观看 | 91亚洲精品国偷拍自产在线观看 | 91桃色在线观看视频 | 在线看中文字幕 | 一级a性色生活片久久毛片波多野 | 日韩电影一区二区三区 | 91香蕉视频720p | aa级黄色大片 | 久久久久 | 欧美一区二区免费在线观看 | 午夜99| 在线一区二区三区 | 中文字幕在线观看国产 | 欧美日韩免费一区二区三区 | 欧美极度另类性三渗透 | 亚洲丁香久久久 | 欧美巨乳波霸 | 国产在线色视频 | 久久综合久久伊人 | 欧美99精品| 欧美日韩高清一区二区 | 中文字幕亚洲字幕 | 精品人妖videos欧美人妖 | 热久久在线视频 | 免费看三级黄色片 | 国产成人精品一二三区 | 国产福利免费在线观看 | 蜜桃av久久久亚洲精品 | 欧美亚洲精品在线观看 | 欧美中文字幕久久 | 国产美女视频黄a视频免费 久久综合九色欧美综合狠狠 | 国内视频| 日韩中文字幕免费 | 午夜精品一区二区三区可下载 | 国产粉嫩在线 | 女人18片| 香蕉影视在线观看 | 特黄色大片 | 一区二区三区国 | 国产99免费视频 | 午夜性生活片 | 欧美激情视频一区二区三区 | 黄色三级视频片 | 一区二区视频免费在线观看 | 一区中文字幕 | 99久久激情视频 | 福利一区二区三区四区 | 国产二区av | 国产亚洲精品久久久久久大师 | 国产精品久久免费看 | 激情深爱 | 毛片的网址 | 精品国产美女在线 | 美女av在线免费 | 天堂av免费观看 | 蜜臀久久99精品久久久久久网站 | 欧美a级一区二区 | 91欧美精品| 精品一区精品二区高清 | 成人av电影免费在线播放 | 丝袜少妇在线 | 欧美粗又大| 精品一区二区三区在线播放 | 国产日韩欧美在线观看 | 亚洲三级视频 | 国产精品爽爽爽 | 久久综合狠狠综合久久狠狠色综合 | 日韩在线观看视频中文字幕 | 东方av免费在线观看 | 久久久国产精品一区二区三区 | 在线 视频 一区二区 | 日日夜夜网 | 亚洲国产资源 | ,午夜性刺激免费看视频 | 九九久久国产 | 日韩激情视频 | 在线观看成年人 | 视频二区 | 亚洲激情综合 | 亚洲精品18日本一区app | 韩国av一区 | 中文字幕在线有码 | 日韩视频一区二区 | 日产中文字幕 | 国产精品一区二区在线 | 欧美最新另类人妖 | 精品久久久久久久久久久久久久久久久久 | 欧美日韩精品免费观看 | 久久久九九 | 中文字幕精品一区久久久久 | 中文字幕在线国产 | 天天操夜夜看 | 国产美腿白丝袜足在线av | 免费三级a | 狂野欧美激情性xxxx欧美 | 在线看污网站 | 欧美日韩国产精品一区二区三区 | 亚洲精品综合在线观看 | 久久视频这里有久久精品视频11 |