国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

數(shù)據(jù)結(jié)構(gòu)與算法基礎(chǔ)(青島大學(xué)-王卓)(5)

這篇具有很好參考價(jià)值的文章主要介紹了數(shù)據(jù)結(jié)構(gòu)與算法基礎(chǔ)(青島大學(xué)-王卓)(5)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

叮叮咚咚,新一期來襲,我還在吃桃子,吃桃子,吃桃子。。。串和python的字符串差不多,數(shù)組和廣義表像是python的list


串(string) - 字符串

概念及術(shù)語(yǔ)
  • 定義: 零個(gè)或多個(gè)任意字符組成的有限序列,是一種內(nèi)容受限的線性表
    數(shù)據(jù)結(jié)構(gòu)與算法基礎(chǔ)(青島大學(xué)-王卓)(5)

  • 子串 : 串中任意個(gè)連續(xù)字符組成的子序列稱為該串的子串, 空串和串本身都是子串,不含本身的是真子串。

  • 主串 : 包含子串的串相應(yīng)地稱為主串。

  • 字符位置 : 字符在序列中的序號(hào)為該字符在串中的位置 。

  • 子串位置 : 子串第一個(gè)字符在主串中的位置 。

  • 空格串 : 由一個(gè)或多個(gè)空格組成的串 , 與空串不同。

  • 串相等 : 當(dāng)且僅當(dāng)兩個(gè)串的長(zhǎng)度相等并且各個(gè)對(duì)應(yīng) 位置上的字符都相同時(shí) , 這兩個(gè)串才是相等的 。

  • 所有的空串是相等的。

串的類型定義

數(shù)據(jù)結(jié)構(gòu)與算法基礎(chǔ)(青島大學(xué)-王卓)(5)

數(shù)據(jù)結(jié)構(gòu)與算法基礎(chǔ)(青島大學(xué)-王卓)(5)

存儲(chǔ)結(jié)構(gòu)(同線性表)
  • 順序串(順序存儲(chǔ)結(jié)構(gòu))(更常用因不經(jīng)常插入刪除)

    #define MAXLEN 255
    typedef struct{
    	char ch[MAXLEN+1]; // 存儲(chǔ)串的一維數(shù)組,實(shí)際范圍0-255(0可能保留不用)
    	int length; // 串的當(dāng)前長(zhǎng)度長(zhǎng)度
    }SString;
    
  • 鏈串(鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu))

    數(shù)據(jù)結(jié)構(gòu)與算法基礎(chǔ)(青島大學(xué)-王卓)(5)

    // 塊鏈結(jié)構(gòu)
    #define CHUNKSIZE 80  // 塊的大小可有客戶定義
    typedef struct Chunk{
    	char ch[CHUNKSIZE];
    	struct Chunk *next;
    }Chunk;
    
    typedef struct LString{
    	Chunk *head,*tail; // 串的頭指針和尾指針
    	int curlen; //串的當(dāng)前長(zhǎng)度
    }LString; //字符串的塊鏈結(jié)構(gòu)
    
串的模式匹配算法

確定主串中所含子串(模式串)第一次出現(xiàn)的位置(BF&KMP)

BF 算法
  • (Brute-Force, 又稱古典的 、 經(jīng)典的 、 樸素的 、 窮舉的 )

思路:從主串的每一個(gè)字符開始依次與模式串字符進(jìn)行比較

Index(S,T,pos)

  • 將主串的第 pos 個(gè)字符和模式串的第一個(gè)字符比較 ,若相等,繼續(xù)逐個(gè)比較后續(xù)字符;

  • 若不等,從主串的下一字符起(回溯) , 重新與模式串的第一個(gè)字符比較

  • 直到主串的一個(gè)連續(xù)子串字符序列與模式串相等。 返回值
    為 S 中與 T 匹配的子序列第一個(gè)字符的序號(hào) , 即匹配成功 。
    否則 , 匹配失敗 , 返回值 0

    數(shù)據(jù)結(jié)構(gòu)與算法基礎(chǔ)(青島大學(xué)-王卓)(5)

    int Index_BF(SString S, SString T, int pos){
        int i=pos; j=1; // 主串i的位置從1開始pos>=1
        while(i<=S.length&&j<=T.length){ 
            if (S.ch[i]==T.ch[j]) {++i; ++j;} // 主串和子串依次匹配下一個(gè)字符
            else {i=i-j+2; j=1} // 字符不相等,主串i回溯位置到(i-(j-1)+1),j回到1
        }
        if (j>T.length) return i-T.length; // 返回模式串匹配成功后主串對(duì)應(yīng)首字符的下標(biāo)
        else return 0;
    }
    
  • 時(shí)間復(fù)雜度為(n-m)*m+m --> (n-m+1)*m--> O(n*m)(當(dāng)m<<n)數(shù)據(jù)結(jié)構(gòu)與算法基礎(chǔ)(青島大學(xué)-王卓)(5)

KMP算 法 (特點(diǎn):速度快 )

利用已經(jīng)部分匹配的結(jié)果而加快模式串的滑動(dòng)速度 ?
且主串 S 的指針 i 不必回溯 ! 可提速到 O( n+m )

數(shù)據(jù)結(jié)構(gòu)與算法基礎(chǔ)(青島大學(xué)-王卓)(5)

j的位置可以根據(jù)模式串來確定 ,定義next[j]函數(shù) , 表明當(dāng)模式中剃個(gè)字符與主串中相應(yīng)字符 " 失配 " 時(shí) , 在模式中需重新和主串中該字符進(jìn)行比較的字符的位置 。

數(shù)據(jù)結(jié)構(gòu)與算法基礎(chǔ)(青島大學(xué)-王卓)(5)

數(shù)據(jù)結(jié)構(gòu)與算法基礎(chǔ)(青島大學(xué)-王卓)(5)

int Index_KMP(SString S, SString T, int pos){
    int i=pos; j=1; // 主串i的位置從1開始pos>=1
    while(i<=S.length&&j<=T.length){ 
        if (S.ch[i]==T.ch[j]) {++i; ++j;} // 主串和子串依次匹配下一個(gè)字符
        else j=next[j] // 通過next[j]得到j(luò)的位置,i不用回溯
    }
    if (j>T.length) return i-T.length; // 返回模式串匹配成功后主串對(duì)應(yīng)首字符的下標(biāo)
    else return 0;
}

void get_next(SString T, int &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];
    }
}

next[j]的改進(jìn)- nextval[j]

數(shù)據(jù)結(jié)構(gòu)與算法基礎(chǔ)(青島大學(xué)-王卓)(5)

數(shù)據(jù)結(jié)構(gòu)與算法基礎(chǔ)(青島大學(xué)-王卓)(5)

void get_nextval(SString T, int &nextval[]){
    i=1; nextval[1]=0; j=0;
    while (i < T.length){
        if (j==0 || T.ch[i]==T.ch[j]){
            ++i; ++j;
            if (T.ch[i]==T.ch[j]) nextval[i]=j;
            else nextval[i]=nextval[j];
        }
        else j=nextval[j];
    }
}

數(shù)組

數(shù)組的定義

按一定格式排列起來的具有相同類型的數(shù)據(jù)元素的集合

一維數(shù)組

若線性表中的數(shù)據(jù)元素為非結(jié)構(gòu)的簡(jiǎn)單元素,則稱為一維數(shù)組 。
其邏輯結(jié)構(gòu)有線性結(jié)構(gòu),定長(zhǎng)的線性表 。

聲明格式 : 數(shù)據(jù)類型 變量名稱 [長(zhǎng)度]

二維數(shù)組

數(shù)據(jù)結(jié)構(gòu)與算法基礎(chǔ)(青島大學(xué)-王卓)(5)

聲明格式: 數(shù)據(jù)類型變量名稱 [行數(shù)] [列數(shù)] ,eg: int num[5][8]

在 C 語(yǔ)言中 ,一個(gè)二維數(shù)組類型也可以定義為一維數(shù)組類型
( 其分量類型為一維數(shù)組類型 ),

即 :typedef elemtype array2[m][n];

等價(jià)于 :

typedef elemtype array1[n];

typedef array1 array2[m];

三維數(shù)組 : 若二維數(shù)組中的元素又是一個(gè)一維數(shù)組 , 則稱作三維數(shù)組 。。。。

n維數(shù)組:若n-1維數(shù)組中的元素又是一個(gè)一維數(shù)組結(jié)構(gòu)則稱為n維數(shù)組 。

線性表是數(shù)組結(jié)構(gòu)的一個(gè)特例,數(shù)組結(jié)構(gòu)又是線性表結(jié)構(gòu)的擴(kuò)展。

數(shù)組特點(diǎn)

結(jié)構(gòu)固定(定以后維數(shù)和維界不再改變),基本操作就是初始化,銷毀,取元素,修改元素 。

n維數(shù)組的數(shù)據(jù)類型定義

數(shù)據(jù)結(jié)構(gòu)與算法基礎(chǔ)(青島大學(xué)-王卓)(5)

數(shù)據(jù)結(jié)構(gòu)與算法基礎(chǔ)(青島大學(xué)-王卓)(5)

數(shù)組的順序存儲(chǔ)

一維數(shù)組存儲(chǔ)位置

數(shù)據(jù)結(jié)構(gòu)與算法基礎(chǔ)(青島大學(xué)-王卓)(5)

二維數(shù)組存儲(chǔ)

  • 以行優(yōu)先 - JAVA, C, BASIC ,COBOL ,PASCAL

    數(shù)據(jù)結(jié)構(gòu)與算法基礎(chǔ)(青島大學(xué)-王卓)(5)

  • 以列優(yōu)先 - FORTRAN

    數(shù)據(jù)結(jié)構(gòu)與算法基礎(chǔ)(青島大學(xué)-王卓)(5)

三維數(shù)組 按頁(yè)行列存放,頁(yè)優(yōu)先的順序存儲(chǔ)

數(shù)據(jù)結(jié)構(gòu)與算法基礎(chǔ)(青島大學(xué)-王卓)(5)

數(shù)據(jù)結(jié)構(gòu)與算法基礎(chǔ)(青島大學(xué)-王卓)(5)

