void strassign(linkstrnode*& L, char str[]) {
linkstrnode* r, * s;
L = (linkstrnode*)malloc(sizeof(linkstrnode));
r = L;
for (int i = 0; str[i] != '\n'; i ) {
s = (linkstrnode*)malloc(sizeof(linkstrnode));
s->data[i] = str[i];
r->next = s;
r = s;
}
r->next = NULL;
}
销毁串
void destoryste(linkstrnode*& L) {
linkstrnode* r, * s;
r = L;
s = L->next;
while ( s != NULL ) {
free(r);
r = s;
s = r->next;
}
free(r);
}
复制串
void strcopy(linkstrnode*& t, linkstrnode* s) {
linkstrnode* p = s->next, * q, * r;
t = (linkstrnode*)malloc(sizeof(linkstrnode));
r = t;
while ( p != NULL ) {
q = (linkstrnode*)malloc(sizeof(linkstrnode));
q->data = p->data;
r->next = q;
r = q;
p = p->next;
}
r->next = NULL;
}
判断串相等
void strequal(linkstrnode* s, linkstrnode* t) {
linkstrnode* p = s->next, * q = t->next;
while ( p != NULL && q != NULL && p->data == q->data ) {
p = p->next;
q = q->next;
}
if ( p == NULL && q == NULL ) {
printf("两串相等\n");
}
else {
printf("两串不等\n");
}
}
求串长
int strlength(linkstrnode* s) {
int i = 0;
linkstrnode* p = s->next;
while (p != NULL) {
i ;
p = p->next;
}
return i;
}
串连接
linkstrnode* concat(linkstrnode* s, linkstrnode* t) {
linkstrnode* str, * p = s->next, * q, * r;
str = (linkstrnode*)malloc(sizeof(linkstrnode));
r = str;
while (p != NULL) {
q = (linkstrnode*)malloc(sizeof(linkstrnode));
q->data = p->data;
r->next = q;
r = q;
p = p->next;
}
p = t->next;
while (p!=NULL) {
q = (linkstrnode*)malloc(sizeof(linkstrnode));
q->data = p->data;
r->next = q;
r = q;
p = p->next;
}
r->next = NULL;
return str;
}
求子串
linkstrnode* substr(linkstrnode* s, int i, int j) {
int k;
linkstrnode* str, * p = s->next, * q, * r;
str = (linkstrnode*)malloc(sizeof(linkstrnode));
str->next = NULL;
r = str;
if ( i <= 0 || i > strlength(s) || j < 0 || i k - 1 > strlength(s)) {
return str;
}
for ( k = 0; k < i - 1; k ) {
p = p->next;
}
for ( k = 0; k <= j; k ) {
q = (linkstrnode*)malloc(sizeof(linkstrnode));
q->data = p->data;
r->next = q;
r = q;
p = p->next;
}
r->next = NULL;
return str;
}