




已阅读5页,还剩7页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
数据结构C语言版 串的堆分配存储表示与实现数据结构C语言版 串的堆分配存储表示与实现.txt一个人一盒烟一台电脑过一天一个人一瓶酒一盘蚕豆过一宿。永远扛不住女人的小脾气,女人永远抵不住男人的花言巧语。/*数据结构C语言版 串的堆分配存储表示与实现P76编译环境:Dev-C+ 4.9.9.2日期:2011年2月8日 */ #include #include #include typedef structchar *ch;/ 若是非空串,则按串长分配存储区,否则ch为NULL int length; / 串长度 HString;/ 初始化(产生空串)字符串Tvoid InitString(HString *T)(*T).length=0;(*T).ch=NULL;/ 生成一个其值等于串常量chars的串T int StrAssign(HString *T, char *chars)int i,j;if(*T).ch)free(*T).ch); / 释放T原有空间 i = strlen(chars); / 求chars的长度i if(!i) / chars的长度为0 (*T).ch = NULL;(*T).length = 0;else/ chars的长度不为0 (*T).ch = (char*)malloc(i*sizeof(char); / 分配串空间 if(!(*T).ch) / 分配串空间失败 exit(0);for(j = 0; j i; j+) / 拷贝串 (*T).chj = charsj;(*T).length = i;return 1;/ 由串S复制得串Tint StrCopy(HString *T,HString S)int i; if(*T).ch)free(*T).ch); / 释放T原有空间 (*T).ch=(char*)malloc(S.length*sizeof(char); / 分配串空间 if(!(*T).ch) / 分配串空间失败 exit(0);for(i=0;iT,则返回值0;若S=T,则返回值=0;若ST,则返回值0int StrCompare(HString S,HString T)int i;for(i=0;iS.length & iT.length;+i)if(S.chi != T.chi)return S.chi-T.chi;return S.length-T.length;/ 返回S的元素个数,称为串的长度 int StrLength(HString S)return S.length;/ 将S清为空串 int ClearString(HString *S)if(*S).ch)free(*S).ch);(*S).ch=NULL;(*S).length=0;return 1;/ 用T返回由S1和S2联接而成的新串int Concat(HString *T,HString S1,HString S2)int i;if(*T).ch)free(*T).ch); / 释放旧空间 (*T).length=S1.length+S2.length;(*T).ch=(char *)malloc(*T).length*sizeof(char);/分配新串的长度if(!(*T).ch)exit(0);for(i=0;iS1.length;i+)/将S1接到新串T的后面(*T).chi=S1.chi;for(i=0;iS2.length;i+)/将S2接到新串T的后面(*T).chS1.length+i=S2.chi;return 1;/ 用Sub返回串S的第pos个字符起长度为len的子串。int SubString(HString *Sub, HString S,int pos,int len)int i;if(posS.length|lenS.length-pos+1)return 0;if(*Sub).ch)free(*Sub).ch); / 释放旧空间 if(!len) / 空子串 (*Sub).ch=NULL;(*Sub).length=0;else / 完整子串 (*Sub).ch=(char*)malloc(len*sizeof(char);if(!(*Sub).ch)exit(0);for(i=0;i0)n=StrLength(S);m=StrLength(T);i=pos;while(i=n-m+1)/从第i个位置开始求与T等长的子串,循环直到找到SubString(&sub,S,i,m);/从第i个位置开始求得子串if(StrCompare(sub,T)!=0)/将求得的子串与T对比,若不等则i+i;elsereturn i;return 0;/ 算法4.4/ 在串S的第pos个字符之前插入串Tsint StrInsert(HString *S,int pos,HString T) int i;if(pos(*S).length+1) / pos不合法 return 0;if(T.length) / T非空,则重新分配空间,插入T (*S).ch = (char*)realloc(*S).ch, (*S).length+T.length)*sizeof(char);if(!(*S).ch)exit(0);for(i=(*S).length-1;i=pos-1;-i) / 为插入T而腾出位置 (*S).chi+T.length=(*S).chi; for(i=0;iT.length;i+)(*S).chpos-1+i=T.chi; / 插入T (*S).length+=T.length;return 1;/ 从串S中删除第pos个字符起长度为len的子串int StrDelete(HString *S,int pos,int len)int i;if(*S).lengthpos+len-1)exit(0);for(i=pos-1;i=(*S).length-len;i+)(*S).chi=(*S).chi+len;(*S).length-=len;(*S).ch=(char*)realloc(*S).ch,(*S).length*sizeof(char);return 1;/ 用V替换主串S中出现的所有与T相等的不重叠的子串int Replace(HString *S,HString T,HString V)int i=1; / 从串S的第一个字符起查找串T if(StrEmpty(T) / T是空串 return 0;doi=Index(*S,T,i); / 结果i为从上一个i之后找到的子串T的位置 if(i) / 串S中存在串T StrDelete(S,i,StrLength(T); / 删除该串T StrInsert(S,i,V); / 在原串T的位置插入串V i+=StrLength(V); / 在插入的串V后面继续查找串T while(i);return 1;void DestroyString()/ 堆分配类型的字符串无法销毁 / 输出T字符串void StrPrint(HString T)int i;for(i=0;iT.length;i+)printf(%c,T.chi);printf(n);int main()int i;char c,*p=God bye!,*q=God luck!;HString t,s,r;/ HString类型必需初始化InitString(&t); InitString(&s);InitString(&r);StrAssign(&t,p);printf(串t为: );StrPrint(t);printf(串长为%d 串空否?%d(1:空 0:否)n,StrLength(t),StrEmpty(t);StrAssign(&s,q);printf(串s为: );StrPrint(s);i=StrCompare(s,t);if(i0)c=;printf(串s%c串tn,c);Concat(&r,t,s);printf(串t联接串s产生的串r为: );StrPrint(r);StrAssign(&s,oo);printf(串s为: );StrPrint(s);StrAssign(&t,o);printf(串t为: );StrPrint(t);Replace(&r,t,s);printf(把串r中和串t相同的子串用串s代替后,串r为:n);StrPrint(r);ClearString(&s);printf(串s清空后,串长为%d 空否?%d(1:空 0:否)n,StrLength(s),StrEmpty(s);SubString(&s,r,6,4);printf(串s为从串r的第6个字符起的4个字符,长度为%d 串s为: ,s.length);StrPrint(s);StrCopy(&t,r);printf(复制串t为串r,串t为: );StrPrint(t);StrInsert(&t,6,s);printf(在串t的第6个字符前插入串s后,串t为: );StrPrint(t);StrDelete(&t,1,5);printf(从串t的第1个字符起删除5个字符后,串t为: );StrPrint(t);printf(%d是从串t的第1个字符起,和串s相同的第1个子串的位置n,Index(t,s,1);printf(%d是从串t的第2个字符起,和串s相同的第1个子串的位置n,Index(t,s,2);system(pause);return 0;/*输出效果: 串t为: God bye!串长为8 串空否?0(1:空 0:否)串s为: God luck!串s串t串t联接串s产生的串r为: God bye!God luck!串s为: oo串t为: o把串r中和串t相同的子串用串s代替后,串r为:Good bye!Good luck!串s清空后,串长为0 空否?1(1:空 0:否)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年方大炭素新材料科技股份有限公司招聘127人笔试参考题库附带答案详解
- 2025年国网新源集团有限公司高校毕业生招聘(第二批)调剂笔试参考题库附带答案详解
- 2025年合肥公交集团有限公司驾驶员招聘180人笔试参考题库附带答案详解
- 2025年中国烟草总公司辽宁省公司人员招聘168人笔试参考题库附带答案详解
- 危险运输安全培训
- 2025内蒙古中材科技(锡林郭勒)风电叶片有限公司招聘32人笔试参考题库附带答案详解
- 危险品安全管理培训
- 地球运动与气候
- 危化安全员培训记录课件
- 嘉兴油车港安全生产培训课件
- 上海市静安区2022-2023学年高一下学期期末数学试题(解析版)
- TPM管理知识培训
- 2023年国家公务员考试申论真题及答案解析(地市级)
- 关于无梁楼盖和梁板式楼盖经济性的比较
- 第十四杂环化合物
- RB/T 306-2017汽车维修服务认证技术要求
- 《数学软件》课程教学大纲
- 《细胞工程学》考试复习题库(带答案)
- 粤教花城版小学音乐歌曲《哈哩噜》课件
- 第六讲:RCEP服务贸易与投资解读课件
- 展筋丹-中医伤科学讲义-方剂加减变化汇总
评论
0/150
提交评论