首页 > 代码库 > 串的堆分配存储表示与实现--自己写数据结构
串的堆分配存储表示与实现--自己写数据结构
本次实现的数据结构是关于串的表示与实现,首先讲串的堆分配存储表示与实现,后面的博客将贴出串的另外数据结构的表示和实现
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;}
运行结果如下:
串的堆分配存储表示与实现--自己写数据结构
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。