數據結構04串

第四章 串

STL:string ?http://blog.csdn.net/weixin_37289816/article/details/54716009

計算機上非數值處理的對象基本上是字符串數據。

在不同類型的應用中,字符串具有不同的特點,要有效的實現字符串的處理,必須選用合適的存儲結構。

?

4.1 串類型的定義

串 String?由零個或多個字符組成的有限序列。

s = 'a1a2a3...an' ??n >= 0

s 串名

用單引號擴起來的字符序列是串的值

n 串的長度

空串:零個字符的串

子串:串中任意個連續字符組成的子序列稱為該串的字串

位置:字符在序列中的序號稱為該字符在串中的位置

相等:當且僅當兩個串的值相等

?

串的邏輯結構與線性表極為相似,區別僅在于串的數據對象約束為字符集。

最小操作子集: 串賦值求串長 求子串 串比較 串連接

?

4.2 串的表示和實現

串的三種表示方法:

1、定長順序存儲表示

???用一組連續的存儲單元存儲串值的字符序列,此時串的最大長度被限定。

???兩種表示方法:

? ? ? ? 1以下標為0的數組分量存放串的實際長度 ?PASCAL

? ? ? ? 2在串值后面加一個不計入串長的結束標記字符,此時串長為隱含值 ?C語言中的'\0'

?

2、堆分配存儲表示

???在C語言中,存在一個稱之為“堆”的自由存儲區,由動態分配函數malloc()和free()管理。

???仍以一組連續的存儲單元存儲串值的字符序列,此時串的長度無限制。

???存儲空間在程序執行過程中動態分配。

?

3、塊鏈存儲表示

???塊大小的選擇

???頭指針 尾指針串長度

???設置尾指針的目的:聯結操作

?

4.3 串的模式匹配算法

串的模式匹配:字串的定位操作。

KMP算法: O(n+m)

改進:每當一趟的匹配過程中出現字符比較不等時,不需要回溯i指針,而是利用已經得到的“部分匹配”的結果將模式向右“滑動”盡可能遠的一段距離后,繼續進行比較。

?

匹配僅需從模式中第k個字符與主串中第i個字符繼續進行比較:此時模式中頭k-1個字符和主串中最后k-1個字符相同。

亦即 next[1, j-1] 這個串中,前后綴相同串的字符為 next[1, next[j] - 1],所以下一次比較的是next[j]個字符的不同。

next數組里存放的,相同前后綴子串,前子串位置的下一個位置坐標。

?

next[j] = k : 當模式中第j個字符失配時,重新進行比較的位置。

算法:

假設主串指針i = pos,模式串指針j = 1;

若si = pj,則i++, j++;

否則j = next[j], 繼續進行si 和pj 的比較。

如果 j = 0, 則 i++, j++, 繼續進行si和 pj的比較。

?

KMP算法的基礎是next函數值,僅和模式串本身有關。

求next[j + 1] 的方法:

next[1] = 0;

next[j] = k;

若 pk = pj,next[j + 1] = k +1;

若 pk!=pj,k = next[k],繼續進行pk和 pj的比較。若k = next[k] = 0,則next[j + 1] = 1。

?

?

i = 1;
next[1] = 0;
j = 0;
while (i < length)
{if (j == 0 || T[i] == T[j])i++; j++; next[i] = j;elsej = next[j];
}

?

?

?

兩點說明:

1、簡單算法的時間復雜度雖然是O(n*m),但在一般情況下,其實際執行時間近似于O(n+m),因此至今仍被采用。

KMP算法僅當模式與主串之間存在許多“部分匹配”的情況下才顯得比簡單算法快得多。

KMP算法的最大特點:無需回溯,整個匹配過程,對主串僅需從頭至尾掃描一遍,這對處理從外設輸入的龐大文件很有效,可以邊讀入邊匹配,而無需回頭重讀。

2、next函數的修正算法 針對連續字符的改進

?

i = 1;
next[1] = 0;
j = 0;
while (i < length)
{if (j == 0 || T[i] == T[j])i++; j++;if (T[i] != T[j])  next[i] = j;else next[i ] = next[j];elsej = next[j];
}

?

?

?

?

?

4.4 串操作應用舉例:

文本編輯

文本編輯程序是一個面向用戶的系統服務程序,文本編輯的實質是修改字符數據的形式或格式。

雖然各文本編輯程序的功能強弱不同,但基本操作是一致的,一般包括串的查找、插入、刪除等。

可以利用換頁符和換行符把文本劃分為若干頁,每頁有若干行。

把文本看成是一個字符串,稱為文本串。頁是文本串的子串,行是頁的子串。

?

