程序猿必修課之?dāng)?shù)據(jù)結(jié)構(gòu)(九)串

原文:http://www.itdecent.cn/p/d0ad73bd638f

你還在為開發(fā)中頻繁切換環(huán)境打包而煩惱嗎?快來試試 Environment Switcher 吧!使用它可以在app運(yùn)行時(shí)一鍵切換環(huán)境,而且還支持其他貼心小功能,有了它媽媽再也不用擔(dān)心頻繁環(huán)境切換了。https://github.com/CodeXiaoMai/EnvironmentSwitcher

上一章:程序猿必修課之?dāng)?shù)據(jù)結(jié)構(gòu)(八)隊(duì)列

串的定義

串(String)是由零個(gè)或多個(gè)字符組成的有限序列,又名字符串。

從定義中可以看出:、

  • 串的字符數(shù)目是“有限”的,零個(gè)字符的串叫“空串(null string)”。
  • 它是一個(gè)序列,相鄰字符之間具有前驅(qū)和后繼關(guān)系。

空格串

只包含空格的串叫“空格串”,它和空串的區(qū)別是:空格串是有內(nèi)容有長度的,而且可以不止一個(gè)空格。

子串與主串

串中任意個(gè)數(shù)的連續(xù)字符組成的子序列稱為該串的子串,相應(yīng)的,包含子串的串稱為主串。

子串在主串中的位置就是子串的第一個(gè)字符在主串中的序號(hào)。

串的比較

數(shù)字可以比較大小,串同樣可以比較大小,只不過串的比較是通過比較組成串的字符之間的編碼來進(jìn)行的,而字符的編碼指的是字符在對(duì)應(yīng)字符集中的序號(hào)。

比較兩個(gè)串是否相等,必須滿足兩個(gè)條件:

  1. 兩個(gè)串的長度相等
  2. 兩個(gè)串的各個(gè)對(duì)應(yīng)位置的字符都相等。

編碼知識(shí)

計(jì)算機(jī)中的常用字符是使用標(biāo)準(zhǔn)的 ASCII 編碼,它由 7 位二進(jìn)制數(shù)表示一個(gè)字符,總共可以表示 128 個(gè)字符。后來發(fā)現(xiàn)缺少一些特殊符號(hào),于是擴(kuò)展 ASCII 碼產(chǎn)生,它由 8 位二進(jìn)制數(shù)表示,總共可以表示 256 個(gè)字符,這足夠以英語為主的語言和特殊符號(hào)進(jìn)行輸入、存儲(chǔ)、輸出等操作的字符需要了。但是對(duì)于以漢字為代表的象形文字來說,顯然 256 個(gè)字符是不夠的,因此后來就有了 Unicode 編碼。

串的抽象數(shù)據(jù)類型

ADT 串(string)

Data 串中相鄰元素具有前驅(qū)和后繼關(guān)系

Operation
    
    copy(t, s): 由串 s 復(fù)制得到 t。
    clear(s): 串 s 存在,將串清空。
    isEmpty(s): 若串 s 為空,返回 true,否則返回 false
    length(s): 返回串 s 的無數(shù)個(gè)數(shù),即串的長度
    compare(s, t): 若 s > t,返回值為正數(shù);若 s == t,返回 0;若 s < t,返回負(fù)數(shù)。
    contat(t, s1, s2): 將 s1 和 s2 拼接成 t 返回。
    subString(sub, s, pos, len): 若串存在, 1 <= pos <= length(s),且 0 <= len <= length(s) - pos + 1,用 sub 返回串 s 的第 pos 個(gè)字符起長度為 len 的子串。 
    index(s, t, pos): 串 s 和 t 存在, t 是非空串, 1 <= pos <= length(s)。若主串 s 中存在和串 t 值相同的子串,則返回它在主串 s 中第 pos 個(gè)字符之后第一次出現(xiàn)的位置,否則返回 -1。
    replace(s, t, v): 串 s、t 和 v 存在,t 是非空串。用 v 替換主串 s 中出現(xiàn)的所有與 t 相等的子串。
    insert(s, pos, t): 串 s 和 t 存在, 1 <= pos < length(s) + 1。在串 s 的第 pos 個(gè)字符之前插入串 t。
    delete(s, pos, len): 串 s 存在,1 <= pos <= length(s) - len + 1。從串 s 中刪除第 pos 個(gè)字符起長度為 len 的子串。

endADT

串的順序存儲(chǔ)結(jié)構(gòu)

串的順序存儲(chǔ)結(jié)構(gòu)是用一組地址連續(xù)的存儲(chǔ)單元來存儲(chǔ)串中的字符序列的,按照預(yù)定義的大小,為每個(gè)定義的串分配一個(gè)固定長度的存儲(chǔ)區(qū)(一般是用定長數(shù)組)。

但是串的順序存儲(chǔ)方式存在一些問題,對(duì)于字符串的操作,比如拼接、插入、替換等,都有可能使得串的升序超過數(shù)組的長度。

串的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)

串的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)與線性表是相似的,但由于串結(jié)構(gòu)的特殊性,結(jié)構(gòu)中的每個(gè)元素?cái)?shù)據(jù)是一個(gè)字符,如果一個(gè)結(jié)點(diǎn)對(duì)應(yīng)一個(gè)字符,就會(huì)造成很大的空間浪費(fèi),因此,一個(gè)結(jié)點(diǎn)可以存儲(chǔ)一到多個(gè)字符,最后一個(gè)結(jié)點(diǎn)若未被占滿,可以用其他非串值字符補(bǔ)全。一個(gè)結(jié)點(diǎn)存多少個(gè)字符會(huì)直接影響著串處理的效率,需要根據(jù)實(shí)際情況做出選擇。

串的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)除了在串的拼接等操作時(shí)方便之外,總的來說不如順序存儲(chǔ)靈活,性能也不如順序存儲(chǔ)結(jié)構(gòu)好。

KMP模式匹配算法

下一章:程序猿必修課之?dāng)?shù)據(jù)結(jié)構(gòu)(十)樹1

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容