資料結構與演算法---字串(上)

來源:互聯網
上載者:User

標籤: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匹配演算法,大家可以看一下。

資料結構與演算法---字串(上)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.