// 串.cpp: 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include "stdio.h"
#include "malloc.h"
#define MAXSIZ 256
typedef struct seqstring {
char data;
struct seqstring *next;
}SeqString;
//初始化
SeqString *Init() {
SeqString *S;
S = (SeqString*)malloc(sizeof(seqstring)); //头结点
SeqString *p;
p = (SeqString*)malloc(sizeof(seqstring)); //插入结点
p->data = '\0'; //放入'\n' 元素表示结尾
S->next = p;
return S;
}
//写入
int Add(SeqString *S,char x) {
SeqString *p;
p = (SeqString *)malloc(sizeof(seqstring));
p->data = x;
p->next = S->next;
S->next = p;
return 1;
}
//打印
int Prints(SeqString *S) {
SeqString *p;
p = S->next;
while (p->data!='\0') {
printf("%5c\n", p->data);
p = p->next;
}
return 1;
}
//copy
int Copys(SeqString *S, SeqString *S1) {
SeqString *p; //设定一个空节点 用来放copy进来的东西
SeqString *t; //把它当做S1
t = S1->next;
while (t->data!='\0') {
p = (SeqString *)malloc(sizeof(seqstring)); //申请一个空间
p->data = t->data;
p->next = S->next;
S->next = p;
t = t->next; //需要copy的结点往后挪动一个
}
return 1;
}
//子串
int ZiChuan(SeqString *S, int i, int length) {
SeqString *p;
p = S->next;
//找到位置
int t = i;
while (t) {
p = p->next;
t--;
}
for (; i < length; i++) {
printf("%6c",p->data);
p = p->next;
}
return 1;
}
int main()
{
//写入S
SeqString *S;
S = Init();
Add(S, 'a'); Add(S, 'b');
Add(S, 'c'); Add(S, 'd');
printf("输出S\n\n");
Prints(S);
//写入S1
SeqString *S1;
S1 = Init();
Add(S1, 'e'); Add(S1, 'f');
Add(S1, 'g'); Add(S1, 'h');
printf("输出S1\n\n");
Prints(S1);
//将s1加在s前面
printf("打印出来两个相加的\n");
Copys(S, S1);
Prints(S);
//子串
printf("S的1-5子串为\n");
ZiChuan(S,1,5);
return 0;
}