c语言 用链表构造字符串
2016-06-08 22:50
288 查看
今天一个同学问我怎么用链表构造字符串 然后我简单的说了下思路 ...不过他还是没写出来
因为数据结构在讲字符串的时候,老师主要讲了顺序构造字符串 链式构造字符串缺点太多 自己也没有看 然后自己今天写了一下 支持动态扩展
主文件:
#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;
}
链式构造字符串头文件:
#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");
}
因为数据结构在讲字符串的时候,老师主要讲了顺序构造字符串 链式构造字符串缺点太多 自己也没有看 然后自己今天写了一下 支持动态扩展
主文件:
#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");
}
相关文章推荐
- L1-011. A-B
- 一个web服务器并发测试工具 (含源码)
- c语言实例之函数副本机制
- c++:静态函数成员与静态数据成员
- c++:静态函数成员与静态数据成员
- 【C++】Visual Studio 2012 MFC中添加OnTimer时间函数
- 深入探索c++虚函数继承模型
- C++第二次上机5-5
- c++ string函数精讲
- 哈夫曼树数据机构的建立及哈夫曼编码与解码的C++实现
- 类的继承与派生(Shape例子派生Rectangle和Circle,Rectangle派生出Square)
- C语言char*字符串数组和unsigned char[]数组的相互转换
- C++符号优先级
- 层序遍历二叉树(C语言+循环队列)
- GDI+ 如何绘制圆角矩形(vc++)
- 【C/C++】枚举类型举例
- error LNK2019
- C++构造函数和析构函数
- C++实现多线程全局内存池(性能优化)
- 264. Ugly Number II