二、串的儲存結構
串的基本運算的實現
串是字串的簡稱,它的每個資料元素都由乙個字元組成。串是一種特殊的線性表。
字串簡稱為串,是一種特殊的線性表,它的資料元素僅由字元組成。
(1)串的定義
串(string)是由零個或任意多個字元組成的有限序列,一般記為:
s=
"a1a2a3....an"
(n>=
0)
其中,s為串名,在本書中用雙引號作為串的定界符,引號括起來的字串行為串值,ai
(1<=i<=n)可以是字母、數字或其他字元,n為串的長度。
(2)串的相關術語
(1)串的賦值strasign(s,chars)
初始條件:chars是字串常量
操作結果:生成乙個值等於chars的串s.
(2)串的複製strcopy(s,t)
初始條件:串s存在。
操作結果:由串t複製得串s。
(3)求串的長度strlength(s)
初始條件:串s存在
操作結果:返回串s的長度,即串中的元素個數。
(4)串的連線strcat(s,t)
初始條件:串s和t存在。
操作結果:將串t的值連線在串s的後面
(5)求子串substring(sub,s,pos,len)
初始條件:串s存在,1<=pos<=strlength(s)且1<=len<=strlength(s)-pos+1
。
操作結果:用sub返回串s的第pos個字元起長度為len的子串。
(6)串的定位(模式匹配)strindex(s,pos,t)
初始條件:s串與t串存在,t非空
操作結果:若串s中存在與t串相同的子串,則返回它在串s中第一次出現的位置;否則返回-1
(7)串的插入strinsert(s,pos,t)
初始條件:串s和t存在,1<=pos<=strlength(s)+1
操作結果:在串s的第pos個字元插入串t。
(8)串的刪除strdelete(s,pos,len)
初始條件:串s存在,1<=pos<=strlength(s)且1<=len<=strlength(s)-pos+1
操作結果:從串s中刪除第pos個字元起長度為len的子串
(9)串的替換strreplace(s,t,v)
初始條件:串s,t和v存在,且t是非空串
操作結果:用v替換串s**現的所有與t相等的不重疊子串。
(10)判斷串空strempty(s)
初始條件:串s存在
操作結果:若串s為空串,返回0
(11)串的比較strcompare(s,t)
初始條件:串s和t串存在
操作結果:若s>t,則返回值》0;若s=t,則返回值等於0;若s(1)順序儲存的型別定義
順序串的型別定義與順序表的定義相似,可以用乙個字元陣列和乙個整型變數表示其中字元陣列儲存串,整型變數表示串的長度。
(2)儲存方式
(1)鏈結儲存的描述
用鍊錶儲存字串,每個結點有兩個域:乙個資料域(data)和乙個指標域(next),在串的鏈式儲存結構中,如下:
資料域(data)——存放串中的字元。
指標域(next)——存放後繼節點的位址
(1)堆分配儲存的方法
typedef
struct
lnode;
(3)「堆」的管理
c中利用動態分配函式,malloc和free來管理「堆」。利用malloc為每乙個新串分配一塊實際串長所需要的儲存空間,分配成功返回乙個指向起始位址的指標,作為串的基址,同時,約定的串長也作為儲存結構的一部分。函式free則用來釋放用malloc分配的儲存空間。
(1)順序串結構定義
typedef
struct
string;
(2)求串的長度操作
int
long
(string *s)
s->len=i;
return
(s->len)
;//返回串長
}
(3)建立串操作
void
establish
(string *s)
else
}
(4)求子串操作
void
substring
(string *s,string *sud)
else
sud->data[i]
='\0'
;//sud尾部加上結束標誌
sud->len=len;
//把len輸入的長度賦值給sud串的len,表示子串長度
if(sud->lenelse}}
}
(5)刪除子串的操作
void
strdelete
(string *s)
else
s->data[s->len]
='\0'
;//尾部結束標誌 }if
(s->len>x)
else
}}
(6)插入子串操作
void
strinsert
(string *s ,string *s1)
s1->len=k;
//把計算得到s1長度的k賦值給len
printf
("輸入插入子串的位置:");
scanf
("%d"
,&i);if
(i>s->len)
else
if(s->len+s1->len>
100)
else
for(k=
0;klen;k++
) s->len=s->len+s1->len;
//修改s串的總長度
s->data[s->len]
='\0'
;//尾部加結束標誌
} i=s->len;
if(s->len==s->len-s1->len)
else
}}
(7)子串的定位操作 (模式匹配 bf演算法)
void
strindex_bf
(string *s,string *t)
t->len=i;
i=0;while
(ilen&&jlen)
else}if
(j>=t->len)
else
}
(8)子串的定位操作 (模式匹配 kmp演算法)
void
strindex_kmp
(string *s,string *t)
t->len=i;
l=0;k=1
; nextval[1]
=0;while
(klen)
else
}else
}while
(ilen&&jlen)
else
} k=t->len;
j=l=0;
if(i>t->len)
j++;l++;}
if(k==0)
else
}else
}
(9)判斷兩串是否相等
void
strcompare
(string *s,string *s1)
s1->len=i;
i=0;if
(s->len==s1->len)}if
(floa==s->len==s1->len)
}else
}
(10)兩串鏈結
void
strcat
(string *s,string *t)
t->len=i;
if(s->len+t->len<=
100)
s->data[i]
='\0'
; s->len=s->len+t->len;
printf()
;for
(i=0
;ilen;i++)}
else
if(s->len+t->len>
100&&s->len<
100)
s->len=
100;
printf()
;for
(i=0
;ilen;i++)}
else
}
資料結構 串 C語言
串的概述 串 字串 由n n 0 個字元組成的有限序列。一般記作s s0,s1,s2,sn 1 其中s稱作串名,n稱作串的長度,雙引號括起來的字串行稱作串的值。子串 乙個串中任意個連續的字元組成的子串行。主串 包含子串的串稱為子串的主串。該字元在串中的位置 乙個字元在乙個串中的位置序號 0 串相等 ...
資料結構 C語言實現串
include stdlib.h include stdio.h define true 1 define false 0 define maxlen 255 typedef int status typedef structstring 串的賦值 void strassign string s,c...
C語言資料結構 六 ,串
c語言資料結構 嚴蔚敏,吳偉民版。以下內容為串 串或字串 sting 由零個或者多個字元組成的有限序列。串長度 串中字元的數目n,稱為串的長度。空串 零個字元的串。子串 串中任意個連續的字元組成的子串行。主串 包含子串的的串。空格串 blank string 由乙個或多個空格組成的串。串的抽象資料型...