/**
* 实验题目:
* 实现链串各种基本运算的算法
* 实验内容:
* 编写程序,实现顺序串的各种基本运算,并在此基础上设计一个主程序完成如下功能:
* (1)建立串s="abcdefghefghijklmn"和串s1="xyz"
* (2)输出串s
* (3)输出串s的长度
* (4)在串s的第9个字符位置插入串s1而产生串s2
* (5)输出串s2
* (6)删除串s第2个字符开始的3个字符而产生串s2
* (7)输出串s2
* (8)将串s第2个字符开始的3个字符替换成串s1而产生串s2
* (9)输出串s2
* (10)提取串s的第2个字符开始的10个字符而产生串s3
* (11)输出串s3
* (12)将串s1和串s2连接起来而产生串s4
* (13)输出串s4
*/
#include <stdio.h>
#include <malloc.h>
typedef struct snode
{
char data;
struct snode *next;
}LiString;
/*---------------------------由串常量t创建串s-------------------------------*/
void StrAssign(LiString *&s, char t[]) // 指针的引用
{
int i; // 循环变量
LiString *r, *p;
s = (LiString *)malloc(sizeof(LiString)); // 创建头结点
s->next = NULL;
r = s; // r指向新创建的头结点
for(i = 0; t[i] != '\0'; i++)
{
p = (LiString *)malloc(sizeof(LiString)); // 创建数据结点p
p->data = t[i];
p->next = NULL;
r->next = p; // 将p结点插入到s结点之后
r = p;
}
}
/*---------------------------将串t复制到串s-------------------------------*/
void StrCopy(LiString *&s, LiString *t)
{
LiString *p = t->next;
LiString *q, *r;
s = (LiString *)malloc(sizeof(LiString)); // 创建头结点
s->next = NULL;
r = s;
while(p != NULL) // 将t的所有结点复制到s
{
q = (LiString *)malloc(sizeof(LiString)); // 创建数据结点
q->data = p->data;
q->next = NULL;
r->next = q;
r = q;
p = p->next;
}
}
/*---------------------------判断两个串s和t是否相同-------------------------------*/
int StrEqual(LiString *s, LiString *t)
{
LiString *p = s->next;
LiString *q = t->next;
while((p != NULL) && (q != NULL