資料結構——串
阿新 • • 發佈:2022-05-07
串,即字串 是有零個或多個字元組成的有限序列
字元在主串中的位置:字元在串中的序號(位序從1開始;空格也是字元)
串的基本操作主要以子串作為操作物件
設計串的時候 ch[0]廢棄不用,並且在末尾新增變數length記錄串的長度。
ch[0]廢棄不用:字元的位序和陣列下標相同。但char之戰1B也就是8bit,以功能儲存0~255個數,空間有限。
串的儲存
//串的順序儲存 #define MAXLEN 255 typedef struct{ //靜態 char ch[MAXLEN]; int length; }SString; typedef struct{ //動態 char *ch;int length; }HString; HString S; S.ch = (char *)malloc(MAXLEN * sizeof(char)); S.length=0; //串的鏈式儲存 typedef struct StringNode{ //char ch;//1B 儲存密度低 char ch[4]; struct StringNode * next;//4B }StringNode,* String;
串的基本操作
//求子串 bool SubString(SString &Sub,SString S,int pos,int len){ //第pos個字元起是長度為len的子串,Sub返回想要找到的子串的內容if(pos+len-1 > S.length)//判斷子串是否越界 return false; for(int i=pos;i<pos+len;i++)//將Sub的值複製到ch數組裡,並且把長度設為len Sub.ch[i-pos+1] = S.ch[i]; Sub.length = len; return true; } //比較串大小 若S>T 返回值>0,=<同理 bool StrCompare(SString S,SString T){ for(int i=1;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中存在與子串T值相同的子串,則傅安輝它在主串中第一次出現的位置 int Index(SString S,SString T){ int i=1,n=StrLength(S),m=StrLength(T);//n表示S的長度 SString sub; while(i<=n-m+1){ SubString(sub,i,m); if(StrCompare(sub,T)!=0) ++i; else return i; } return 0; }