為了管理文本的頁和行,在進入文本編輯的時候,編輯程序先為文本串建立相應的頁表和行表,即建立各子串的存儲映像。

頁表的每一項給出頁號和該頁的起始行號。

行表的每一項指示行號、起始地址和該字串的長度。

設立頁指針、行指針、字符指針,分別指向當前操作的頁、行、字符。

頁表和行表是遞增順序存儲的,對行表進行的插入或刪除運算需移動操作位置以后的全部表項。

Tip:由于訪問是以頁表和行表作為索引的,所以在作行和頁的刪除操作時,可以只對行表和頁表作相應的修改,不必刪除所涉及的字符,這樣可以節省時間。

?

?

建立詞索引表

信息檢索。

可設定此索引表為按字典有序的線性表。

?

重復下列操作直至文件末尾:

1、從書目文件中讀取一個書目串

2、從書目串中提取所有關鍵詞插入詞表

3、對詞表中的每一個關鍵詞,在索引表中進行查找并作相應的插入操作。

?

需要一張常用詞表,不在常用詞表中的字符串為關鍵字。

索引表雖是動態生成,在生成過程中需頻繁進行插入操作,但考慮索引表主要為查找用,為了提高查找效率,宜采用順序存儲結構

索引表內容:關鍵詞 + 書號索引。

書號索引采用鏈式存儲結構。

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/387212.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/387212.shtml
英文地址,請注明出處:http://en.pswp.cn/news/387212.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

CAS單點登錄原理解析

CAS單點登錄原理解析 SSO英文全稱Single Sign On&#xff0c;單點登錄。SSO是在多個應用系統中&#xff0c;用戶只需要登錄一次就可以訪問所有相互信任的應用系統。CAS是一種基于http協議的B/S應用系統單點登錄實現方案&#xff0c;認識CAS之前首先要熟悉http協議、Session與Co…

JDK1.6版添加了新的ScriptEngine類,允許用戶直接執行js代碼。

JDK1.6版添加了新的ScriptEngine類&#xff0c;允許用戶直接執行js代碼。在Java中直接調用js代碼 不能調用瀏覽器中定義的js函數&#xff0c;會拋出異常提示ReferenceError: “alert” is not defined。[java] view plaincopypackage com.sinaapp.manjushri; import javax.sc…

數據結構05數組和廣義表

第五章 數組 和 廣義表 數組和廣義表可以看成是線性表在下述含義上的擴展&#xff1a;表中的數據元素本身也是一個數據結構。 5.1 數組的定義 n維數組中每個元素都受著n個關系的約束&#xff0c;每個元素都有一個直接后繼元素。 可以把二維數組看成是這樣一個定長線性表&…

k8s的ingress使用

ingress 可以配置一個入口來提供k8s上service從外部來訪問的url、負載平衡流量、終止SSL和提供基于名稱的虛擬主機。 配置ingress的yaml&#xff1a; 要求域名解析無誤 要求service對應的pod正常 一、test1.domain.com --> service1:8080 apiVersion: extensions/v1beta1…

JDK1.8中如何用ScriptEngine動態執行JS

JDK1.8中如何用ScriptEngine動態執行JS jdk1.6開始就提供了動態腳本語言諸如JavaScript動態的支持。這無疑是一個很好的功能&#xff0c;畢竟Java的語法不是適合成為動態語言。而JDK通過執行JavaScript腳本可以彌補這一不足。這也符合“Java虛擬機不僅僅是Java一種語言的虛擬機…

數據結構06樹和二叉樹

第六章 樹和二叉樹 6.1 樹的定義和基本術語 樹 Tree 是n個結點的有限集。 任意一棵非空樹中&#xff1a; &#xff08;1&#xff09;有且僅有一個特定的稱為根&#xff08;root&#xff09;的結點&#xff1b; &#xff08;2&#xff09;當n>1時&#xff0c;其余結點可…

2019.03.20 mvt,Django分頁

MVT模式 MVT各部分的功能: M全拼為Model&#xff0c;與MVC中的M功能相同&#xff0c;負責和數據庫交互&#xff0c;進行數據處理。 V全拼為View&#xff0c;與MVC中的C功能相同&#xff0c;接收請求&#xff0c;進行業務處理&#xff0c;返回響應。 T全拼為Tem…

CountDownLatch,CyclicBarrier和Semaphore

在java 1.5中&#xff0c;提供了一些非常有用的輔助類來幫助我們進行并發編程&#xff0c;比如CountDownLatch&#xff0c;CyclicBarrier和Semaphore&#xff0c;今天我們就來學習一下這三個輔助類的用法。以下是本文目錄大綱&#xff1a;一.CountDownLatch用法二.CyclicBarrie…

