//生成链串与求串长、串连接运算
#include <stdio.h>
#include <stdlib.h>
typedef struct snode
{
char data;
struct snode *next;
}LiString; //链串节点类型
void StrAssign(LiString **s, char str[]) //尾插法建立链串
{
LiString *p, *r;
int i;
*s = (LiString *)malloc(sizeof(LiString));//建立链串头节点
r = *s; //r 始终指向链串s 的尾节点
for (i = 0; str[i] != '\0'; i++) //将数组str 中的字符逐个转化为链串s 中的节点
{
p = (LiString *)malloc(sizeof(LiString));
p->data = str[i];
r->next = p;
r = p;
}
r->next = NULL; //将最终生成的链串s 尾节点的指针域置空
}
int StrLength(LiString *s) //求串长
{
int i = 0;
LiString *p = s->next; //使p 指向链串s 的第一个数据节点
while (p != NULL)
{
i++;
p = p->next;
}
return i; //返回串长度值
}
void StrCat(LiString *s, LiString *t) //将链串s 和链串t 连接成新的链串s
{
LiString *p, *q, *r, *str;
str = (LiString *)malloc(sizeof(LiString));
r = str; //r 指向链串str 的尾节点
p = t->next; //p 指向链串t 的第一个数据节点
while (p != NULL)
{
q = (LiString *)malloc(sizeof(LiString));
q->data = p->data;
r->next = q;
r = q;
p = p->next;
}
r->next = NULL; //链串str 中尾节点的指针域置空
//======================
p = s;
while (p->next != NULL) //寻找链串s 的尾节点
{
p = p->next;
}
p->next = str->next; //将链串str (保存着链串t 的串值)链到链串s 的尾节点之后
free(str); //回收链串str 的头节点(忘了可不好)
}
int main()
{
LiString *head1, *head2, *p;
char c1[20] = "ABCD", c2[10] = "abcd";
StrAssign(&head1, c1); //建立链串head1
StrAssign(&head2, c2); //建立链串head2
printf("The length of head1 is = %d\n", StrLength(head1)); //输出链串head1 的长度
StrCat(head1, head2); //将链串head1 和链串head2 连接成新的链串head1
p = head1->next; //p 指向连接后head1 的第一个节点
while (p != NULL)
{
printf("%2c", p->data);
p = p->next;
}
printf("\n");
return 0;
}
链串
最新推荐文章于 2022-10-23 22:54:37 发布