23、数据结构笔记之二十三串的堆分配实现
来源:互联网 发布:qq飞车 知乎 编辑:程序博客网 时间:2024/05/16 15:09
23、数据结构笔记之二十三串的堆分配实现
“人的价值是由自己决定的。”
接下去是看下如何用C实现串。
1. 定义
定义结构体如下,一种字符数组,一个表示数组的长度。以一组地址连续的存储单元存放串值字符序列,但是他们的存储空间是在程序执行过程中动态分配而得。
typedefstruct {
charch[MAXLEN];
intlen;
}SString;
2. 复制
将一个串内容复制到另一个结构体中区。
SString StrCopy(SString *s,SStringt){
inti;
for(i= 0;i <t.len;i++)s->ch[i]=t.ch[i];
s->len=t.len;
return *s;
}
3. 字符串显示
代码简单明了
void StrShow(constSStrings){
inti;
for(i= 0; i <s.len; ++i)
printf("%c",s.ch[i]);
printf("\n");
}
4. 字符串插入
在第一个字符串中的指定位置插入字符串。主要是要主要插入字符串的位置,及插入后是否超过了字符串最多支持的上限。
void StrInsert(SString *s,intpos,SStringt){
inti;
if(pos< 0 )pos = 0;
if(pos>s->len - 1)pos =s->len;
if(s->len+t.len <=MAXLEN){// 长度适中
for(i=s->len +t.len- 1;i >pos;i--)
s->ch[i]=s->ch[i -t.len];
for(i= 0;i <t.len;i++)s->ch[i+pos] =t.ch[i];
s->len+=t.len;
}
elseif(pos +t.len>MAXLEN) {// 长度超限1,从pos后不再有s的内容
for(i=pos;i <MAXLEN;++i)
s->ch[i]=t.ch[i -pos];
s->len=MAXLEN;
}
else {//长度超限2,从pos+ t.len后还有s的部分内容
for(i= MAXLEN - 1; i >=pos +t.len;--i)
s->ch[i]=s->ch[i -t.len];
for(i= 0; i <t.len; ++i)
s->ch[i+pos] =t.ch[i];
s->len=MAXLEN;
}
}
5. MAIN函数
int main() {
SStringstra = {"abcdefghijklmnopqrstuvwxyz",26};
SStringstrb = {"01234567890123456789",20},strc;
StrCopy(&strc,stra);
printf("串a:\n");
StrShow(stra);
printf("串b:\n");
StrShow(strb);
StrInsert(&stra,22,strb); //
printf("串a:\n");
StrShow(stra);
printf("串c:\n");
StrShow(strc);
return0;
}
结果如下图1所示:
6. 源码
#include<stdio.h>
#defineMAXLEN40
typedefstruct {
charch[MAXLEN];
intlen;
}SString;
void StrInsert(SString *s,intpos,SStringt){
inti;
if(pos< 0 )pos = 0;
if(pos>s->len - 1)pos =s->len;
if(s->len+t.len <=MAXLEN){// 长度适中
for(i=s->len +t.len- 1;i >pos;i--)
s->ch[i]=s->ch[i -t.len];
for(i= 0;i <t.len;i++)s->ch[i+pos] =t.ch[i];
s->len+=t.len;
}
elseif(pos +t.len>MAXLEN) {// 长度超限1,从pos后不再有s的内容
for(i=pos;i <MAXLEN;++i)
s->ch[i]=t.ch[i -pos];
s->len=MAXLEN;
}
else {//长度超限2,从pos+ t.len后还有s的部分内容
for(i= MAXLEN - 1; i >=pos +t.len;--i)
s->ch[i]=s->ch[i -t.len];
for(i= 0; i <t.len; ++i)
s->ch[i+pos] =t.ch[i];
s->len=MAXLEN;
}
}
SString StrCopy(SString *s,SStringt){
inti;
for(i= 0;i <t.len;i++)s->ch[i]=t.ch[i];
s->len=t.len;
return *s;
}
void StrShow(constSStrings){
inti;
for(i= 0; i <s.len; ++i)
printf("%c",s.ch[i]);
printf("\n");
}
int main() {
SStringstra = {"abcdefghijklmnopqrstuvwxyz",26};
SStringstrb = {"01234567890123456789",20},strc;
StrCopy(&strc,stra);
printf("串a:\n");
StrShow(stra);
printf("串b:\n");
StrShow(strb);
StrInsert(&stra,22,strb); //
printf("串a:\n");
StrShow(stra);
printf("串c:\n");
StrShow(strc);
return0;
}
- 23、数据结构笔记之二十三串的堆分配实现
- 数据结构 串的堆分配
- 【数据结构】串的堆分配表示与实现
- 数据结构之堆的实现
- 数据结构编程笔记二十三:第七章 图 关键路径算法的实现
- 学习笔记------数据结构(C语言版)串的堆分配存储表示
- 串的堆分配存储表示与实现--自己写数据结构
- 深入学习JVM笔记二堆的分配参数
- iOS小明开发笔记(二十三) (C语言之堆栈入门--堆和栈的区别)
- 串的堆分配表示与实现
- 【练习】串的堆分配实现
- 数据结构之堆(Heap)的实现
- java学习笔记(二十三)数据结构
- 数据结构——串的堆分配存储
- 数据结构 串的堆分配及基本操作
- C语言数据结构——串的堆分配
- 数据结构堆的实现
- 数据结构-堆的实现
- 找出数组中第 K 大的数
- JAVA学习Day1
- HDU 6205 card card card && 沈阳网络赛1012 (尺取法)
- 写小程序接口时phpcms中根目录下添加一个接口文件中
- 22、数据结构笔记之十九列队实现离散事件模拟
- 23、数据结构笔记之二十三串的堆分配实现
- 24、数据结构笔记之二十四串的模式匹配算法
- 在linux(CentOS 6.5)上安装jdk,tomcat,mysql,和redis
- 独享版虚拟主机、共享版虚拟主机和云服务器ECS的区别?
- 周末舞会(循环队列)
- bzoj 1673: [Usaco2005 Dec]Scales 天平(DFS)
- Arraylist和Linkedlist的区别
- 25、数据结构笔记之二十五串应用之文本编辑
- Lintcode121 Word Ladder || solution 题解