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

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

4.2串的表示和實現

2019-11-14 08:52:29
字體:
來源:轉載
供稿:網友

串連接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;

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

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

密度?。哼\算處理方便,存儲占用大


上一篇:二分法 綜述

下一篇:linux中vi命令使用

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产成人精品免高潮在线观看| 久久精品视频在线播放| 久久综合久久美利坚合众国| 欧美性69xxxx肥| 91视频九色网站| 国产女同一区二区| 成人日韩在线电影| 欧美一级淫片播放口| 国产精品中文久久久久久久| 欧美精品少妇videofree| 69视频在线播放| 日本久久精品视频| 久久影院免费观看| 欧美国产乱视频| 1769国内精品视频在线播放| 色一区av在线| 国产91精品久久久久久久| 成人免费视频97| 日韩不卡中文字幕| 91人成网站www| 中文字幕自拍vr一区二区三区| 欧美一级在线播放| 国产激情视频一区| 欧美一级大片在线免费观看| 亚洲桃花岛网站| 不卡av在线网站| 有码中文亚洲精品| 色婷婷久久一区二区| 国产日韩欧美在线播放| 日韩视频欧美视频| 欧美午夜久久久| 日本成人免费在线| 中文字幕一区二区精品| 精品毛片网大全| 国产精品第七十二页| 久久影院资源网| 欧美日韩国产激情| 国产精品无码专区在线观看| 91深夜福利视频| 亚洲黄色有码视频| 欧美美女15p| 正在播放欧美视频| 尤物九九久久国产精品的特点| 欧美高清视频免费观看| 亚洲欧美日韩成人| 最近2019年中文视频免费在线观看| 国内免费久久久久久久久久久| 精品亚洲aⅴ在线观看| 亚洲精品www| 91久久国产精品91久久性色| 91国内揄拍国内精品对白| 国产一区在线播放| 国产精品美女在线观看| 欧美激情区在线播放| 国产成人精品免费久久久久| 亚洲欧洲日产国码av系列天堂| 亚洲区在线播放| 精品无人区乱码1区2区3区在线| 国产精品久久久久久久久久久不卡| 欧美日韩成人黄色| 国产精品久久久久久久app| 91产国在线观看动作片喷水| 亚洲欧美日韩国产精品| 日韩中文字幕在线观看| 亚洲日本成人女熟在线观看| 国产精品一二三视频| 亚洲а∨天堂久久精品喷水| 午夜精品视频在线| 国产成人小视频在线观看| 91久久国产精品91久久性色| 亚洲精品网站在线播放gif| 国产欧美日韩中文字幕| 久久精品国产亚洲| 亚洲人成免费电影| 国产一区二区三区在线观看视频| 国产伦精品一区二区三区精品视频| 欧美日韩中文字幕在线视频| 555www成人网| 成人国产精品久久久久久亚洲| 亚洲国产91色在线| 久久久久久综合网天天| 亚洲第一区在线观看| 久久精品最新地址| 91产国在线观看动作片喷水| 欧美精品18videos性欧| 欧美日韩一区二区在线播放| www国产精品视频| 日韩国产高清污视频在线观看| 日韩一区二区三区国产| 国产精品久久久久久婷婷天堂| 国产精品亚洲精品| 日韩女优人人人人射在线视频| 国产亚洲免费的视频看| 美女扒开尿口让男人操亚洲视频网站| 欧美一区二区大胆人体摄影专业网站| 91国产精品视频在线| 久久精品国产91精品亚洲| 国产精品福利观看| 日韩大陆毛片av| 国产精品偷伦视频免费观看国产| 日韩av在线免费看| 亚洲成年人在线| 国产日韩换脸av一区在线观看| 久久精品这里热有精品| 国产精品高潮呻吟久久av无限| 成人乱人伦精品视频在线观看| 午夜精品久久久久久99热软件| 国产精品免费在线免费| 欧美在线观看www| 久久久久日韩精品久久久男男| 亚洲成人动漫在线播放| 亚洲欧美999| 2019中文字幕全在线观看| 国产一区二区三区在线观看网站| 自拍偷拍亚洲区| 26uuu另类亚洲欧美日本一| 国产91九色视频| 狠狠做深爱婷婷久久综合一区| 亚洲已满18点击进入在线看片| 亚洲欧美日韩高清| 国产免费一区二区三区香蕉精| 中文字幕综合一区| 疯狂蹂躏欧美一区二区精品| 96精品久久久久中文字幕| 日韩精品高清在线观看| 久久这里只有精品视频首页| 热re99久久精品国产66热| 亚洲成人激情在线| 韩国精品美女www爽爽爽视频| 国产主播在线一区| 欧美激情视频在线免费观看 欧美视频免费一| 精品无人区乱码1区2区3区在线| 亚洲自拍中文字幕| 久久男人资源视频| 久久天天躁狠狠躁夜夜爽蜜月| 欧美成人午夜影院| 国产999精品久久久影片官网| 日韩av资源在线播放| 久久久久久综合网天天| 奇米成人av国产一区二区三区| 日韩午夜在线视频| 国产精品免费一区二区三区都可以| 亚洲男人第一av网站| 欧美另类高清videos| 亚洲qvod图片区电影| 中文字幕日韩精品有码视频| 国产乱肥老妇国产一区二| 最好看的2019年中文视频| 国精产品一区一区三区有限在线| 国产日韩欧美成人| 色播久久人人爽人人爽人人片视av| 另类色图亚洲色图| 久久久久www| 91精品国产精品| 57pao国产精品一区| 国产脚交av在线一区二区| 久久久精品一区二区三区| 国产成人一区二区三区| 岛国视频午夜一区免费在线观看| 欧美日韩在线观看视频小说| 亚洲人av在线影院| 久久天天躁狠狠躁夜夜av| 亚洲一区国产精品| 日韩av网站导航|