如果在程式語言中,串只是作為輸入或輸出變數存在,那麼只需儲存此串的值,即字串行即可。在多數非數值處理的程式中,串也可以以變數的形式出現。
串有三種機內表示方法,分別如下:
4.2.1 定長順序儲存表示
類似於線性表的順序儲存結構,用一組位址連續的儲存單元儲存串值的字串行。按照預定義的串長,為每個串變數分配乙個固定長度的儲存空間,則可用定長陣列描述如下
# define maxstrlen 255
typedef unsigned charsstring[maxstrlen + 1] //這裡定義的串,下面函式會呼叫到;
串的長度可以在預定義的範圍內隨意,超過預定義長度的串值則被捨去,稱之為「截斷」;對串長有兩種表示方法:一種是如上描述的那樣,以下標為0的陣列分量儲存串的實際長度,如pascal語言中的型別串採用這種表示方法;二是在串值結束處加乙個不計入串長的串結束標誌符,如在c語言中用「\0」表示串值的結束,此時的串長為隱含值,顯然不方便進行某些串操作。
求子串:與堆分配儲存的求子串對比來分析
status substring(sstring&sub,sstring s,int pos,int len)
4.2.2 堆分配儲存表示
這種儲存表示的特點是,仍然以一組位址連續的儲存空間儲存串字串行,但是不同的是這個儲存單元是隨機分配的,就是在程式執行過程中動態分配的,
不同的地方:例如在c語言中的函式malloc()和free()來管理。
用malloc分配成功,則返回乙個指標(指向起始位址的),作為串的基址,同時為了以後處理方便,約定串長也作為儲存結構的一部分。
typedef structhstring;//這裡的串定義下面就能呼叫;
例如:求子串與串的順序儲存結構的區別,就是malloc的區別;
status substring(hstring &sub,hstring s,int pos,int len)
else
return ok;
}
如串插入strinsert(&s,pos,t)操作是重新為串s分配大小為串s和串t長度之和的儲存單元,然後進行串值複製。
status strinsert(&s,pos,t)
return ok;
}
由於對分配儲存結構的串既有順序儲存結構的特點,處理方便,又對串長沒有任何限制,更顯靈活,因此在串處理程式中經常被使用。
4.2.3 串的塊鏈儲存表示
和線性表的鏈式儲存結構相類似,也可採用鍊錶方式儲存串值。由於串結構的特殊性——結構中的每個資料元素是乙個字元,採用鍊錶儲存串值時,存在乙個結點大小的問題,即每個結點可以存放乙個字元,也可以存放多個字元。
為了便於進行串的操作,當以鍊錶儲存串值時,除頭指標還可以附設乙個尾指標指示鍊錶中的最後乙個結點,並給出當前串的長度。稱如此定義的串儲存結構為塊鏈結構,說明如下:
//------------串的塊鏈儲存表示-------------------------
#define chunksize 100 //可由使用者定義的塊大小
typedef struct chunkchunk;
typedef structlstring;
設尾指標的目的是為了串聯接時的操作方便,但應注意處理串聯接時第乙個串尾的無效字元。
串的表示和實現
串 串是由零個或多個字元組成的有限序列,又名叫字串。串的順序儲存結構 用一組位址連續的儲存單元來儲存串中的字串行。規定在串值後面加乙個不計入串長度的結束標記字元,為 0 串的表示和實現如下 mystring.h pragma once define maxsize 100 typedef struc...
資料結構 串的順序表示和實現
上次寫鏈式串的時候就覺得太麻煩了,而且還不一定好用,今天就寫順序的果然方便很多。寫的串是常用的字串以及一些常用函式。全部自己原創的,如有不足還請指出。include using namespace std const int maxn int 1e6 7 typedef struct chunk c...
串的定長順序儲存表示和實現
串是零個或多個字元的有限序列,我們可以將其看作是種特殊的線性表,其特殊性在於線性表的資料元素的型別總是字元性,字串的資料物件約束為字符集。串的儲存方式有三種 定長順序儲存表示 堆分配儲存表示 塊鏈儲存表示。本文主要講解串的定長順序儲存表示及其操作的實現 include using namespace...