亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? bo4-3.cpp

?? Status StrAssign(SString T,char *chars) { // 生成一個其值等于chars的串T int i if(strlen(chars)>MAXST
?? CPP
字號:
 // bo4-3.cpp 串采用塊鏈存儲結(jié)構(gòu)(由c4-3.h定義)的基本操作(16個)
 void InitString(LString &T)
 { // 初始化(產(chǎn)生空串)字符串T。另加
   T.curlen=0;
   T.head=NULL;
   T.tail=NULL;
 }

 Status StrAssign(LString &T,char *chars)
 { // 生成一個其值等于chars的串T(要求chars中不包含填補空余的字符)
   // 成功返回OK,否則返回ERROR
   int i,j,k,l;
   Chunk *p,*q;
   i=strlen(chars); // i為串的長度
   if(!i||strchr(chars,blank)) // 串長為0或chars中包含填補空余的字符
     return ERROR;
   T.curlen=i;
   j=i/CHUNKSIZE; // j為塊鏈的結(jié)點數(shù)
   if(i%CHUNKSIZE)
     j++;
   for(k=0;k<j;k++)
   {
     p=(Chunk*)malloc(sizeof(Chunk));
     if(!p)
       return ERROR;
     if(k==0) // 第一個鏈塊
       T.head=q=p;
     else
     {
       q->next=p;
       q=p;
     }
     for(l=0;l<CHUNKSIZE&&*chars;l++)
       *(q->ch+l)=*chars++;
     if(!*chars) // 最后一個鏈塊
     {
       T.tail=q;
       q->next=NULL;
       for(;l<CHUNKSIZE;l++) // 用填補空余的字符填滿鏈表
         *(q->ch+l)=blank;
     }
   }
   return OK;
 }

 Status StrCopy(LString &T,LString S)
 { // 初始條件:串S存在。操作結(jié)果:由串S復(fù)制得串T(連填補空余的字符一塊拷貝)
   Chunk *h=S.head,*p,*q;
   T.curlen=S.curlen;
   if(h)
   {
     p=T.head=(Chunk*)malloc(sizeof(Chunk));
     *p=*h; // 復(fù)制1個結(jié)點
     h=h->next;
     while(h)
     {
       q=p;
       p=(Chunk*)malloc(sizeof(Chunk));
       q->next=p;
       *p=*h;
       h=h->next;
     }
     p->next=NULL;
     T.tail=p;
     return OK;
   }
   else
    return ERROR;
 }

 Status StrEmpty(LString S)
 { // 初始條件:串S存在。操作結(jié)果:若S為空串,則返回TRUE,否則返回FALSE
   if(S.curlen) // 非空
     return FALSE;
   else
     return TRUE;
 }

 int StrCompare(LString S,LString T)
 { // 若S>T,則返回值>0;若S=T,則返回值=0;若S<T,則返回值<0
   int i=0; // i為當(dāng)前待比較字符在S,T串中的位置
   Chunk *ps=S.head,*pt=T.head; // ps,pt分別指向S和T的待比較塊
   int js=0,jt=0; // js,jt分別指示S和T的待比較字符在塊中的位序
   while(i<S.curlen&&i<T.curlen)
   {
     i++; // 分別找S和T的第i個字符
     while(*(ps->ch+js)==blank) // 跳過填補空余的字符
     {
       js++;
       if(js==CHUNKSIZE)
       {
         ps=ps->next;
         js=0;
       }
     }; // *(ps->ch+js)為S的第i個有效字符
     while(*(pt->ch+jt)==blank) // 跳過填補空余的字符
     {
       jt++;
       if(jt==CHUNKSIZE)
       {
         pt=pt->next;
         jt=0;
       }
     }; // *(pt->ch+jt)為T的第i個有效字符
     if(*(ps->ch+js)!=*(pt->ch+jt))
       return *(ps->ch+js)-*(pt->ch+jt);
     else // 繼續(xù)比較下一個字符
     {
       js++;
       if(js==CHUNKSIZE)
       {
         ps=ps->next;
         js=0;
       }
       jt++;
       if(jt==CHUNKSIZE)
       {
         pt=pt->next;
         jt=0;
       }
     }
   }
   return S.curlen-T.curlen;
 }

 int StrLength(LString S)
 { // 返回S的元素個數(shù),稱為串的長度
   return S.curlen;
 }

 Status ClearString(LString &S)
 { // 初始條件: 串S存在。操作結(jié)果: 將S清為空串
   Chunk *p,*q;
   p=S.head;
   while(p)
   {
     q=p->next;
     free(p);
     p=q;
   }
   S.head=NULL;
   S.tail=NULL;
   S.curlen=0;
   return OK;
 }

 Status Concat(LString &T,LString S1,LString S2)
 { // 用T返回由S1和S2聯(lián)接而成的新串
   LString a1,a2;
   InitString(a1);
   InitString(a2);
   StrCopy(a1,S1);
   StrCopy(a2,S2);
   T.curlen=S1.curlen+S2.curlen;
   T.head=a1.head;
   a1.tail->next=a2.head;
   T.tail=a2.tail;
   return OK;
 }

 Status SubString(LString &Sub, LString S,int pos,int len)
 { // 用Sub返回串S的第pos個字符起長度為len的子串。
   // 其中,1≤pos≤StrLength(S)且0≤len≤StrLength(S)-pos+1
   Chunk *p,*q;
   int i,k,n,flag=1;
   if(pos<1||pos>S.curlen||len<0||len>S.curlen-pos+1)
     return ERROR;
   n=len/CHUNKSIZE; // 生成空的Sub串
   if(len%CHUNKSIZE)
     n++; // n為塊的個數(shù)
   p=new Chunk;
   Sub.head=p;
   for(i=1;i<n;i++)
   {
     q=new Chunk;
     p->next=q;
     p=q;
   }
   p->next=NULL;
   Sub.tail=p;
   Sub.curlen=len;
   for(i=len%CHUNKSIZE;i<CHUNKSIZE;i++)
     *(p->ch+i)=blank; // 填充Sub尾部的多余空間
   q=Sub.head; // q指向Sub串即將復(fù)制的塊
   i=0; // i指示即將復(fù)制的字符在塊中的位置
   p=S.head; // p指向S串的當(dāng)前塊
   n=0; // n指示當(dāng)前字符在串中的序號
   while(flag)
   {
     for(k=0;k<CHUNKSIZE;k++) // k指示當(dāng)前字符在塊中的位置
       if(*(p->ch+k)!=blank)
       {
         n++;
         if(n>=pos&&n<=pos+len-1) // 復(fù)制
         {
           if(i==CHUNKSIZE)
           { // 到下一塊
             q=q->next;
             i=0;
           }
           *(q->ch+i)=*(p->ch+k);
           i++;
           if(n==pos+len-1) // 復(fù)制結(jié)束
           {
             flag=0;
             break;
           }
         }
       }
     p=p->next;
   }
   return OK;
 }

 int Index(LString S,LString T,int pos)
 { // T為非空串。若主串S中第pos個字符之后存在與T相等的子串,
   // 則返回第一個這樣的子串在S中的位置,否則返回0
   int i,n,m;
   LString sub;
   if(pos>=1&&pos<=StrLength(S)) // pos滿足條件
   {
     n=StrLength(S); // 主串長度
     m=StrLength(T); // T串長度
     i=pos;
     while(i<=n-m+1)
     {
       SubString(sub,S,i,m); // sub為從S的第i個字符起,長度為m的子串
       if(StrCompare(sub,T)!=0) // sub不等于T
         ++i;
       else
         return i;
     }
   }
   return 0;
 }

 void Zip(LString &S)
 { // 壓縮串(清除塊中不必要的填補空余的字符)。加
   int j,n=0;
   Chunk *h=S.head;
   char *q;
   q=(char*)malloc((S.curlen+1)*sizeof(char));
   while(h) // 將LString類型的字符串轉(zhuǎn)換為char[]類型的字符串
   {
     for(j=0;j<CHUNKSIZE;j++)
       if(*(h->ch+j)!=blank)
       {
         *(q+n)=*(h->ch+j);
         n++;
       }
     h=h->next;
   }
   *(q+n)=0; // 串結(jié)束符
   ClearString(S); // 清空S
   StrAssign(S,q); // 重新生成S
 }

 Status StrInsert(LString &S,int pos,LString T)
 { // 1≤pos≤StrLength(S)+1。在串S的第pos個字符之前插入串T
   int i,j,k;
   Chunk *p,*q;
   LString t;
   if(pos<1||pos>StrLength(S)+1) // pos超出范圍
     return ERROR;
   StrCopy(t,T); // 復(fù)制T為t
   Zip(S); // 去掉S中多余的填補空余的字符
   i=(pos-1)/CHUNKSIZE; // 到達插入點要移動的塊數(shù)
   j=(pos-1)%CHUNKSIZE; // 到達插入點在最后一塊上要移動的字符數(shù)
   p=S.head;
   if(pos==1) // 插在S串前
   {
     t.tail->next=S.head;
     S.head=t.head;
   }
   else if(j==0) // 插在塊之間
   {
     for(k=1;k<i;k++)
       p=p->next; // p指向插入點的左塊
     q=p->next; // q指向插入點的右塊
     p->next=t.head; // 插入t
     t.tail->next=q;
     if(q==NULL) // 插在S串后
       S.tail=t.tail; // 改變尾指針
   }
   else // 插在一塊內(nèi)的兩個字符之間
   {
     for(k=1;k<=i;k++)
       p=p->next; // p指向插入點所在塊
     q=new Chunk; // 生成新塊
     for(i=0;i<j;i++)
       *(q->ch+i)=blank; // 塊q的前j個字符為填補空余的字符
     for(i=j;i<CHUNKSIZE;i++)
     {
       *(q->ch+i)=*(p->ch+i); // 復(fù)制插入點后的字符到q
       *(p->ch+i)=blank; // p的該字符為填補空余的字符
     }
     q->next=p->next;
     p->next=t.head;
     t.tail->next=q;
   }
   S.curlen+=t.curlen;
   Zip(S);
   return OK;
 }

 Status StrDelete(LString &S,int pos,int len)
 { // 從串S中刪除第pos個字符起長度為len的子串
   int i=1; // 當(dāng)前字符是S串的第i個字符(1~S.curlen)
   Chunk *p=S.head; // p指向S的當(dāng)前塊
   int j=0; // 當(dāng)前字符在當(dāng)前塊中的位序(0~CHUNKSIZE-1)
   if(pos<1||pos>S.curlen-len+1||len<0) // pos,len的值超出范圍
     return ERROR;
   while(i<pos) // 找第pos個字符
   {
     while(*(p->ch+j)==blank) // 跳過填補空余的字符
     {
       j++;
       if(j==CHUNKSIZE) // 應(yīng)轉(zhuǎn)向下一塊
       {
         p=p->next;
         j=0;
       }
     }
     i++; // 當(dāng)前字符是S的第i個字符
     j++;
     if(j==CHUNKSIZE) // 應(yīng)轉(zhuǎn)向下一塊
     {
       p=p->next;
       j=0;
     }
   }; // i=pos,*(p->ch+j)為S的第pos個有效字符
   while(i<pos+len) // 刪除從第pos個字符起到第pos+len-1個字符
   {
     while(*(p->ch+j)==blank) // 跳過填補空余的字符
     {
       j++;
       if(j==CHUNKSIZE) // 應(yīng)轉(zhuǎn)向下一塊
       {
         p=p->next;
         j=0;
       }
     }
     *(p->ch+j)=blank; // 把字符改成填補空余的字符來"刪除"第i個字符
     i++; // 到下一個字符
     j++;
     if(j==CHUNKSIZE) // 應(yīng)轉(zhuǎn)向下一塊
     {
       p=p->next;
       j=0;
     }
   };
   S.curlen-=len; // 串的當(dāng)前長度
   return OK;
 }

 Status Replace(LString &S,LString T,LString V)
 { // 初始條件: 串S,T和V存在,T是非空串(此函數(shù)與串的存儲結(jié)構(gòu)無關(guān))
   // 操作結(jié)果: 用V替換主串S中出現(xiàn)的所有與T相等的不重疊的子串
   int i=1; // 從串S的第一個字符起查找串T
   if(StrEmpty(T)) // T是空串
     return ERROR;
   do
   {
     i=Index(S,T,i); // 結(jié)果i為從上一個i之后找到的子串T的位置
     if(i) // 串S中存在串T
     {
       StrDelete(S,i,StrLength(T)); // 刪除該串T
       StrInsert(S,i,V); // 在原串T的位置插入串V
       i+=StrLength(V); // 在插入的串V后面繼續(xù)查找串T
     }
   }while(i);
   return OK;
 }

 void StrPrint(LString T)
 { // 輸出字符串T。另加
   int i=0,j;
   Chunk *h;
   h=T.head;
   while(i<T.curlen)
   {
     for(j=0;j<CHUNKSIZE;j++)
       if(*(h->ch+j)!=blank) // 不是填補空余的字符
       {
         printf("%c",*(h->ch+j));
         i++;
       }
     h=h->next;
   }
   printf("\n");
 }

 void DestroyString()
 { // 塊鏈類型的字符串無法銷毀
 }

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人白浆超碰人人人人| 精品国产凹凸成av人导航| 欧美欧美欧美欧美首页| 精品人伦一区二区色婷婷| 久久精品无码一区二区三区| 国产亚洲欧美色| 亚洲免费在线观看| 免费成人av资源网| 成人深夜福利app| 在线电影一区二区三区| 日韩午夜在线播放| 亚洲欧美在线视频观看| 麻豆91在线看| 91视频一区二区三区| 精品粉嫩超白一线天av| 亚洲黄色片在线观看| 五月婷婷激情综合| 成人不卡免费av| 久久综合999| 天天色图综合网| 色欧美乱欧美15图片| 久久综合一区二区| 视频一区二区三区中文字幕| 色综合视频在线观看| 国产日韩综合av| 麻豆精品在线视频| 91精品国产aⅴ一区二区| 亚洲欧美日韩久久精品| 国产酒店精品激情| 欧美videofree性高清杂交| 亚洲一区二区三区国产| 色综合久久久久久久久久久| 国产片一区二区三区| 国产一区激情在线| 一区二区三区资源| 色综合久久久久久久| 国产精品毛片大码女人| 国产一区二区福利视频| 久久毛片高清国产| 国产xxx精品视频大全| 日韩一区二区三| 国产精品中文字幕欧美| 天天综合日日夜夜精品| 精品少妇一区二区三区在线播放 | 国产精品2024| 国产精品久久久久精k8| 色综合久久综合网| 亚洲欧洲av一区二区三区久久| 国产成人精品影院| 亚洲人成在线播放网站岛国| 成人av电影在线网| 亚洲激情校园春色| 欧美喷潮久久久xxxxx| 老司机午夜精品99久久| 国产精品无码永久免费888| 91视视频在线直接观看在线看网页在线看 | 久久99热这里只有精品| 久久久久久久一区| 色婷婷狠狠综合| 久久精品国产**网站演员| 中文欧美字幕免费| 欧美美女一区二区在线观看| 韩国女主播一区| 国产精品久久久久久久浪潮网站| 在线亚洲精品福利网址导航| 国产在线播精品第三| 亚洲一区二区三区精品在线| 国产亚洲婷婷免费| 精品视频全国免费看| 国产在线精品一区二区不卡了| 一区二区三区欧美视频| 欧美不卡一区二区| 欧美艳星brazzers| 99国产精品久久久久| 国产伦精一区二区三区| 日韩影视精彩在线| 亚洲乱码日产精品bd| 国产精品久久久久久久午夜片| 精品国产乱码久久久久久浪潮| 欧美伊人精品成人久久综合97 | 欧美日韩免费观看一区二区三区| 国产一区二区三区日韩| 视频一区二区中文字幕| 亚洲电影第三页| 亚洲精品国产无天堂网2021 | 国产69精品久久久久毛片| 五月天网站亚洲| 一区二区三区四区不卡视频| 国产精品久久久久三级| 国产精品久久久久影院亚瑟| 欧美国产日韩a欧美在线观看| 日韩精品一区二区三区蜜臀| 4438x成人网最大色成网站| 欧美性做爰猛烈叫床潮| 欧美在线观看你懂的| 欧美性猛片aaaaaaa做受| 一本一道久久a久久精品 | 亚洲国产一区二区三区青草影视| 亚洲久草在线视频| 亚洲小说欧美激情另类| 日韩av在线发布| 九九国产精品视频| www.成人网.com| 日本道精品一区二区三区| 欧美日韩一卡二卡三卡| 日韩精品一区二| 日韩成人dvd| 日韩国产欧美三级| 国产精品123区| 色综合天天综合| 制服丝袜亚洲精品中文字幕| 欧美mv日韩mv亚洲| 中文字幕一区二区三区乱码在线| 亚洲女同ⅹxx女同tv| 天堂在线一区二区| 国产精品一区二区久久精品爱涩 | 欧美一级精品在线| 日本一区二区高清| 亚洲成人综合网站| 国产成人精品三级麻豆| 欧美日韩色一区| 国产日韩av一区二区| 午夜久久久久久| 91在线观看视频| 2019国产精品| 美女久久久精品| 欧美色窝79yyyycom| 日本三级亚洲精品| 色就色 综合激情| 国产精品久久久久永久免费观看| 蜜臀久久99精品久久久久宅男| 在线亚洲免费视频| 国产精品美女视频| 国产精品888| 久久久精品黄色| 国产伦精品一区二区三区免费迷| 欧美精品在线观看一区二区| 亚洲综合无码一区二区| 91在线精品一区二区| 国产欧美精品一区| 国产一区高清在线| 久久日韩粉嫩一区二区三区| 久久se精品一区二区| 91超碰这里只有精品国产| 亚洲色图.com| 在线观看精品一区| 一区二区不卡在线视频 午夜欧美不卡在 | 日本成人在线一区| 欧美一区二区三区的| 午夜精品一区二区三区免费视频 | 毛片av一区二区| 欧美成人精品福利| 国产在线播精品第三| 欧美mv和日韩mv的网站| 开心九九激情九九欧美日韩精美视频电影| 欧美性三三影院| 午夜精品久久久久久久99水蜜桃| 欧美三级电影在线看| 裸体一区二区三区| 亚洲国产高清不卡| 色狠狠综合天天综合综合| 一区二区三区波多野结衣在线观看| 欧美在线观看你懂的| 美女性感视频久久| 亚洲色欲色欲www在线观看| 欧洲av在线精品| 久久精品国产免费| 成人欧美一区二区三区黑人麻豆| 欧美无乱码久久久免费午夜一区| 麻豆国产91在线播放| 一区在线观看视频| 欧美一区中文字幕| av亚洲精华国产精华精华| 日韩电影在线观看电影| 国产片一区二区| 欧美人牲a欧美精品| 成人中文字幕合集| 免费视频一区二区| 亚洲欧洲综合另类| 日韩精品一区二区三区在线播放| 99久久伊人精品| 国产麻豆精品theporn| 亚洲va欧美va天堂v国产综合| 国产三级三级三级精品8ⅰ区| 欧美日精品一区视频| 不卡免费追剧大全电视剧网站| 五月婷婷久久丁香| 一区二区三区四区中文字幕| 精品国产乱码久久久久久久 | 国产精品高潮呻吟久久| 精品精品欲导航| 日韩写真欧美这视频| 欧洲国内综合视频| 91久久精品日日躁夜夜躁欧美| 国产精品综合久久| 精品亚洲国产成人av制服丝袜| 日本系列欧美系列| 免费人成网站在线观看欧美高清| 亚洲成国产人片在线观看| 一区二区三区在线看|