4 2串的順序儲存結構

2021-10-06 10:13:42 字數 3052 閱讀 7176

定長順序串是將串設計成一種靜態結構型別,串的儲存分配是在編譯時完成的。與前面所講的線性表的順序儲存結構類似,可用一組位址連續的儲存單元儲存串的字串行。

定長順序串型別定義如下:

#define maxlen 40 

typedef

struct

sstring;

其中 maxlen 表示串的最大長度,ch 是儲存字串的一維陣列,每個分量儲存一 個字元, len 是字串的長度。

( 1 )串插入函式

問題分析

在進行順序串的插入時,插入位置 pos 將串分為兩部分(假設為 a、 b,長度為 la、 lb)及待插入部分(假設為 c,長度為 lc),則串由插入前的 ab 變為 acb,由於是順序串, 插入會引起元素的移動。

可能出現以下三種情況:

演算法描述

strinsert

(sstring *s,

int pos, sstring t)

/*在串 s 中下標為 pos 的字元之前插入串 t */

else

if(pos+t.len<=maxlen)

else

return(1);}

顯然,實現順序串插入的演算法其實現複雜度為: o( s->len+t.len)。

( 2 )串刪除函式

strdelete

(sstring *s,

int pos,

int len)

/*在串 s 中刪除從下標 pos 起 len 個字元*/

(3)串的簡單模式匹配 brute-force(布魯特-福斯)演算法

演算法思想

簡單的模式匹配演算法是一種帶回溯的匹配演算法,演算法的基本思想是:從主串 s 的第 pos 個字元開始,和模式串 t 的第乙個字元開始比較,如果相等,就繼續比較後續字元, 如果不等,則從(回溯到)主串 s 的第 pos+1 個字元開始重新和模式串 t 比較,直到模式串 t 中 的每乙個字元和主串 s中的乙個連續字元子串行全部相等,則稱匹配成功,返回和 t 中第乙個 字元相等的字元在主串 s 中的位置;或者主串中沒有和模式串相等的字串行,則稱匹配不成功。

演算法描述

實現時設 i、 j、 start三個指示器:

i——指向主串 s 中當前比較的字元,起始指向 s 的首字元,此後,每比較一步,後移一步,一 趟匹配失敗時,回溯到該趟比較起點的下一位置。

j———指向子串t中當前比較的字元,起始指向t的首字元,此後,每比較一步,後移一步, 一趟匹配失敗時,回溯到 t 的首字元處。

start———記錄每趟比較時在主串 s 中的起點,每趟比較後,後移一步,以便確定下一趟的起始位置。

順序串的簡單模式匹配(定位)函式

strindex

(sstring s,

int pos, sstring t)

/*求從主串 s 的下標 pos 起,串 t 第一次出現的位置,成功返回位置序號,不成功返回-1*/

/* 當前對應字元相等時推進 */

else

if(j>=t.len)

return

(start)

;/* 匹配成功時,返回匹配起始位置 */

else

return(-

1);/* 匹配不成功時,返回-1 */

}

演算法分析

該演算法思路比較簡單,但最壞時間複雜度較高,為 o( s.len* t.len),如主串為 51 個 0 ,模式串為 7 個 0 後有個 1 ,每趟都在最後乙個不匹配後而倒到 start+1 ,整個匹配過程 共需 s.len- t.len=45 趟,每趟比較 t.len=8 個字元,故此例整個比較了 360 次。這個演算法的主要時間耗費在失配後的比較位置有回溯,造成了比較次數太多的情況。降低時間複雜度可採用無回溯的演算法

字串包括串名與串值兩部分,而串值採用堆串儲存方法儲存,串名用符號表 儲存。

堆串儲存方法:仍以一組位址連續的儲存單元順序存放串中的字元,但它們的 儲存空間是在程式執行過程中是動態分配的。系統將乙個位址連續、容量很大的 儲存空間作為字串的可用空間,每當建立乙個新串時,系統就從這個空間中分配 乙個大小和字串長度相同的空間儲存新串的串值。

串名符號表:所有串名的儲存映像構成乙個符號表。借助此結構可以在串名和串值之間建立乙個對應關係,稱為串名的儲存映像。

c 語言已經有乙個稱為「堆」的自由儲存空間,並可用函式 malloc()和函式 free()完成動態儲存管理。

因此,可以直接利用 c 語言中的「堆」 來實現堆串。此時堆串可定義如下:

typedef

struct

hstring;

其中 len 域指示串的長度,ch 域指示串的起始位址。

( 1 )堆串插入函式

strinsert

(hstring *s,int pos,hstring *t)

/*在串 s 中下標為 pos 的字元之前插入串 t */

( 2 )堆串刪除函式
strdelete

(hstring *s,int pos,int len)

/*在串 s 中刪除從下標 pos 起 len 個字元 */

串 順序儲存結構

該文章主要介紹串的順序儲存結構以及相關運算。標頭檔案 sqstring.h ifndef sqstring h define sqstring h include const int maxsize 100 class sqstringclass 順序串類 endif 原始檔 sqstring.cp...

4 1 串的順序儲存結構

header content type text html charset utf 8 class linear string 生成乙個值等於字串常量chars的串 public function strassign chars null this string substr this string...

4 2樹的儲存結構

雙親表示法 用一組連續的儲存空間儲存樹的結點,同時在每個結點中,用乙個變數儲存該結點的雙親結點在陣列中的位置。孩子少的時候 結構 typedef char elemtype typedef struct tnodetnode 結點資料型別 define maxsize 100 typedef str...