您的位置:首页 > 编程语言 > C语言/C++

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;
}
链式构造字符串头文件:

#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");
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: