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

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

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
/* 数据结构 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;

文档评论(0)

wx171113 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档