今天一个同学问我怎么用链表构造字符串 然后我简单的说了下思路 ...不过他还是没写出来
因为数据结构在讲字符串的时候,老师主要讲了顺序构造字符串 链式构造字符串缺点太多 自己也没有看 然后自己今天写了一下 支持动态扩展
主文件:
#include <stdio.h>
#include "ListString.h"
int main(){
char str[100]={'h','e','l','l','o',',','w','o','r','l','d','!'};
char dynamic_increase_str[100] = {'I',' ','a','m',' ','c','o','m','i','n','g','!'};
list_str ls;
ls = createNullListString();
print(createListString(ls,str));
print(createListString(ls,dynamic_increase_str));//动态增长
return 0;
}
链式构造字符串头文件:
#ifndef _ListString_H_
#define _ListString_H_
struct strnode;
typedef struct strnode* pstrnode;
struct strnode{
char c;
pstrnode link;
};
struct liststring{
int length;
pstrnode link;
};
typedef struct liststring* list_str;
list_str createNullListString();
list_str createListString(list_str lstr,char* str);
void print(list_str lstr);
#endif // _ListString_H_
链式构造字符串C文件:
#include "ListString.h"
#include <malloc.h>
#include <stdio.h>
list_str createNullListString(){
list_str lstr;
lstr = (list_str)malloc(sizeof(struct liststring));
if(lstr){
lstr->length = 0; //字符串长度
lstr->link = NULL;
}
else{
printf("Out of Space!\n");
}
return lstr;
}
list_str createListString(list_str lstr,char* str){
int i = 0;
list_str p = lstr;
pstrnode lc;
while(p->link) p=p->link; //动态扩展字符串
int length = strlen(str);
while(length--){
lc = (pstrnode)malloc(sizeof(struct strnode));
lc->c=str[i++];
lstr->length++; //字符串头结点存储字符串长度++
p->link = lc;
p = lc;
}
p->link = NULL;
return lstr;
}
void print(list_str lstr){ //打印字符串
pstrnode p = lstr->link;
while(p){
printf("%c ",p->c);
p = p->link;
}
printf("\n");
}