資料結構(C語言) 串

2021-10-19 04:42:30 字數 4436 閱讀 7464

二、串的儲存結構

串的基本運算的實現

串是字串的簡稱,它的每個資料元素都由乙個字元組成。串是一種特殊的線性表。

字串簡稱為串,是一種特殊的線性表,它的資料元素僅由字元組成。

(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 由乙個或多個空格組成的串。串的抽象資料型...