標籤:style blog color os 使用 io ar 資料 div
好鬱悶的事情,發生在了我的身上。昨天使用Live Writer寫了<<資料結構與演算法---字串(上)>>,明明已經發布成功,本人親自查看過。當我寫完<<資料結構與演算法---字串(中)>>,發布成功後。我的部落格,只有新發布的資料串(中),資料串(上)不翼而飛了。真的好鬱悶阿,備份也找不到了。看來古人的話還是有道理的:”工欲善其事,必先利其器”。要怪只能怪自己不會使用Live Writer這個工具,好在知識都儲備在了腦子中。書歸正傳,讓我們來學習字串的資料結構吧。
字串概念
電腦的產生,是為滿足人們對數值計算的需求。早期的電腦,除了體格大一些,計算的速度快一些,與計算機沒有什麼大的區別。但是隨著人們的需求不斷提高,電腦的數值計算已然不可以滿足人們的需求了。所以,電腦開始引入了字元的計算,這才有了字串的概念。
字串:由零個或多個字元組成的有限序列。
字串中的字元個數可以為零,此時字串稱為空白串(Null String),長度為0。大家要注意,空串與空格串是不一樣的兩種概念。空串是由零個字元組成,字元長度為0。空格串是由n個空白字元組成,字元長度為n。請看下面代碼:
static void Main(string[] args) { String sentence1 = ""; //sentence1為空白串,長度為0 String sentence2 = " ";//sentence2為空白格串,長度為3 }
如果T串存在於S串中,我們就稱T串為S串的字串,相對應地,S串稱為T串的主串。例如:
static void Main(string[] args) { String sentence1 = "believe in yourself"; //sentence1為sentence2的主串,因為自身包含setence2的字元 String sentence2 = "yourself";//sentence2為sentence1的子串,因為sentence2存在於sentence1中 }
字串的儲存結構
字串的儲存結構,跟線性表的很相似。字串也分為兩種儲存結構,順序儲存、線性儲存。
順序儲存:用一組地址連續的儲存單元來儲存字串中的字元序列,我們一般使用數組來定義。我們習慣於將數組下標為零的位置,存入字串的長度。
鏈式儲存:對於字串的鏈式儲存,與線性表的鏈式儲存很相似,但是由於字串結構的特殊性,結構中的每個元素為字元。如果也按照線性表的鏈式儲存,每個結點存放一個字元,那就會造成很大的空間浪費。一個結點可以存放一個字元,也可以考慮存放多個字元。
字串的抽象資料類型
我們平時在項目開發中,會經常用到字串類型的對象。我們使用字串類型對象可以解決很多需求,例如,通過String類的Index(S,T)方法,可以判斷S串中是否包含T串。我們通過String類的Compare()方法,可以檢查使用者輸入的密碼、使用者名稱是否正確。我們看看串的抽象資料類型定義:
ADT串(String) Data 串中元素僅由一個字元組成,相鄰元素具有前驅和後繼關係。 Operation StrAssign(T,*chars):產生一個其值等於字串常量chars的串T。 StrCopy(T,S):串S存在,由串S複製得串T。 ClearString(S):串S存在,將串清空。 StringEmpty(S):若串S為空白,返回true,否則返回false。 StrLength(S):返回串S中的元素個數,即串的長度。 StrCompare(S,T):若S>T,傳回值>0,若S=T,傳回值=0,若S<T,傳回值<0。 Concat(T,S1,S2):用T返回由S1與S2聯結而成的新串。 SubString(sub,S,pos,len):串S存在,1<=pos<=StrLength(S),且0<=len<=Strlength(S)-pos+1,用Sub返回S串種pos位置之後len長的串 Index(S,T,pos):返回S串種pos位置之後,第一次出現串T的位置,如果沒有,則返回0。 Repalce(S,T,V):串S,T和V存在,T是非空串。用V替換主串S中出現的所有與T相等的不重疊的字串。 StrInsert(S,pos,T)//1<=pos<=Strlength(S)+1在主串中pos位置之前插入字串T StrDelete(S,pos,len)// 1<=pos<=Strlength(S),0<len<=Strlength(S)-pos+1 刪除主串中pos位置起長度為len的字串 endADT
這些是串的抽象資料類型,有些操作,可以配合使用。在資料結構與演算法---字串(下)中,我會詳細講解上面那些操作的實現演算法。演算法+資料結構=編程,合格的程式員,一定要多學習演算法,要掌握它的原理,這樣學習來就很easy。我在資料結構預演算法---字串(中),講解了KMP匹配演算法,大家可以看一下。
資料結構與演算法---字串(上)