資料結構 串的順序儲存 動態分配)

2021-10-08 12:01:14 字數 4032 閱讀 4401

5.小結

#include

#include

#define maxlen

255//預定義最大串長為255

typedef struct hstring;
/*函式宣告*/

void

initstring

(hstring&s)

;//1.初始化

void

increasesize

(hstring&

s, int len)

;//2.擴容

int strlength

(hstring s);

//3.串長

void

clearstring

(hstring&s)

;//4.清空

bool strempty

(hstring s);

//5.判空

void

strassign

(hstring&

t, char s)

;//6.賦值

void

strcopy

(hstring&

t, hstring s);

//7.複製

void

concat

(hstring&

t, hstring s1

, hstring s2);

//8.連線

bool substring

(hstring& sub, hstring s

, int pos, int len)

;//9.求子串

int strcompare

(hstring s

, hstring t);

//10.比較

int index

(hstring s

, hstring t);

//11.定位

void

destroystring

(hstring&s)

;//12.銷毀

void

printstring

(hstring s);

//13.遍歷

//1.初始化串

void

initstring

(hstring&s)

//2.增加動態陣列的長度

void

increasesize

(hstring&

s, int len)

//3.求串長:返回串s的元素個數

int strlength

(hstring s

)

//4.清空操作:將s清為空串(邏輯上清空)

void

clearstring

(hstring&s)

//5.判空操作:若s為空串,返回true,否則返回false

bool strempty

(hstring s

)

//6.賦值操作:把串t賦值為s

void

strassign

(hstring&

t, char s)

}

//7.複製操作:由串s複製得到t

void

strcopy

(hstring&

t, hstring s

)

//8.串聯接操作:用t返回由s1和s2連線而成的新串

void

concat

(hstring&

t, hstring s1

, hstring s2

)

//9.求子串操作:用sub返回串s的第pos個字元起長度為len的子串

bool substring

(hstring& sub, hstring s

, int pos, int len)

//10.比較操作:若s>t,則返回值》0;若s=t,則返回值=0;若sint strcompare

(hstring s

, hstring t

)

//11.定位操作:若主串中存在與串t值相同的子串,則返回它在主串中第一次出現的位置,否則函式值為0,即不存在

int index

(hstring s

, hstring t

)return0;

//s中不存在與t相等的子串

}

//12.銷毀操作:銷毀串s

void

destroystring

(hstring&s)

//13.遍歷:僅為測試,可以不寫

void

printstring

(hstring s

)

int main()

else

printf

("子串範圍越界!\n");

/*5、比較操作*/

printf

("<——比較操作——>\n");

if(strcompare(s1

,s2)==

0)printf

("s1=s2!\n");

elseif(

strcompare(s1

,s2)>0)

printf

("s1>s2! \n");

elseif(

strcompare(s1

,s2)<0)

printf

("s1)

;/*6、定位操作*/

printf

("<——定位操作——>\n");

if(index(s3

,s4)==

0)printf

("s4不是s3的子串!\n");

else

printf

("子串s4在s3中的位置為:%d\n"

,index(s3

,s4))

;/*7、銷毀操作*/

destroystring(s1

);destroystring(s2

);destroystring(s3

);destroystring(s4

);return0;

}

關於串的順序儲存(動態分配)

因為順序儲存的串的動態分配實現同順序表的動態分配一樣,也是用動態陣列實現的,通過malloc函式申請的一片連續的儲存空間屬於堆區,因此,也叫 堆分配儲存表示。

關於動態分配和靜態分配的區別

(1)因為儲存空間是自己申請的,所以需要使用free函式手動釋放,因此,有了串的銷毀操作。

(2)動態分配和靜態分配最大的不同就是可以擴容,因此,相比靜態分配增加了串的擴容操作(增加串的長度)。

本質上還是順序儲存,所以可隨機訪問,雖實現了擴容操作,但移動元素的時間複雜度較大,且不易插入和刪除,因此,有了串的鏈式儲存。

關於串的鏈式儲存說明

和線性表的鏈式儲存幾乎一致,只不過和線性表還有一些不同。在鏈結點中有資料域和指向下個結點的指標域,對於串的鏈式儲存來說,如果每個結點只存乙個字元,在32位的計算機中,乙個字元佔1個位元組,指標佔4個位元組,這樣會導致儲存密度很低,比較好的解決方案是在乙個結點中存多個字元,以提高儲存密度,最後乙個結點如果存不滿,則用一些特殊字元填充用來標識。關於串的鏈式儲存結構後續文章不再展開,重點掌握定長順序儲存,後續關於串的定位操作也以定長順序儲存表示展開。

資料結構C語言動態分配實現串

說明 堆分配儲存實現串時,串並不是以 0 而是用資料項int length來表示的,所以和傳統的c語言操作字串有所不同。標頭檔案 ifndef pilehead h included define pilehead h included include include typedef struct ...

順序結構的動態分配和靜態分配

使用的是 dev 書本是 嚴蔚敏的資料結構 王道考研中的順序表的靜態分配 include define maxsize 10 最大長度 初始定義值 define ok 1 define error 0 define overflow 2 typedef int status 靜態儲存 typedef...

資料結構中線性表的順序式表示動態分配儲存結構

順序線性表儲存結構,很容易實現隨機訪問線性表第i個元素的操作,但實現刪除或者插入操作時需要移動大量的資料元素。所以,順序表適應於穩定的線性表,如職工工資表和學生學籍表。1 define list init size 10 線性表儲存空間的的初始分配量 2 define list increment ...