首页 > 代码库 > 串的堆分配存储表示与实现--自己写数据结构

串的堆分配存储表示与实现--自己写数据结构

      本次实现的数据结构是关于串的表示与实现,首先讲串的堆分配存储表示与实现,后面的博客将贴出串的另外数据结构的表示和实现

heapstring.h文件存放数据结构体,如下

#ifndef _HEAPSRING_H_#define _HEAPSRING_H_typedef struct _HString{    char *ch;    int length;}HString,*pHString;pHString init_null_string(void);pHString init_heap_string(int length);int init_char_string(pHString ps,char* chead);void print_string(pHString ps);int copy_string(pHString dstring,pHString sstring);int concat_string(pHString dps,pHString ps1,pHString ps2) ; #endif 


 

heapstring.c文件存放数据结构的实现(只实现简单的,给大家开个头,后面复杂一些的大家可以自己编写):

/*******************************时间:2014.12.12作者:XIAO_PING_PING内容:串的堆分配存储表示与实现功能:学习些数据结构 ********************************/#include <string.h>#include <stdlib.h>#include "heapstring.h"/*生成一个空串*/pHString init_null_string(void){    pHString pstring;    pstring = (HString *)malloc(sizeof(HString));        pstring->ch = NULL;    pstring->length = 0;         return pstring;       } /*初始化一个给定长度的串*/pHString init_heap_string(int length){    pHString pstring;    //char* pch;        pstring = (HString *)malloc(sizeof(HString));    pstring->ch = (char *)malloc(length * sizeof(char));    pstring->length = length;        return pstring;}/*生成一个指定字符串的串*/int init_char_string(pHString ps,char* chead){    //pHString pstring;         int size = strlen(chead);    int i;        if(NULL != ps->ch)    {        free(ps->ch);            }          ps->ch = (char *)malloc(size * sizeof(char));    for(i = 0;i < size;i++)    {        ps->ch[i] = chead[i];               //*(&(ps->ch[0]) + i) = chead[i];     }    //ps->ch[i] = ' ';     ps->length = size;        return 0;  } /*复制字符串*/int copy_string(pHString dstring,pHString sstring){    int size = sstring->length;//strlen(sstring->ch);    int i;        if(NULL == sstring->ch && 0 == sstring->length)    {        printf("源串内容为空\n");        return -1;           }        if(NULL != dstring->ch)    {        free(dstring->ch);            }          dstring->ch = (char *)malloc(size * sizeof(char));    for(i = 0;i < size;i++)    {        dstring->ch[i] = sstring->ch[i];               //*(&(ps->ch[0]) + i) = chead[i];     }    dstring->length = size;} /*拼接字符串*/int concat_string(pHString dps,pHString ps1,pHString ps2) {    int size = ps1->length + ps2->length;    int i;        if(0 == size)    {        printf("无拼接内容\n");        return -1;         }        if(NULL != dps->ch)    {        free(dps->ch);            }           dps->ch = (char *)malloc(size * sizeof(char));    for(i = 0;i < ps1->length;i++)    {        dps->ch[i] = ps1->ch[i];           }    for(i = 0;i < ps2->length;i++)    {        dps->ch[ps1->length + i] = ps2->ch[i];           }    dps->length = size;        return 0; }/*打印串里面的字符串*/void print_string(pHString ps){    int i;        for(i = 0;i < ps->length;i++)    {        printf("%c",ps->ch[i]);     }    }
 
测试文件test.c如下:
<pre class="objc" name="code">#include <string.h>#include <stdlib.h>#include <conio.h>#include "heapstring.h"int main(){    pHString p,np,cp;       char *ch = "helloword!";        p = init_null_string();    init_char_string(p,ch);     printf("打印字符串一:");    print_string(p);    printf("\n");        np = init_null_string();    copy_string(np,p);    printf("打印复制的字符串二:");     print_string(np);    printf("\n");        cp = init_null_string();    concat_string(cp,p,np);    printf("打印拼接一和二的字符串:");     print_string(cp);    printf("\n");        getch();    return 0;}


运行结果如下:

串的堆分配存储表示与实现--自己写数据结构