第4章 字串 陣列和特殊矩陣

2022-02-22 16:08:49 字數 3185 閱讀 7879

目錄1.3.2 鏈式串

二、字串的模式匹配

三、陣列 (大綱未規定)

四、特殊矩陣

4.3 帶狀矩陣的壓縮儲存

五、稀疏矩陣

5.3 稀疏矩陣的鏈式儲存及實現(大概率不考)

六、演算法設計題

七、錯題集

資料結構與演算法_師大完整教程目錄(更有python、go、pytorch、tensorflow、爬蟲、人工智慧教學等著你):

字串:由 \(0\) 個或多個字元構成的有限序列,元素型別為字元型的特殊線性表

略順序儲存字串:順序串

鏈式儲存字串:鏈式串

順序串常用操作:

順序串的插入演算法

順序串的刪除演算法

順序串的連線運算演算法

求順序串子串的演算法

1.3.1.1 順序串的儲存結構

#define maxsize 100

typedef struct seqstring;

鏈式串的常用操作:

鏈式串的建立演算法

鏈式串的插入演算法

鏈式串的刪除演算法

鏈式串的連線演算法

求鏈式串子串的演算法

1.3.2.1 鏈式串的儲存結構

typedef struct node linkstrnode; // 用於指向本字元的下乙個字元對應的結點的指標

typedef linkstrnode * linkstring;

注:暴力求解,逐個匹對,時間複雜度 \(o(nm)\),\(n\) 是正文的長度,\(m\) 是模式串的長度

演算法步驟(大概率不考)

圖kmp模式匹配流程:

\(next\) 陣列求解步驟:

第 \(1\) 位:\(-1\)

第 \(2\) 位:\(0\)

第 \(n\) 位:比較前 \(n-1\) 位,得出最長前字尾長度為 \(k\),填 \(k\)略略

略特殊矩陣:對稱矩陣、三角矩陣、帶狀矩陣、稀疏矩陣

對稱矩陣元素位置的計算(\(l\) 為每個元素占用儲存空間的長度):

\[address(a_) =

\begin

& address(a_) + [\frac+j]*l \qquad \text\\

& address(a_) + [\frac+i]*l \qquad \text) = address(a_) + [\frac+j]*l \qquad \text\\

\]上三角矩陣元素位置的計算(\(l\) 為每個元素占用儲存空間的長度):

\[\begin

address(a_)

&= address(a_) + [(n+(n-1)+(n-2)+\cdots+(n-(i-1)))+j-i]*l \\

&= address(a_) + [i*n-\frac+j-i]*l \qquad \text

\end

\]注:\((n+(n-1)+(n-2)+\cdots+(n-(i-1)))\) 表示 \(a_\) 前面的 \(i\) 行所有元素占用的空間;\(j-i\) 表示 \(a_\) 所在行的 \(a_\) 前面的元素所占用的空間

帶狀矩陣:除第 \(1\) 行和最後一行外,每行都分配 \(2b+1\) 個元素的空間。但是把帶狀區域的所有元素儲存於 \(((2b+1)*n-2b)*l\) 個儲存單元中

帶狀矩陣元素位置的計算(\(l\) 為每個元素占用儲存空間的長度):

\[\begin

address(a_)

&= address(a_) + ((i*(2b+1)-b)+(j-(i-b)))*l \\

&= address(a_) + (i*(2b+1)+j-i)*l \qquad \text

\end

\]注:\((i*(2b+1)-b)\) 表示 \(a_\) 前面的 \(i\) 行所有元素占用的空間;\((j-(i-b)))\) 表示 \(a_\) 所在行的 \(a_\) 前面的元素所占用的空間

略三元組表示法:\((i,j,value)\),其中 \(i\) 表示行,\(j\) 表示列,\(value\) 表示值

注:三元組矩陣中第一行一般體現稀疏矩陣的行數、列數和所含非零元素的總個數

稀疏矩陣順序儲存常用操作:

產生稀疏矩陣的三元組表示

稀疏矩陣三元組表示下轉置運算的實現

typedef struct  matrix;

typedef int spmatrix[100][3]; // 存放三元組

稀疏矩陣的鏈式儲存方法:十字鍊錶表示法、帶行指標向量的單鏈表表示法、行_列表示法

非零元素結點的結構中有 \(5\) 個域:行域(\(row\))、列域(\(col\))、資料的值域(\(val\))、指向同一列下乙個非零元素的指標域(\(down\))、指向同一行下乙個非零元素的指標域(\(right\))

表頭結點的結構中有 \(5\) 個域:行域(\(row\))預設為 \(0\)、列域(\(col\))預設為 \(0\)、指向下乙個表頭的指標域(\(next\))、指向同一列下乙個非零元素的指標域(\(down\))、指向同一行下乙個非零元素的指標域(\(right\))

稀疏矩陣的鏈式儲存常用操作:

建立稀疏矩陣的十字鍊錶表示

稀疏矩陣十字鍊錶的查詢演算法

稀疏矩陣的十字鍊錶儲存方法如下圖所示:

圖稀疏矩陣的十字鍊錶表示法:

typedef struct matrixnode  tag;

} matrixnode;

typedef matrixnode *spmatrix;

typedef spmatrix headspmatrix[100]; // 指標陣列,每個元素指向乙個表頭結點

稀疏矩陣常用的壓縮儲存方法有三元組順序儲存十字鍊錶兩種

設有乙個 \(10×10\) 的對稱矩陣 \(a\) 採用壓縮方式進行儲存,儲存時以按行優先的順序儲存其下三角陣,假設其起始元素\(a_\) 的位址為 \(1\),每個資料元素佔 \(2\) 個位元組,則 \(a_\) 的位址為 \(53\)(元素 \(a_\) 的位址為 \(1\),不是 \(2\))

第4章 字串

4.1 字串簡介 字串是由若干字元組成的序列。4.1.1 字串的概念 1.使用單引號標識字串 2.使用雙引號標識字串 3.使用三引號標識字串 4.1.2 轉義字元 4.2 字串的輸出與輸入 4.2.1 字串的輸出 4.2.2 字串的輸入 input 4.3 字串的索引與切片 4.4 字串的運算 4....

第5章 陣列與字串

5.1 陣列array 5.1.1 陣列的概念 語法 型別陣列名 型別陣列名 元素個數 不能定義長度為 0的陣列,即 裡不能是 05.1.2 記憶體中的陣列 獲得陣列的尺寸 即元素的個數 int n sizeof a sizeof int 5.1.3 陣列的初始化 初始化時,右值由 括起一組初始值列...

第3章 陣列與字串

程式3.1 逆序輸出 讀入一些整數,不超過100個,逆序輸出到一行中 include define maxn 105 常常難以精確計算出需要的陣列大小,陣列一般會比宣告的稍大一點,會更保險 int buf maxn 因為區域性變數存放在堆疊段中,若放在函式體內可能會導致棧溢位,一般在全域性部分宣告較...