數據結構07排序

第十章內部排序 10.1 概述 排序就是把一組數據按關鍵字的大小有規律地排列。經過排序的數據更易于查找。 排序前KiKj&#xff0c;且Ki在前: 排序方法是穩定的&#xff0c;若排序后Ki在前&#xff1b; 排序方法是不穩定的&#xff0c;如排序后Kj在前。 分類&#xff1a; 內…

數據結構08查找

第九章 查找 另一種在實際應用中大量使用的數據結構--查找表。 所謂查找&#xff0c;即為在一個含有眾多的數據元素的查找表中找出某個“特定的”數據元素。 查找表 search table 是由同一類型的數據元素構成的集合。集合中的數據元素之間存在著完全松散的關系&#xff0c;故…

下載Centos7 64位鏡像

下載Centos7 64位鏡像 1.打開Centos官網 打開Centos官方網站地址&#xff1a;https://www.centos.org/&#xff0c;點擊Get CentOS Now 2.點擊Minimal ISO鏡像 Minimal ISO鏡像&#xff0c;與DVD ISO鏡像的差別有很多&#xff0c;這里只說兩點 1.Minimal ISO類似于Windows的純凈…

[Objective-C語言教程]結構體(17)

Objective-C數組可定義包含多個相同類型的數據項的變量類型&#xff0c;但結構體是Objective-C編程中的另一個用戶定義數據類型&#xff0c;它可組合不同類型的數據項。 結構體用于表示記錄&#xff0c;假設要圖書館中跟蹤書籍信息。可能希望跟蹤每本書的以下屬性 - 標題作者學…

Scala01入門

第1章 可伸展的語言 Scala應用范圍廣&#xff0c;從編寫腳本&#xff0c;到建立大型系統。 運行在標準Java平臺上&#xff0c;與Java庫無縫交互。 更能發揮力量的地方&#xff1a;建立大型系統或可重用控件的架構。 將面向對象和函數式編程加入到靜態類型語言。 在Scala中&a…

架構師之路17年精選80篇

【架構必備】 《互聯網架構如何實現“高并發”》4W 《TCP接入層的負載均衡、高可用、擴展性架構設計》2.2W 《配置中心架構設計演進》1.7W 《跨公網調用的大坑與架構優化》1.4W 《DNS在架構設計中的巧用》1.9W 《消息如何在網絡上安全傳輸》1.2W 《10W定時任務&#xff0c;如何…

iphone手機型號獲取

#import <sys/utsname.h> //手機型號 NSString *device [self iphoneType]; (NSString *)iphoneType { struct utsname systemInfo; uname(&systemInfo); NSString *platform [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding]; if…

Java網絡01基本網絡概念

協議 Protocol&#xff1a;明確規則 &#xff08;1&#xff09;地址格式&#xff1b; &#xff08;2&#xff09;數據如何分包&#xff1b; ... TCP/IP四層模型&#xff1a; 應用層 HTTP SMTP POP IMAP 傳輸層 TCP UDP 網際層 IP 主機網絡層 host to host layer 數模、…

apache的產品分類說明

分類 項目名 說明 開發語言 服務器&#xff08;共20&#xff09; Apache HTTP Server全球第一HTTP服務器C/CTomcatJava的Web服務器JavaJames郵件服務器JavaSpamAssassin反垃圾郵件C/CPerlApache的Perl編程語言支持C/CTclTCL腳本語言C/CDirectory Server超級目錄服務器JavaAxisW…

Java網絡02基本Web概念

URI Uniform Resource Identifier 同一資源標識符 以特定語法標識一個資源的字符串 絕對URI&#xff1a;URI模式模式特有部分 scheme:scheme-specific-part scheme分為&#xff1a; data file本地文件系統 ftp http telnet urn 統一資源名 scheme-specific-part為&am…

解決自建ca認證后瀏覽器警告

前一篇講解了基本的建立證書的過程&#xff0c;但是建立后總是會在瀏覽器那里警告&#xff1a; 此鏈接不是私密鏈接 --谷歌瀏覽器 此證書頒發機構不可信 此證書不是這個網站的 --ie瀏覽器 總之證書是生成成功了&#xff0c;但是其中的內容填寫錯誤了&a…

設計模式學習(三)——單例模式

在Java開發過程中&#xff0c;很多場景下都會碰到或要用到單例模式&#xff0c;在設計模式里也是經常作為指導學習的熱門模式之一&#xff0c;相信每位開發童鞋都用到過。我們總是沿著前輩的足跡去做設定好的思路&#xff0c;往往沒去探究為何這么做&#xff0c;所以這篇文章對…