#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define True 1
#define False 0
#define Overflow 0
/*堆串结构体*/
typedef struct
{
char *ch;
int len;
}HString;
/*堆串初始化函数*/
void InitHString(HString *s)
{
s->ch = NULL;
s->len = 0;
}
/*堆串赋值函数*/
int StrAssign(HString *s,char *tval)
{
int len;
int i = 0;
//判断s是否已有内容,有则释放
if(s->ch!=NULL)
free(s->ch);
//判断赋值的内容是否为空,为空则不赋值
len = strlen(tval);
if(len==0)
{
s->ch = NULL;
s->len = 0;
}
else
{
s->ch = (char *)malloc(len*sizeof(char));
//刚申请的空间如果是空的话,即说明申请失败。
//即溢出
if(!s->ch)
exit(Overflow);
//赋值
for(i=0;i<len;i++)
{
s->ch[i] = tval[i];
}
s->len = len;
}
return True;
}
/*读字符串*/
void ReadHString(HString *s)
{
int i;
for(i=0;i<s->len;i++)
{
printf("%c",s->ch[i]);
}
printf("\n");
}
/*读字符串长度*/
int HStringlen(HString *s)
{
return s->len;
}
/*判断字符串是否为空*/
int IsEmpty(HString *s)
{
if(s->len==0)
return True;
else
return False;
}
/*字符串链接*/
int HStringConcat(HString *s,HString t1,HString t2)
{
int i;
//如果s->ch存在值,释放
if(s->ch)
free(s->ch);
s->ch = (char *)malloc((t1.len+t2.len)*sizeof(char));
if(!s->ch)
return Overflow;
for(i=0;i<(t1.len);i++)
{
s->ch[i] = t1.ch[i];
}
for(i=0;i<t2.len;i++)
{
s->ch[i+t1.len] = t2.ch[i];
}
s->len = t1.len+t2.len;
return True;
}
/*删除函数*/
int HStringDelte(HString *s,int pos,int len)
{
int i;
if(pos<0||pos>s->len)
{
printf("删除位置错误!");
return False;
}
if(pos+len>s->len)
{
printf("删除位置超出范围!");
return False;
}
for(i=0;i<len;i++)
{
s->ch[i+pos+1] = s->ch[i+pos+1+len];
}
s->len -= len;
//掌握realloc函数的用法
s->ch = (char *)realloc(s->ch,s->len*sizeof(char));
if(!s->ch)
return Overflow;
return True;
}
/*插入函数*/
int HStringInsert(HString *s,int pos,HString t)
{
int i;
s->len += t.len;
s->ch = (char *)realloc(s->ch,s->len*sizeof(char));
//移位
for(i=s->len-1;i>(s->len-pos-1);i--)
{
s->ch[i] = s->ch[i-t.len];
}
//赋值
for(i=pos;i<t.len+pos;i++)
{
s->ch[i] = t.ch[i-pos];
}
return True;
}
int main()
{
HString s,t;
InitHString(&s);
char *t1 = "abcd";
StrAssign(&s,t1);
ReadHString(&s);
//t
InitHString(&t);
char *t2 = "efgh";
StrAssign(&t,t2);
ReadHString(&t);
//插入
HStringInsert(&s,2,t);
ReadHString(&s);
return 0;
}
基于C的堆串实现
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
推荐阅读更多精彩内容
- 1 需求分析 1.1 系统目标 实现题目说所要求的三种匹配算法的算法设计,算法实现,程序能够稳定,准确的运行并实现...
- 二叉堆 堆有序定义:当一颗二叉树的每个节点都大于等于它的两个子节点时, 被称为堆有序。二叉堆定义: 二叉堆是一组能...
- 2017-06-27长江大学文理学院招生处 闻听三国事,每欲到荆州! 一本上长 江大学,成就创业报国梦想; 二本读...
