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

首頁 > 編程 > C > 正文

c語言 數據結構實現之字符串

2020-01-26 14:08:37
字體:
來源:轉載
供稿:網友

c語言 數據結構實現之字符串

串采用定長順序存儲結構(由c4-1.h定義)的基本操作(13個),包括算法4.2,4.3,4.5  

實現效果圖:

  #include <stdio.h> #include <string.h> #include <malloc.h> // SString是數組,故不需引用類型 #define OK 1  #define TRUE 1  #define FALSE 0  #define ERROR 0  #define INFEASIBLE -1   #define DestroyString ClearString // DestroyString()與ClearString()作用相同 #define MAX_STR_LEN 40 // 用戶可在255(1個字節)以內定義最大串長 typedef char SString[MAX_STR_LEN+1]; // 0號單元存放串的長度 typedef int Status; // Status是函數的類型,其值是函數結果狀態代碼,如OK等    Status StrAssign(SString T,char *chars) { // 生成一個其值等于chars的串T   int i;   if(strlen(chars)>MAX_STR_LEN)     return ERROR;   else   {     T[0]=strlen(chars);     for(i=1;i<=T[0];i++)       T[i]=*(chars+i-1);     return OK;   } }  void StrCopy(SString T,SString S) { // 由串S復制得串T   int i;   for(i=0;i<=S[0];i++)     T[i]=S[i]; }  Status StrEmpty(SString S) { // 若S為空串,則返回TRUE,否則返回FALSE   if(S[0]==0)     return TRUE;   else     return FALSE; }  int StrCompare(SString S,SString T) {// 初始條件:串S和T存在。操作結果:若S>T,則返回值>0;若S=T,則返回值=0;若S<T,則返回值<0   int i;   for(i=1;i<=S[0]&&i<=T[0];++i)     if(S[i]!=T[i])       return S[i]-T[i];   return S[0]-T[0]; }  int StrLength(SString S) { // 返回串S的元素個數   return S[0]; }  void ClearString(SString S) { // 初始條件:串S存在。操作結果:將S清為空串   S[0]=0; // 令串長為零 }  Status Concat(SString T,SString S1,SString S2) // 算法4.2改 { // 用T返回S1和S2聯接而成的新串。若未截斷,則返回TRUE,否則FALSE   int i;   if(S1[0]+S2[0]<=MAX_STR_LEN)   { // 未截斷     for(i=1;i<=S1[0];i++)       T[i]=S1[i];     for(i=1;i<=S2[0];i++)       T[S1[0]+i]=S2[i];     T[0]=S1[0]+S2[0];     return TRUE;   }   else   { // 截斷S2     for(i=1;i<=S1[0];i++)       T[i]=S1[i];     for(i=1;i<=MAX_STR_LEN-S1[0];i++)       T[S1[0]+i]=S2[i];     T[0]=MAX_STR_LEN;     return FALSE;   } }  Status SubString(SString Sub,SString S,int pos,int len) { // 用Sub返回串S的第pos個字符起長度為len的子串。算法4.3   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; }  int Index(SString S,SString T,int pos) { // 返回子串T在主串S中第pos個字符之后的位置。若不存在,則函數值為0。   // 其中,T非空,1≤pos≤StrLength(S)。算法4.5   int i,j;   if(1<=pos&&pos<=S[0])   {     i=pos;     j=1;     while(i<=S[0]&&j<=T[0])       if(S[i]==T[j]) // 繼續比較后繼字符       {         ++i;         ++j;       }       else // 指針后退重新開始匹配       {         i=i-j+2;         j=1;       }       if(j>T[0])         return i-T[0];       else         return 0;   }   else     return 0; }  Status StrInsert(SString S,int pos,SString T) { // 初始條件:串S和T存在,1≤pos≤StrLength(S)+1   // 操作結果:在串S的第pos個字符之前插入串T。完全插入返回TRUE,部分插入返回FALSE   int i;   if(pos<1||pos>S[0]+1)     return ERROR;   if(S[0]+T[0]<=MAX_STR_LEN)   { // 完全插入     for(i=S[0];i>=pos;i--)       S[i+T[0]]=S[i];     for(i=pos;i<pos+T[0];i++)       S[i]=T[i-pos+1];     S[0]+=T[0];     return TRUE;   }   else   { // 部分插入     for(i=MAX_STR_LEN;i>=pos+T[0];i--)       S[i]=S[i-T[0]];     for(i=pos;i<pos+T[0]&&i<=MAX_STR_LEN;i++)       S[i]=T[i-pos+1];     S[0]=MAX_STR_LEN;     return FALSE;   } }  Status StrDelete(SString S,int pos,int len) { // 初始條件:串S存在,1≤pos≤StrLength(S)-len+1   // 操作結果:從串S中刪除第pos個字符起長度為len的子串   int i;   if(pos<1||pos>S[0]-len+1||len<0)     return ERROR;   for(i=pos+len;i<=S[0];i++)     S[i-len]=S[i];   S[0]-=len;   return OK; }  Status Replace(SString S,SString T,SString V) // 此函數與串的存儲結構無關 { // 初始條件:串S,T和V存在,T是非空串   // 操作結果:用V替換主串S中出現的所有與T相等的不重疊的子串   int i=1; // 從串S的第一個字符起查找串T   Status k;   if(StrEmpty(T)) // T是空串     return ERROR;   do   {     i=Index(S,T,i); // 結果i為從上一個i之后找到的子串T的位置     if(i) // 串S中存在串T     {       StrDelete(S,i,StrLength(T)); // 刪除該串T       k=StrInsert(S,i,V); // 在原串T的位置插入串V       if(!k) // 不能完全插入         return ERROR;       i+=StrLength(V); // 在插入的串V后面繼續查找串T     }   }while(i);   return OK; }  void StrPrint(SString T) { // 輸出字符串T。另加   int i;   for(i=1;i<=T[0];i++)     printf("%c",T[i]);   printf("/n"); } void get_next(SString T,int next[]) { // 求模式串T的next函數值并存入數組next。算法4.7   int i=1,j=0;   next[1]=0;   while(i<T[0])     if(j==0||T[i]==T[j])     {       ++i;       ++j;       next[i]=j;     }     else       j=next[j]; }  void get_nextval(SString T,int nextval[]) { // 求模式串T的next函數修正值并存入數組nextval。算法4.8   int i=1,j=0;   nextval[1]=0;   while(i<T[0])     if(j==0||T[i]==T[j])     {       ++i;       ++j;       if(T[i]!=T[j])         nextval[i]=j;       else         nextval[i]=nextval[j];     }     else       j=nextval[j]; }  int Index_KMP(SString S,SString T,int pos,int next[]) { // 利用模式串T的next函數求T在主串S中第pos個字符之后的位置的KMP算法。   // 其中,T非空,1≤pos≤StrLength(S)。算法4.6   int i=pos,j=1;   while(i<=S[0]&&j<=T[0])     if(j==0||S[i]==T[j]) // 繼續比較后繼字符     {       ++i;       ++j;     }     else // 模式串向右移動       j=next[j];   if(j>T[0]) // 匹配成功     return i-T[0];   else     return 0; }  void main() {   int i,*p;   SString s1,s2; // 以教科書算法4.8之上的數據為例   StrAssign(s1,"aaabaaaab");   printf("主串為: ");   StrPrint(s1);   StrAssign(s2,"aaaab");   printf("子串為: ");   StrPrint(s2);   p=(int*)malloc((StrLength(s2)+1)*sizeof(int)); // 生成s2的next數組空間   get_next(s2,p); // 利用算法4.7,求得next數組,存于p中   printf("子串的next數組為: ");   for(i=1;i<=StrLength(s2);i++)     printf("%d ",*(p+i));   printf("/n");   i=Index_KMP(s1,s2,1,p); // 利用算法4.6求得串s2在s1中首次匹配的位置i   if(i)     printf("主串和子串在第%d個字符處首次匹配/n",i);   else     printf("主串和子串匹配不成功/n");   get_nextval(s2,p); // 利用算法4.8,求得next數組,存于p中   printf("子串的nextval數組為: ");   for(i=1;i<=StrLength(s2);i++)     printf("%d ",*(p+i));   printf("/n");   printf("主串和子串在第%d個字符處首次匹配/n",Index_KMP(s1,s2,1,p));   getchar(); } 

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
精品国产自在精品国产浪潮| 日韩成人av在线| 欧美电影在线观看完整版| 日韩av在线网页| 国产伦精品一区二区三区精品视频| 久久97精品久久久久久久不卡| 91免费的视频在线播放| 午夜精品久久久久久久99热| 91精品久久久久久久久久久久久久| 欧美日韩成人免费| 久久久久日韩精品久久久男男| 国产日韩中文字幕| 国产精品∨欧美精品v日韩精品| 一本色道久久88综合亚洲精品ⅰ| 一区二区三区在线播放欧美| 777午夜精品福利在线观看| 美女久久久久久久久久久| 午夜精品久久久久久久99黑人| 韩国v欧美v日本v亚洲| 最近的2019中文字幕免费一页| 欧美电影免费观看高清| 久久天天躁狠狠躁夜夜爽蜜月| 乱亲女秽乱长久久久| 国模精品一区二区三区色天香| 成人免费在线视频网址| 久久香蕉精品香蕉| 国产精品视频男人的天堂| 91久久精品国产91性色| 亚洲一级一级97网| 亚洲香蕉av在线一区二区三区| 国产精品久久精品| 国产一区二区动漫| 国产区精品视频| 欧美日韩亚洲国产一区| 欧美一级淫片丝袜脚交| 亚洲激情成人网| 欧美日韩人人澡狠狠躁视频| 91国产美女视频| 亚洲图片制服诱惑| 91精品久久久久久久久久久| 中文字幕视频在线免费欧美日韩综合在线看| 91成品人片a无限观看| 一区二区日韩精品| 97在线日本国产| 国内精品一区二区三区| 国产99久久精品一区二区 夜夜躁日日躁| 美女扒开尿口让男人操亚洲视频网站| 亚洲精品成人免费| 国产精品视频最多的网站| 在线日韩日本国产亚洲| 亚洲综合一区二区不卡| 久久亚洲精品一区二区| 久久精品久久久久久国产 免费| 欧美日韩久久久久| 92国产精品久久久久首页| 国产精品免费电影| 亚洲精品欧美日韩专区| 日韩欧美一区二区在线| 亚洲精品456在线播放狼人| 亚洲视频视频在线| 国产精品扒开腿爽爽爽视频| 北条麻妃一区二区在线观看| 国产精品视频公开费视频| 成人性生交大片免费看小说| 国产精品综合不卡av| 97视频人免费观看| 97视频com| 亚洲va欧美va国产综合久久| 欧美最猛黑人xxxx黑人猛叫黄| 98午夜经典影视| 亚洲在线www| 国产亚洲福利一区| 午夜精品三级视频福利| 欧美高清不卡在线| 国产精品久久久久久婷婷天堂| 欧美三级欧美成人高清www| 亚洲欧美在线免费| 成人在线观看视频网站| 色琪琪综合男人的天堂aⅴ视频| 美女av一区二区三区| 国产精品大陆在线观看| 欧美高跟鞋交xxxxxhd| 日韩欧亚中文在线| 久久91精品国产91久久跳| 久久久国产成人精品| 91大神福利视频在线| 色综合久久中文字幕综合网小说| 懂色av影视一区二区三区| 久久免费精品视频| 久久色免费在线视频| 久久亚洲电影天堂| 精品丝袜一区二区三区| 中文字幕9999| 91精品国产综合久久香蕉922| 国产精品精品国产| 欧美午夜视频在线观看| 国产精品视频999| 97av视频在线| 国内精品久久久久伊人av| 欧美精品videofree1080p| 欧美在线视频观看免费网站| 中文字幕在线看视频国产欧美在线看完整| 日韩成人免费视频| 亚洲小视频在线| 欧美视频中文在线看| 国产精品v日韩精品| 在线日韩精品视频| 欧美精品制服第一页| 欧美日韩黄色大片| 亚洲品质视频自拍网| 久久91亚洲精品中文字幕| 97国产精品久久| 亚洲欧美日韩中文视频| 成人免费网站在线| 久久国内精品一国内精品| 国产在线视频不卡| 国产精品久久久久久超碰| 91精品国产91久久久久久| 九九热最新视频//这里只有精品| 日韩在线播放视频| 日本一区二区三区四区视频| 日韩中文字幕在线精品| 日韩一二三在线视频播| 亚洲直播在线一区| 最新国产精品拍自在线播放| 日韩av日韩在线观看| 日韩在线观看av| 亚洲小视频在线| 91视频88av| 欧美成人午夜激情在线| 日韩一区二区三区国产| 欧美丰满少妇xxxxx做受| 国产精品日日摸夜夜添夜夜av| 国产午夜精品一区理论片飘花| 97高清免费视频| 欧美日韩中文字幕综合视频| 5566成人精品视频免费| 亚洲999一在线观看www| 国产精品男人爽免费视频1| 在线一区二区日韩| 午夜精品久久久久久久久久久久久| 日韩av一区在线| 亚洲永久在线观看| 精品国产一区二区三区久久久| 久久久精品国产| 色综合久综合久久综合久鬼88| 国产精品爽爽爽| 亚洲人成毛片在线播放| 国产91ⅴ在线精品免费观看| 精品欧美aⅴ在线网站| 久久久久久香蕉网| 国产丝袜精品视频| 91国产在线精品| 欧美电影在线观看高清| 亚洲一区中文字幕在线观看| 国产精品网红福利| 2019国产精品自在线拍国产不卡| 日韩毛片在线观看| 美女撒尿一区二区三区| 国产日韩中文字幕| 精品一区精品二区| 欧美精品久久一区二区| 久久精品小视频| 成年无码av片在线|