概述
前言:
上一篇文章,博主写了顺序串的一些简单操作,串和之前我们学过的栈,队列,都是有链式的存储结构,因为顺序的存储总是有限的,而链式的存储是不需要我们定义大小的,要用多少就生成多少,不用就释放掉,确实在存储方面,链式存储有着很大的优点,这篇文章是需要和上一篇文章结合看的,因为里面有许多的逻辑,博主都是说看上一篇文章,哈哈哈偷个懒,接下来让我们来学习吧!!!????????????
每日一遍,要努力!!
1.理解链式串的逻辑,认识链式串的核心代码
串的链表存储结构与顺序存储结构类似也有紧缩和非紧缩存储结构的区别。插入、删除操作效率高;存储空间的利用率低;
链式串的建立的逻辑图
核心代码:
没什么难的代码,只是一些基础代码,只要链表学的好,看这个没什么问题
typedef struct Node//结构体
{
char data; //字符域
struct Node *next; //指针域,存放下一个结点的地址
}*LinkString;//指针结构体类型名
LinkString s1;//定义串指针
s=(LinkString)malloc(sizeof(Node));//分配内存
s->next=NULL;//最后一个指向NULL
q->data=p->data;//串结点之间的赋值
free(q);//释放结点
2.链式串的初始化和一些基本操作
链式串的最基本的初始化,判断空串,求长度。
LinkString CreateNullString() //链式串初始化操作
{
LinkString s;//定义第一个结点
s=(LinkString)malloc(sizeof(Node));//分配内存
if(s!=NULL) //判断是否分配成功,成功了就把指针域赋值NULL
s->next=NULL;
return s;
}
//判断链式串是否为空串
int iEmpty(LinkString s)//判断链式串s为空串
{
if(s->next==NULL)//s的指针域为空
return 1;
else
return 0;
}
//求链式串的长度length
int length(LinkString s)//求链式串的长度
{
LinkString p;
int n=0;
p=s->next;
while(p!=NULL)//遍历链式串
{
n++;//累加返回
p=p->next;//往下位移
}
return n;//返回计数变量的值
}
//输出操作
void print(LinkString s)//打印输出
{
LinkString p=s->next;
while(p!=NULL)
{
printf("%c",p->data);
p=p->next;
}
printf("n");
}
3.链式串的赋值操作
这个赋值操作就相当于单链表的尾插法,不是很难,博主也写了详细的注解
void Stringassign(LinkString s,char t[])//链式串尾插法赋值操作
{
LinkString p,q,r;
r=s; //r始终表示的是尾结点(最后一个非空节点,而不是最后一个NULL节点)。
q=s->next;
int i;
for(i=0;t[i]!='