亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

4.2串的表示和實現

2019-11-14 09:10:17
字體:
來源:轉載
供稿:網友

串連接Concat(&T,S1,S2)

S1,S2為要連接的兩個串,T為連接后的串

串T值產生的三種結果:

1.S1[0]+S2[0]<=MAXSTRLEN。

2.S1[0]<MAXSTRLEN,而S1[0]+S2[0]>MAXSTRLEN,則將串S2的一部分截斷。

3.S1[0]=MAXSTRLEN,此時串T和S1[0]相同。

如下圖所示:

代碼如下所示:

Status Concat(SString &T, SString S1, SString S2){ 	// 用T返回由S1和S2聯接而成的新串。若未截斷,則返回TRUE,否則FALSE。	int i;	Status uncut;	if (S1[0] + S2[0] <= MAXSTRLEN)  // 未截斷	{		for (i = 1; i <= S1[0]; i++) T[i] = S1[i];		for (i = 1; i <= S2[0]; i++) T[i + S1[0]] = S2[i];		T[0] = S1[0] + S2[0];		uncut = TRUE;	}	else if (S1[0] < MAXSTRLEN)		// 截斷	{  		for (i = 1; i <= S1[0]; i++) T[i] = S1[i];		for (i = S1[0] + 1; i <= MAXSTRLEN; i++) T[i] = S2[i - S1[0]];		T[0] = MAXSTRLEN;		uncut = FALSE;	}	else // 截斷(僅取S1)	{                         		for (i = 0; i <= MAXSTRLEN; i++) T[i] = S1[i];		uncut = FALSE;	}	return uncut;} // Concat分析:

這里的MAXSTRLEN是宏,書上把他定義為255。這里,代碼是比較亂,畢竟書上只提供了思路和偽代碼,在此我只能說下思路。

他這個數組里面S1[0],和S2[0],保存了整個字符串長度,從S1[1],S2[1]開始才是存數據,

算法:4.3求子串SubString(&Sub,S,pos,len)

求子串過程即為復制字符串序列的過程,將串S中的從第pos個字符開始長度為len的字符序列復制到串Sub中。當參數非法是,返回ERROR

代碼如下:

Status SubString(SString &Sub, SString S, int pos, int len) {	// 用Sub返回串S的第pos個字符起長度為len的子串。	// 其中,1≤pos≤StrLength(S)且0≤len≤StrLength(S)-pos+1。	int i;	if (pos < 1 || pos > S[0] || len < 0 || len > S[0] - pos + 1)		return ERROR;	for (i = 1; i <= len; i++)		Sub[i] = S[pos + i - 1];	Sub[0] = len;	return OK;} // SubString下面來分析下:

這里的StrLength(S)意思就是S的長度。這里面len<=StrLength(S)-pos+1。大家可以舉個例子,如果Strlength(S)是5,pos也是5,那么就是在第五個位置開始尋址,所以要+1。

這里的pos+i-1也差不多,大家帶個數進去看看,就知道為什么要-1了。

4.2.2堆分配存儲表示:

用malloc()和free()來管理。分配成功則返回起始地址指針,作為串基址。

下面是他的結構體:

typedef struct{	char *ch;	//若是非空串,則按串長分配存儲區,否則為NULL	int length;	//串長}HString;

算法4.3:串插入操作StrInsert(&S,pos,T)為串S重新分配大小等于串S和串T長度之和的存儲科技,然后進行串值復制。

代碼如下:

Status StrInsert(HString &S, int pos, HString T) { 	// 1≤pos≤StrLength(S)+1。在串S的第pos個字符之前插入串T。	int i;	if (pos < 1 || pos > S.length + 1)  // pos不合法		return ERROR;	if (T.length) {    // T非空,則重新分配空間,插入T		if (!(S.ch = (char *)realloc(S.ch, (S.length + T.length + 1)*sizeof(char))))			return ERROR;		for (i = S.length - 1; i >= pos - 1; --i)  // 為插入T而騰出位置			S.ch[i + T.length] = S.ch[i];		for (i = 0; i < T.length; i++)         // 插入T			S.ch[pos - 1 + i] = T.ch[i];		S.length += T.length;	}	return OK;} // StrInsert分析:

這里的realloc當擴大堆區時,原數據沒有被破壞,當比以前小了后,才會被破壞。

算法4.4:

下面的代碼是對堆分配的存儲結構的操作:

生成一個其值等于串常量chars的串T

 代碼如下:

Status StrAssign(HString& T, char* chars){	int i;	char *c;	if (T.ch)		free(T.ch);	for (i = 0, c = chars; *c; ++i, ++c);	//求chars的長度	if (!i)	{		T.ch = NULL;		T.length = 0;	}	else	{		if (!(T.ch = (char*)malloc(i*sizeof(char))))			exit(OVERFLOW);		for (int j = 0; i < i; j++)		{			T.ch[j] = chars[j];		}		T.length = i;	}	return Ok;}

這個程序的思路就是:

把char*型變量轉成HString。首先獲取chars長度,在到HString里面的 char*在堆區開辟空間,然后把chars依次給T.ch【x】。

求串S的長度:

int StrLength(HString S){	return S.length;}

字符串比較:

代碼如下:

int StrCompare(HString S, HString T){	//S>T返>0,S=T返0,S<T返<09	for (int i = 0; i < S.length&&i < T.length; i++)	{		if (S.ch[i] != T.ch[i])			return S.ch[i] - T.ch[i];	}	return S.length - T.length;}分析下:

這里S.ch[i]-T.ch[i]這個地方是比較ASCII。前者大返回正,后者大返回負。

當某一個串比到最后,說明前面的都一樣,最后看長度,如果長度一樣就返回0,不一樣的話,大家懂的。

清空S串:

代碼如下:

Status ClearString(HString& S){	if (S.ch)	{		free(S.ch);		S.ch = NULL;	}	S.length = 0;	return Ok;}

4.23串的塊鏈存儲表示:

每個結點可以存放一個字符,或者存放多個字符

也可以是結點大小為1的鏈表

如下圖所示:

為了便于進行串的操作,當以鏈表存儲串時,除頭指針外還可以附設一個尾指針指示鏈表中的最后一個結點,并給出當前串的長度。稱如此定義的串存儲結構為塊鏈結構,說明如下:

#define CHUNKSZIE 80typedef struct Chunk{	char ch[CHUNKSZIE];	struct Chunk* next;}Chunk;typedef struct{	Chunk* head, *tail;		//串頭和串尾指針	int curlen;		//串的當前長度}LString;

下面是一個存儲密度的概念:

存儲密度=串值所占的存儲位/實際分配的存儲位

密度小:運算處理方便,存儲占用大


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美国产极速在线| 国产中文字幕91| 久久精品视频播放| 亚洲第一男人天堂| 亚洲国产成人精品久久| 亚洲国产高清自拍| 亚洲精品电影在线观看| 欧美日韩中文在线| 国产精品久久久av| 91精品视频在线看| 午夜免费日韩视频| 欧美一区亚洲一区| 日韩av免费在线| 中文字幕日韩欧美精品在线观看| 日韩成人在线视频网站| 久久久久久国产| 中文字幕欧美在线| 亚洲91av视频| 性日韩欧美在线视频| 日韩成人av网址| 亚洲一区二区少妇| 日韩欧美综合在线视频| 色yeye香蕉凹凸一区二区av| 色小说视频一区| 欧美日韩不卡合集视频| 亚洲成人在线视频播放| 中文日韩在线观看| 91久久精品国产91久久| 亚洲精品国产免费| 国产精品女人网站| 国产成人极品视频| 中文字幕在线看视频国产欧美| 国产日韩精品入口| 成人性生交大片免费看小说| 成人疯狂猛交xxx| 欧美麻豆久久久久久中文| 国产香蕉97碰碰久久人人| 久99久在线视频| 在线视频亚洲欧美| 中文字幕在线看视频国产欧美在线看完整| 欧美日韩国产成人| 亚洲第一精品福利| 欧美成aaa人片在线观看蜜臀| 日韩免费在线电影| 欧美成人黑人xx视频免费观看| 成人黄色大片在线免费观看| 亚洲人成在线免费观看| 色噜噜亚洲精品中文字幕| 97视频在线观看成人| 亚洲精品乱码久久久久久按摩观| 日韩国产高清视频在线| 久久久精品久久久| 亚洲欧美在线第一页| 日韩精品中文在线观看| 亚洲精品久久久久国产| 91丝袜美腿美女视频网站| 久久综合色影院| 国产精品高清网站| 69视频在线免费观看| 中文字幕日韩精品有码视频| 日韩欧美在线免费观看| 国产成+人+综合+亚洲欧美丁香花| 久久99国产精品自在自在app| 米奇精品一区二区三区在线观看| 国产精品永久在线| 欧美日韩精品在线| 色琪琪综合男人的天堂aⅴ视频| 亚洲男人天堂网| 日韩av日韩在线观看| 国产成人欧美在线观看| 亚洲缚视频在线观看| 亚洲视频在线观看视频| 国产精品久久久久久久久借妻| 亚洲伦理中文字幕| 成人黄色片网站| 亚洲精品国产电影| 欧美日韩免费在线观看| 久久综合伊人77777尤物| 成人免费视频97| 国内久久久精品| 国模私拍视频一区| 国产精品美女午夜av| 国产美女精品视频免费观看| 精品福利免费观看| 亚洲高清一二三区| 欧日韩不卡在线视频| 精品视频www| 欧美黄色小视频| 45www国产精品网站| 九九热99久久久国产盗摄| 亚洲一区亚洲二区亚洲三区| 日本高清视频精品| 亚洲精选一区二区| 亚洲欧美日本伦理| 日韩在线观看视频免费| 国产在线a不卡| 欧美成人一区二区三区电影| 日韩av男人的天堂| 国产精品一区二区性色av| 自拍亚洲一区欧美另类| 久久亚洲精品成人| 青青草国产精品一区二区| 一色桃子一区二区| 一级做a爰片久久毛片美女图片| 欧美性videos高清精品| 国产欧美久久久久久| 成人啪啪免费看| 午夜精品久久久久久久久久久久久| 日日狠狠久久偷偷四色综合免费| 17婷婷久久www| 日韩激情视频在线| 欧美肥老妇视频| 日韩欧美在线一区| 亚洲第一福利在线观看| 国产一区二区香蕉| 另类美女黄大片| 欧美高清自拍一区| 国产一区玩具在线观看| 国产精品日韩久久久久| 91高清视频免费观看| 成人黄色免费看| 国产精品女人久久久久久| 精品久久久久久久久久久久| 97欧美精品一区二区三区| 亚洲第一中文字幕| 欧美成人一二三| 国产亚洲欧洲高清一区| 国产+成+人+亚洲欧洲| 成人黄色av播放免费| 性日韩欧美在线视频| 国产精品视频网站| 欧美亚洲国产另类| 日韩美女av在线| 欧美中文字幕在线视频| 日韩av在线直播| 欧美精品少妇videofree| 中文字幕九色91在线| 国产免费一区二区三区香蕉精| 亚洲女人天堂色在线7777| 亚洲区免费影片| 亚洲精品欧美日韩专区| 欧美视频在线免费看| 日日狠狠久久偷偷四色综合免费| 一区二区三区回区在观看免费视频| 久久免费精品日本久久中文字幕| 亚洲www视频| 国产成人精品电影久久久| 日韩不卡在线观看| 欧美激情视频网站| 中文字幕在线国产精品| 亚洲香蕉在线观看| 欧美壮男野外gaytube| 欧美激情一区二区三区久久久| 日韩禁在线播放| 九九精品视频在线| 国产欧美精品日韩| 欧美精品免费在线| 黑人巨大精品欧美一区二区免费| 日本成人在线视频网址| 亚洲欧美中文日韩在线| 欧美激情图片区| 欧美一区三区三区高中清蜜桃| 欧美精品xxx| 国产精品美女午夜av|