数据结构C语言版 串块链存储表示和实现.docVIP

数据结构C语言版 串块链存储表示和实现.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
/* 数据结构C语言版 串的块链存储表示和实现 P78 编译环境:Dev-C++ 4.9.9.2 日期:2011年2月12日 */ #include stdio.h #include malloc.h #include stdlib.h #include string.h // LString.h 串的块链存储表示 #define CHUNKSIZE 4 // 可由用户定义的块大小 typedef struct Chunk { char ch[CHUNKSIZE]; //块的数据域 struct Chunk *next; //块的指针域 }Chunk; typedef struct { Chunk *head, // 串的头指针 *tail; // 串的尾指针 int curlen; // 串的当前长度 }LString; char blank = #; // 全局变量,用于填补空余 // 初始化(产生空串)字符串T。 void InitString(LString *T) { (*T).curlen=0; (*T).head=NULL; (*T).tail=NULL; } // 生成一个其值等于chars的串T(要求chars中不包含填补空余的字符) // 成功返回1,否则返回0 int StrAssign(LString *T,char *chars) { int i,j,k,l; Chunk *p,*q; i=strlen(chars); // i为串的长度 if(!i||strchr(chars,blank)) // 串长为0或chars中包含填补空余的字符 return 0; (*T).curlen=i; j=i/CHUNKSIZE; // j为块链的结点数,块的个数 if(i%CHUNKSIZE) //不足一个块的,当成一个块即块数加1 j++; for(k=0;kj;k++) { p=(Chunk*)malloc(sizeof(Chunk)); if(!p) return 0; if(k==0) // 第一个链块 (*T).head=q=p; else { q-next=p; q=p; } for(l=0;lCHUNKSIZE*chars;l++) *(q-ch+l)=*chars++; if(!*chars) // 最后一个链块 { (*T).tail=q; q-next=NULL; for(;lCHUNKSIZE;l++) // 用填补空余的字符(blank=‘#’)填满链表 *(q-ch+l)=blank; } } return 1; } // 由串S复制得串T(连填补空余的字符一块拷贝) int StrCopy(LString *T,LString S) { Chunk *h=S.head,*p,*q; (*T).curlen=S.curlen; if(h) { p=(*T).head=(Chunk*)malloc(sizeof(Chunk)); *p=*h; // 复制1个结点 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 1; } else return 0; } // 若S为空串,则返回1,否则返回0 int StrEmpty(LString S) { if(S.curlen) // 非空 return 0; else return 1; } // 若ST,则返回值0;若S=T,则返回值=0;若ST,则返回值0 int StrCompare(LString S,LString T) { int i=0; // i为当前待比较字符在S,T串中的位置 Chunk *ps=S.head,*pt=T.head; // ps,pt分别指向S和T的待比较块 int js=0,jt=0; // js,jt分别指示S和T的待比较字符在块中的位序 while(iS.curleniT.curlen) { i++; // 分别找S和T的第i个字符 while(*(ps-ch+js)==blank) // 跳过填补空余的字符 { js++; if(js==C

文档评论(0)

hlfy68 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档