串结构的特殊性------结构中的每个数据元素是一个字符,则用链表存储串值时,存在一个“结点大小”的问题,即每个结点可以存放一个字符,也可以存放多个字符。
/* c4-3.h 串的块链存储表示 */
#define CHUNK_SIZE 4 /* 可由用户定义的块大小 */
typedef struct Chunk
{
char ch[CHUNK_SIZE];
struct Chunk *next;
}Chunk;
typedef struct
{
Chunk *head,*tail; /* 串的头和尾指针 */
int curlen; /* 串的当前长度 */
}LString;


/* bo4-3.c 串采用块链存储结构(由c4-3.h定义)的基本操作(15个) */
#define DestroyString ClearString /* DestroyString()与ClearString()作用相同 */
void InitString(LString *T)
{ /* 初始化(产生空串)字符串T。另加 */
(*T).curlen=0;
(*T).head=(*T).tail=NULL;
}
Status StrAssign(LString *T,char *chars)
{ /* 生成一个其值等于chars的串T(要求chars中不包含填补空余的字符)。成功返回OK,否则返回ERROR */
int i,j,k,m;
Chunk *p,*q;
i=strlen(chars); /* i为串的长度 */
if(!i||strchr(chars,blank)) /* 串长为0或chars中包含填补空余的字符 */
return ERROR;
(*T).curlen=i;
j=i/CHUNK_SIZE; /* j为块链的结点数 */
if(i%CHUNK_SIZE)
j++;
for(k=0;k<j;k++)
{
p=(Chunk*)malloc(sizeof(Chunk)); /* 生成块结点 */
if(!p) /* 生成块结点失败 */
return ERROR;
for(m=0;m<CHUNK_SIZE&&*chars;m++) /* 给块结点的数据域赋值 */
*(p->ch+m)=*chars++;
if(k==0) /* 第一个链块 */
(*T).head=q=p; /* 头指针指向第一个链块 */
else
{
&nb

这段内容描述了如何使用块链存储结构来实现串(字符串)的操作,包括初始化、赋值、转换为字符数组、复制、比较、获取长度、清空、连接、截取、插入、删除和替换。代码提供了相关函数的实现细节,如StrAssign、ToChars、StrCopy等,这些函数实现了C语言中串的各种基本操作,并特别考虑了块大小(CHUNK_SIZE)对存储的影响。
最低0.47元/天 解锁文章
1202

被折叠的 条评论
为什么被折叠?