擴(kuò)展到n維數(shù)組存儲(chǔ)位置計(jì)算

數(shù)據(jù)結(jié)構(gòu)與算法基礎(chǔ)(青島大學(xué)-王卓)(5)

數(shù)據(jù)結(jié)構(gòu)與算法基礎(chǔ)(青島大學(xué)-王卓)(5)

特殊矩陣的壓縮存儲(chǔ)
  • 壓縮存儲(chǔ)定義:若多個(gè)數(shù)據(jù)元素的值都相同 , 則只分配一個(gè)元素值的存儲(chǔ)空間 , 且
    零元素不占存儲(chǔ)空間 。

  • 特殊矩陣:對(duì)稱矩陣,對(duì)角矩陣,三角矩陣,稀疏矩陣(非零元素個(gè)數(shù)一般<5%)

對(duì)稱矩陣

數(shù)據(jù)結(jié)構(gòu)與算法基礎(chǔ)(青島大學(xué)-王卓)(5)

只需存儲(chǔ)一半元素,存儲(chǔ)個(gè)數(shù)為每一行個(gè)數(shù)相加,即1+2+3+…+n=n(n+1)/2

數(shù)據(jù)結(jié)構(gòu)與算法基礎(chǔ)(青島大學(xué)-王卓)(5)

任一個(gè)元素存在一維數(shù)組的位置aij的位置i(i-1)/2+(j-1) 原理:前面(i-1)行個(gè)數(shù)+本行的前(j-1)個(gè)元素

三角矩陣

數(shù)據(jù)結(jié)構(gòu)與算法基礎(chǔ)(青島大學(xué)-王卓)(5)

對(duì)角矩陣

[ 特點(diǎn) ] 在n×n的方陣中,所有非零元素都集中在以主對(duì)角線為中心的帶狀區(qū)域中,區(qū)域外的值全為0 ,則稱為對(duì)角矩陣 。 常見的有三對(duì)角矩陣 、 五對(duì)角矩陣 、 七對(duì)角矩陣等 。(3/5/7條數(shù)據(jù))

數(shù)據(jù)結(jié)構(gòu)與算法基礎(chǔ)(青島大學(xué)-王卓)(5)

數(shù)據(jù)結(jié)構(gòu)與算法基礎(chǔ)(青島大學(xué)-王卓)(5)

稀疏矩陣

三元組(行,列,值) 和矩陣維數(shù)(總行,總列)來唯一確定一個(gè)元素的位置

數(shù)據(jù)結(jié)構(gòu)與算法基礎(chǔ)(青島大學(xué)-王卓)(5)

  • 三元組順序表又稱有序的雙下標(biāo)法。

  • 優(yōu)點(diǎn):非零元素在表中按行序有序存儲(chǔ)

  • 缺點(diǎn):不能隨機(jī)存儲(chǔ),按行號(hào)存取某一行中的非零元素要從頭開始查找

十字鏈表 法存儲(chǔ)稀疏矩陣

數(shù)據(jù)結(jié)構(gòu)與算法基礎(chǔ)(青島大學(xué)-王卓)(5)

數(shù)據(jù)結(jié)構(gòu)與算法基礎(chǔ)(青島大學(xué)-王卓)(5)

廣義表

概念

廣義表( 又稱列表 Lists) 是 n>=0 個(gè)元素 a0, a1, a2…an-1的有限序列 , 其中每一個(gè)或者是原子 , 或者是一個(gè)廣義表 。

數(shù)據(jù)結(jié)構(gòu)與算法基礎(chǔ)(青島大學(xué)-王卓)(5)

性質(zhì)

數(shù)據(jù)結(jié)構(gòu)與算法基礎(chǔ)(青島大學(xué)-王卓)(5)

數(shù)據(jù)結(jié)構(gòu)與算法基礎(chǔ)(青島大學(xué)-王卓)(5)

廣義表和線性表的區(qū)別?
  • 廣義表是線性表的推廣,線性表是廣義表的特例
  • 廣義表的結(jié)構(gòu)相當(dāng)靈活 , 在某種前提下 , 它可以兼容線性表 、 數(shù)組 、
    樹和有向圖等各種常用的數(shù)據(jù)結(jié)構(gòu) 。
基本運(yùn)算

GetHead(L): 求非空廣義表的第一個(gè)元素,可以是一個(gè)原子或者一個(gè)子表

GetTail(L):非空廣義表去掉表頭元素以外其他元素所構(gòu)成的表。

案例分析

病毒感染檢測(cè)(病毒RNA是環(huán)狀)

數(shù)據(jù)結(jié)構(gòu)與算法基礎(chǔ)(青島大學(xué)-王卓)(5)

數(shù)據(jù)結(jié)構(gòu)與算法基礎(chǔ)(青島大學(xué)-王卓)(5)文章來源地址http://www.zghlxwxcb.cn/news/detail-494318.html


TO BE CONTINUED…

到了這里,關(guān)于數(shù)據(jù)結(jié)構(gòu)與算法基礎(chǔ)(青島大學(xué)-王卓)(5)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包