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 ...