資料結構複習 第四章 串 多維陣列和廣義表

2021-06-27 23:36:01 字數 4819 閱讀 8098

1.串:是由零個或多個字元組成的有限序列;包含字元的個數稱串的長度;

2.空串:長度為零的串稱空串;

空白串:由乙個或多個空格組成的串稱空白串;

子串:串中任意個連續字元組成的子串行稱該串的子串;

主串:包含子串的串稱主串;

子串的首字元在主串中首次出現的位置定義為子串在主串中的位置;

3.空串是任意串的子串;

任意串是自身的子串;

串常量在程式中只能引用但不能改變其值;

串變數取值可以改變;

4.串的基本運算

1) int strlen(char*s);求串長。

2) char *strcpy(char *to,char * from);串複製。

3) char *strcat(char *to,char * from);串聯接。

4) int strcmp(char*s1,char *s2);串比較。

5) char *strchr(char*s,char c);字元定位。

5.串的儲存結構:

(1)串的順序儲存:串的順序儲存結構稱順序串。

按儲存分配不同分為:

1) 靜態儲存分配的順序串:

直接用定長的字元陣列定義,以「/0」表示串值終結。

#define maxstrsize 256

typedef char seqstring[maxstrsize];

seqstring s;

不設終結符,用串長表示。

typedef structseqstring;

以上方式的缺點是:串值空間大小是靜態的,難以適應插入、鏈結等操作。

2) 動態儲存分配的順序串:

//簡單定義:

typedef char * string;

//複雜定義:

typedef structhstring;

(2)串的鏈式儲存:串的鏈式儲存結構稱鏈串。鏈串由頭指標唯一確定。

型別定義:

typedef struct nodelinkstrnode;

typedef linkstrnode *linkstring;

linkstring s;

將結點資料域存放的字元個數定義為結點的大小。結點大小不為1的鏈串型別定義:

#define nodesize 80

typedef struct nodelinkstrnode;

6.串運算的實現

(1)順序串上的子串定位運算。

1)子串定位運算又稱串的模式匹配或串匹配。主串稱目標串;子串稱模式串。

2)樸素的串匹配演算法。時間複雜度為o(n^2)。比較的字元總次數為(n-m+1)m。

int *****strmatch(seqstring t, seqstring p)

else

} if (p == null)

return shift;

else

return null;

}

7.多維陣列:一般用順序儲存的方式表示陣列。

8.常用方式有:

1)行優先順序,將陣列元素按行向量排列;

2)列優先順序,將陣列元素按列向量排列。

9.計算位址的函式:loc(aij)=loc(ac1c2)+((i-c1)*(d2-c2+1)+j-c2)*d

10.矩陣的壓縮儲存:為多個非零元素分配乙個儲存空間;對零元素不分配儲存空間。

(1)對稱矩陣:在乙個n階的方陣a中,元素滿足aij=aji 0<=i,j<=n-1;稱為對稱矩陣。

元素的總數為:n(n+1)/2;

設:i=i或j中大的乙個數;j=i或j中小的乙個數;

則:k=i*(i+1)/2+j;

位址計算:loc(aij)=loc(sa[k])=loc(sa[0])+k*d= loc(sa[0])+ (i*(i+1)/2+j )*d

(2)三角矩陣:以主對角線劃分,三角矩陣有上三角和下三角;上三角的主對角線下元素均為常數c;下三角的主對角線上元素均為常數c。

元素總數為:(n(n+1)/2)+1;

以行優先順序存放的aij與sa[k]的關係:

上三角陣:k=i*(2n-i+1)/2+j-i;

下三角陣:k=i*(i+1)/2+j;

(3)對角矩陣:所有的非零元素集中在以主對角線為中心的帶狀區域,相鄰兩側元素均為零。|i-j|>(k-1)/2

以行優先順序存放的aij與sa[k]的關係:k=2i+j;

11.稀疏矩陣:當矩陣a中有非零元素s個,且s遠小於元素總數時,稱為稀疏矩陣。

對其壓縮的方法有順序儲存和鏈式儲存。

(1)三元組表:將表示稀疏矩陣的非零元素的三元組(行號、列號、值)按行或列優先的順序排列得到的乙個結點均是三元組的線性表,將該錶的線性儲存結構稱為三元組表。其型別定義:

#define maxsize 10000

typedef int datatype;

typedef structtrituplenode;

typedef structtritupletable;

(2)帶行表的三元組表:在按行優先儲存的三元組表中加入乙個行表記錄每行的非零元素在三元組表中的起始位置。型別定義:

#define maxrow 100

typedef structrtritulpetable;

12.廣義表:是線性表的推廣,廣義表是n個元素的有限序列,元素可以是原子或乙個廣義表,記為ls。

13.若元素是廣義表稱它為ls的子表。若廣義表非空,則第乙個元素稱表頭,其餘元素稱表尾。

14.表的深度是指表展開後所含括號的層數。

15.把與樹對應的廣義表稱為純表,它限制了表中成分的共享和遞迴;

16.允許結點共享的表稱為再入錶;

17.允許遞迴的表稱為遞迴表;

18.相互關係:線性表∈純表∈再入錶∈遞迴表;

19.廣義表的特殊運算:

1)取表頭head(ls);

2)取表尾tail(ls);

資料結構 第四章 字串和多維陣列

第四章 字串和多維陣列 4.1 字串 4.1.1 字串的定義 1.字串的定義 字串是零個或多個組成的有限序列,只包含空格的串成為空格串。串中所包含的字元個數成為串的長度,長度為0的串為空串,記作 乙個非空串通常該記作 s s1,s2 sn 字串中任意個連續的字元組成的子串行稱為該串的子串,相應地,包...

資料結構 第四章 字串和多維陣列

4.1字串 4.1.1 字串的定義 1.定義 字串是零個或多個字元組成的有限序列,只包含空格的串稱為空格串。串中所包含的字元個數稱為串的長度,長度為零的串稱為空串,記作 p非空串通常記為 s s1s2 sn 其中 s是串名,雙引號是定界符,雙引號引起來的部分是串值 si 1 i n 是乙個任意字元。...

資料結構第四章字串和多維陣列

1.字串的定義 字串是零個或多個字元組成的有限序列,只包含空格的稱為空格串。串中所包含的字元個數稱為串的長度,長度為零的串稱為空串。字串中任意個連續的字元組成的子串行稱為該串的子串,包含子串的串稱為主串。子串的第乙個字元在主串中的序號稱為子串在主串中的位置。2.字串的比較 給定兩個字串 x x1x2...