串:
adt string
資料關係:r1=
基本操作:
strassign(&t,chars)
chars是字元常量。生成乙個其值等於chars的串t。
strcopy(&t,s)
串s存在則由串s複製得串t
strempty(s)
串s存在則若s為空串,返回真否則返回假
strcompare(s,t)
串s和t存在,若s>t,則返回值大於0,若s=t,則返回值=0,若s
strlength(s)
串s存在返回s的元素個數稱為串的長度.
clearstring(&s)
串s存在將s清為空串
concat(&t,s1,s2)
串s1和s2存在用t返回由s1和s2聯接而成的新串
substring(&sub,s,pos,len)
串s存在,1<=pos<=strlength(s)且0<=len<=strlength(s)-pos+1
index(s,t,pos)
串s和t存在,t是非空,1<=pos<=strlength(s),若主串s中存在和串t值相同的子串,則返回它在主串s中第pos個字元之後第一次出現的位置,否則函式值為0
replace(&s,t,v)
串s,t和v存在,t是非空串,用v替換主串s中出現的所有與t相等的不重疊的子串
strinsert(&s,pos,t)
串s和t存在,1<=pos<=strlength(s)+1,在串s的第pos個字元之前插入串t
strdelete(&s,pos,len)
串s存在,1<=pos<=strlength(s)-len+1從串中刪除第pos個字元起長度為len的子串
destroystring(&s)
串s存在,則串s被銷毀
}adt string
串型別的定義
串(string)(或字串)是由 零個或多個字元 組成的有限序列,一般記為:
s=' a1a2...an '
注意:由乙個或多個空格組成的串,稱為空格串。而不是空串。
串 和 字串行(char * ='hello')的區別:
串是一種資料結構,是字元的集合,實現並提供對這種集合操作的各種方法。
char 是c 的一種基本資料型別,沒有已實現的對字串行的複雜操作。
串的邏輯結構和線性表極為相似,區別在於:
1.串的資料物件約束為字符集。
串的表示及實現
串有3種機內表示方法:
1.定長順序儲存 表示
類似於線性表的順序儲存結構,用一組位址連續的儲存單元儲存串值的字串行。在串的定長順序儲存結構中,按照預定義的大小,為每個定義的串變數分配乙個固定長度的儲存區,則可用定長陣列如下描述之。
儲存表示:
#define maxstrlen 255 //定義最大串長
typedef unsigned char sstring [maxstrlen +1]; //0單元存放串的長度
串的實際長度可在這預定義長度的範圍內隨意, 超出的部分被捨棄,稱之為 「截斷」 。
弊端:當合併兩個 串的時候,如果長度超過 預定義最大串長maxstrlen ,其它部分將會丟失即 「截斷」。
解決方案:使用不限定串長的最大長度, 即動態分配串值的儲存空間。
2.堆分配儲存表示
特點:仍以一組位址連續的儲存單元存放串值字串行,但它們的儲存空間是在程式執行過程中動態分配而得。
在 c 語言中,存在乙個稱之為 「堆」 的自由儲存區, 並由c 語言的動態分配函式 malloc() 和 free()來管理。利用malloc 函式為每個新產生的串分配一塊實際串長所需的儲存空間,若分配成功,則返回乙個指向起始位址的指標,作為串的基址,同時,為了處理方便,約定串長也作為儲存結構的一部分。
堆分配儲存表示:
typedef struct hsring;
**實現:
#include#include#define true 1
#define false 0
#define ok 1
#define error 0
#define infeasible -1
#define overflow -2
#define maxqsize 5
//status是函式的型別,其值是函式結果狀態碼
typedef int status;
typedef structhstring;
//生成乙個其值等於串常量 chars 的串t
status strassign(hstring &s,char * chars)
//if(s.ch)
if(!i)elsechunk;
typedef struct
注:設定尾指標的目的是 便於進行串的連線操作,但要注意連線時需處理第乙個串尾的無效字元(#)。
鏈式串中,結點的大小直接影響著串處理的效率。
儲存密度 = 串值所佔的儲存位 / 實際分配的儲存位
對於固定的串a ,其串值儲存位是固定的,而實際分配的儲存位根據結點的大小而改變。
顯然當儲存密度最小時,(即結點大小為1)串的運算處理最方便,但是其占用的儲存量大。
總結:串的鏈式儲存,對鏈結操作等有一定的方便之處, 但總的來說不如另外兩種結構靈活,它占用儲存量大且操作複雜。
kmp匹配(
隨便留點,好有個印象而已)
}int index_kmp(string s,string t,int pos)//返回字串t在主串s中第pos個字元之後的位置
else
j=next[j];
}if(j>t[0])
return i-t[0];
else
return 0;
}
改進後的kmp演算法
void get_nextval(string t,int *nextval)
{ int i,j;
i=1;j=0;
nextval[1]=0;
while(i
資料結構 串
輸入乙個字串,按字典序列印出該字串中字元的所有排列。例如輸入字串abc,則列印出由字元a,b,c所能排列出來的所有字串abc,acb,bac,bca,cab和cba。結果請按字母順序輸出。我們求整個字串的排列,可以看成兩步 首先求所有可能出現在第乙個位置的字元,即把第乙個字元和後面所有的字元交換。第...
資料結構 串
串名 串值 串長 空串 空格串。字串的比較 字串模式匹配演算法 1.簡單字串模式匹配演算法 最簡單實現是用字串p的字元依次與字串t中的字元進行比較。實現思想是,首先將子串p從第0個字元起與主串t的第pos個字元起依次比較對應字元,如全部對應相等,則表明已找到匹配,成功終止。否則將子串p從第0個子串起...
資料結構 串
串 又稱字串 是一種特殊的線性表,它的每個結點僅由乙個字元組成。在早期的程式語言中,串僅在輸入或輸出中以直接量的形式出現,並不參與運算。隨著計算機的發展,串在文字編輯 詞法掃瞄 符號處理以及定理證明等許多領域得到越來越廣泛的應用。在高階語言中開始引入了串變數的概念,如同整型 實型變數一樣,串變數也可...