串的块链:就是将一串字符串分割拆开储存在链表里面,每个节点中可以存储多个单字节。
这是普通的链表每个节点存储一个字符:
下面是块链,每个节点存储多个字符:
下面是串的块链的写入和输出,每个节点存储3个字节的代码:
#include"stdio.h"
#include "stdlib.h"
#include "string.h"
typedef struct jiegou{ //定义结构体
char a[3]; //串的块链 数据域储存多个字符
struct jiegou *next;
}link; //利用typedef 将link代表创建结构
link *initnode(link *head,char *str) //创建串块链 一次完成创建
{
head = (link*)malloc(sizeof(link)); // 创建个首元结点 分配动态内存
head->next=NULL; //将节点指向空
link *temp=head; //定义个指针指向首元结点
int length=strlen(str); //计算输入的字符串长度
int num = length/3; //从输入的字符串长度判断要建立多少个节点 此代码用的是每个节点存储 3 个字符
if(length%3!=0) //如果遇到多出来 一两个字符的 就多建立个节点来存储
{
num++; //节点+1
}
int i,j;
for(i=0;i<num;i++) //此for循环代表 6个节点循环建立
{
for(j=0;j<3;j++) //此for循环代表 每个节点存储3个字符 将字符拆分带入节点
{
if(i*3+j<length){ //如果要代入的字符的数组下标在字符串的长度内
temp->a[j]=str[i*3+j]; //将字符带入
}
else
temp->a[j]='#'; //否则节点内多出来的空数组填入 #
}
if(i*3+j<length) //如果还在字符长度以内
{
link *newnode = (link*)malloc(sizeof(link)); //创建新节点分配动态内存
newnode->next=NULL; //新节点指向空
temp->next=newnode; //上一个节点指针temp指向新节点
temp=newnode; //将指针temp重新指向新节点
}
}
return head; //返回块链头结点
}
void printflink(link *head) //输出块链表
{
link *temp=head; //创建指针指向第一节点
int i;
while(temp) //当节点不为空时
{
for(i=0;i<3;i++){ //每个节点有3个字符要输出
printf("%c",temp->a[i]); //依次输出三次
}
temp=temp->next; //指针指向下个节点 遍历输出
}
}
int main()
{
link *head=NULL; //创建头结点
head=initnode(head,"data.biancheng.net"); //创建串块链 将字符串带入
printflink(head); //输出串块链
return 0;
}
运行结果:
分块显示