p->next=s head xt=q;/把串s插入到结点p和r之间 i//else t curlen+= s curlen;∥修改串长 i//STring Concat int find chan( Chunk*p, char c在某个块中查找字符c如找到则返回位置是第几 个字符如没找到则返回0 for(F0; K<CHUNKSIZE&&p->ch0=c; i++) if(i-CHUNKSIZE)return 0 else retur计+1; i//Find Char nt L string palindrome( LString Ly判断以块链结构存储的串L是否为回文序列, 是则返回1,否则返回 Init Stack(S); p= Shead: i=0k=1;指示元素在块中的下标k指示元素在整个序列中的序号 (从1开始) for(k=1; k<=S curlen; k++) ifk<= S curlen/2)Push(Sp->ch[j),∥将前半段的字符入串 else if(k>(Scurlen+ 1)2) Pop(Sc),/将后半段的字符与栈中的元素相匹配 ifp->ch[]=c) return0,∥失配 f(+i= CHUNKSIZE)/转到下一个元素当为块中最后一个元素时转到下 块 next etum1;∥成功匹配 M//STring_ Palindrome 4.24} p->next=s.head; s.tail->next=r; r->next=q; //把串 s 插入到结点 p 和 r 之间 }//else t.curlen+=s.curlen; //修改串长 s.curlen=0; }//LString_Concat int Find_Char(Chunk *p,char c)//在某个块中查找字符 c,如找到则返回位置是第几 个字符,如没找到则返回 0 { for(i=0;i<CHUNKSIZE&&p->ch[i]!=c;i++); if(i==CHUNKSIZE) return 0; else return i+1; }//Find_Char 4.23 int LString_Palindrome(LString L)//判断以块链结构存储的串 L 是否为回文序列, 是则返回 1,否则返回 0 { InitStack(S); p=S.head;i=0;k=1; //i 指示元素在块中的下标,k 指示元素在整个序列中的序号 (从 1 开始) for(k=1;k<=S.curlen;k++) { if(k<=S.curlen/2) Push(S,p->ch[i]); //将前半段的字符入串 else if(k>(S.curlen+1)/2) { Pop(S,c); //将后半段的字符与栈中的元素相匹配 if(p->ch[i]!=c) return 0; //失配 } if(++i==CHUNKSIZE) //转到下一个元素,当为块中最后一个元素时,转到下 一块 { p=p->next; i=0; } }//for return 1; //成功匹配 }//LString_Palindrome 4.24