1,字串
一般的編譯器字串都是用順序儲存的。
如何表示串的長度?
方案1:用乙個變數來表示串的實際長度
方案2:在串尾儲存乙個不會在串**現的特殊字元作為串的終結符,表示串的結尾。
2,模式匹配
bf演算法(樸素模式匹配)
int bf(char s[ ], char t[ ])
kmp演算法,時間複雜度o(n+m),用多重迴圈匹配時間複雜度過高,此演算法避免回溯,i不移動,j>=0繼續向後移,從該位置開始與i進行比較。主串:在哪兒失敗在哪開始。子串:從有開始最大滑動距離(記錄在陣列k裡)
void compute_next(char t, int next)
}int kmp_findpat(char *s, char *t,int *next)
else
j=next[j];
}if(t[j]』\0』)
return i-j;
else
return -1;
}3,多維陣列(下標問題)
(多維)陣列——線性表中的資料元素可以是線性表,但所有元素的型別相同。
廣義表——線性表中的資料元素可以是線性表,且元素的型別可以不相同。
行優先儲存二維陣列的一維陣列定址
aij前面的元素個數
=整行數×每行元素個數+本行中aij前面的元素個數
=(i -l1)×(h2 -l2+1)+(j -l2)
列優先儲存二維陣列的一維陣列定址
設陣列開始存放位置 loc( 0, 0 ) = a,
每個元素占用 l 個儲存單元
loc ( i, j ) = a + ( j *n +i ) * l
4,特殊矩陣
特殊矩陣:矩陣中很多值相同的元素並且它們的分布有一定的規律。
稀疏矩陣:矩陣中有很多零元素。
壓縮儲存的基本思想是:
⑴ 為多個值相同的元素只分配乙個儲存空間;
⑵ 對零元素不分配儲存空間。
對稱矩陣的壓縮
對於下三角中的元素aij(i≥j), 在一維陣列中的下標k與i、j的關係為:
k=i×(i-1)/2+j-1 。
上三角中的元素aij(i<j),因為aij=aji,則訪問和它對應的元素aji即可,即:
k=j×(j-1)/2+i -1。
5,廣義表
n廣義表(列表): n ( ³ 0 )個表元素組成的有限序列,記作:
ls = (a0, a1, a2, …, an-1)
ls是表名,ai是表元素,它可以是表 (稱為子表),可以是資料元素(稱為原子)。
n為表的長度。n = 0 的廣義表為空表。
長度:廣義表ls中的直接元素的個數;
深度:廣義表ls中括號的最大巢狀層數。算括號數量
ø廣義表的成分可以是單元素,也可以是有結構的表
ø線性表是一種特殊的廣義表
ø廣義表不一定是線性表,也不一定是線性結構
表頭:廣義表ls非空時,稱第乙個元素為ls的表頭;
表尾:廣義表ls中除表頭外其餘元素組成的廣義表(一定是子表或空)
c 字元陣列與字串
一 定義 字元陣列 儲存字元的陣列 字串 是使用最頻繁的字元陣列,是乙個特殊的字元陣列。c 中並沒有專門的字串的型別,乙個字串實際上就是乙個字元陣列,與普通字元陣列不同的是,字串的結尾有乙個字元 0,表示字串的結束。char 可以定義字元陣列,也可以定義字串。字串實際上是使用 null 字元 0 終...
C陣列與字串
所謂陣列,就是按照一定的順序排列,具有某種相同性質的同型別變數的集合。這些變數具有相同的名字和資料型別。陣列中的各資料項稱為陣列元素,用陣列名和下標名表示。定義一維陣列的形式為 資料型別 陣列名 整形常量表示式 說明 資料型別是陣列中全體陣列元素的資料型別。陣列名用識別符號表示,整形常量表示式代表陣...
C 字串指標與字串陣列
在做面試100題中第21題時,發現char astr abcdefghijk 0 和char astr 有點區別,以前一直以為是一樣的,但是在該程式中採用字串指標執行一直出錯。後來在網上查查,果然發現大大的不同。分析 當你需要修改字串時,採用指標指向該字串編譯通過但是執行出錯,而採用字串陣列時不會出...