4 2 串的表示和實現

2021-06-17 23:51:19 字數 1732 閱讀 4951

如果在程式語言中,串只是作為輸入或輸出變數存在,那麼只需儲存此串的值,即字串行即可。在多數非數值處理的程式中,串也可以以變數的形式出現。

串有三種機內表示方法,分別如下:

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