用c语言实现串的存储结构是指,数据结构学习笔记-串(C语言实现)
串由零个或多个字符组成,说白了就是字符串。串的存储方式相对于线性表来讲有些不同,他分为以下几种:顺序存储、堆分配存储、链式存储。顺序存储通常在数组中的头元素存放字符串长度。堆分配存储通常会动态分配空间。链式存储分为两种,一种是每个节点存放一个字符(比较浪费空间),另一种则是每个节点存放多个字符,如果字符不是刚好,就用#代替。(c中字符串定义会有以下几种形式:字符串常量"hello",char数组char m[40] = "hello,world",char指针char *m = "hello,world"。字符串碰到‘\0’结束,定义的字符串末尾都会被系统添加‘\0’)这几种串的存储实现原理都一样,只是方式有些异同。以下是串的基本操作:
基本操作:
init(t , chars)
初始条件: chars是一个字符串常量。
操作结果:生成一个值为chars的串t。
connection(s, t)
初始条件:串s, t 已存在。
 操作结果:将串t联结到串s后形成新串存放到s中。
getLength(t)
初始条件:字符串t已存在。
操作结果:返回串t中的元素个数,称为串长。
SubString (s, pos, len, sub)
初始条件:串s, 已存在, 1≦pos≦StrLength(s)且 0≦len≦StrLength(s) –pos+1。
操作结果:用sub返回串s的第pos个字符起长度为len 的子串。
下面是串的链式存储代码实现:
#include #include //串的链式存储
typedef struct charNode{
char data;
struct charNode *next;
}charNode;
typedef charNode *charLink;
//c中字符串会有以下几种形式:字符串常量"hello",char数组char m[40] = "hello,world",char指针char *m = "hello,world"
void init(charLink *c,char s[]){
charLink p,q;
(*c)=(charLink)malloc(sizeof(charNode));//创建链式串
q=*c;//定义指针指向串
for(int i=0;s[i]!='\0';i++){//c里面所有定义的字符串后面都会有一个‘\0’,他代表结束
p=(charLink)malloc(sizeof(charNode));
p->data=s[i];//这里类似链表的尾插法
q->next=p;
q=p;
}
q->next=NULL;
}
//获取串长度
int getLength(charLink c){
int i=0;
charLink p;
p=c;
while(p->next){
p=p->next;
i++;
}
return i;
}
//将两个串拼成一个串
void connection(charLink *c,charLink b){
charLink p=(*c)->next;//定义一个指针指向c的第一个字符。
charLink p2=b;//定义一个指针指向b
charLink p3;//用来存储在b中取出的字符节点
char s;//用来存放从b中取出的字符数据
while(p2->next){//从b的第一个字符节点开始取
p2=p2->next;
s=p2->data;
while(p->next){//从c的第一个字符节点的next开始判断,如果不为空,就向下指,直到p成为c的最后一个字符节点
p=p->next;
}
p3=(charLink)malloc(sizeof(charNode));
p3->data=s;
p->next=p3;//类似链表的尾插法,让后插入的数据都往后排
p=p3;
}
p->next=NULL;
}
void substring(charLink c,int index,int slength,charLink *s){
//当index+slength<=(*s).length+1时才能取
charLink p,z;
*s=(charLink)malloc(sizeof(charNode));
z=*s;
p=c->next;
int i=1,j=1;
//拿到主串的要取数据的第一个位置
while(p->next&&inext;
i++;
}
//取值赋值
while(p&&j<=slength){
charLink n=(charLink)malloc(sizeof(charNode));
n->data=p->data;
z->next=n;
z=n;
p=p->next;
j++;
}
z->next=NULL;
}
void display(charLink c){
charLink p=c->next;
while(p){
char q=p->data;
printf("%c ",q);
p=p->next;
}
printf("\n");
}
int main()
{
charLink c,b,z;
char c1[20]="hello hello";
char c2[20]=" world world";
char c3[10]="";
init(&z,c3);
init(&c,c1);
display(c);
init(&b,c2);
display(b);
connection(&c,b);
display(c);
printf("串的长度为:\n%d\n",getLength(c));
substring(c,1,5,&z);
display(z);
return 0;
}
用c语言实现串的存储结构是指,数据结构学习笔记-串(C语言实现)相关推荐
- 数据结构学习笔记(c语言版)
文章目录 一.概念 1.基本术语 2.算法 3.时间复杂度 4.数据的逻辑结构 二.线性表 1.存储结构 2.基本操作 三.栈 1.存储结构 2.基本操作 3.实际应用 四.队列 1.存储结构 2.基 ...
- Go:【学习笔记】Go 语言结构
1 Go 语言结构 在我们开始学习 Go 编程语言的基础构建模块前,让我们先来了解 Go 语言最简单程序的结构. Go Hello World 实例: Go 语言的基础组成有以下几个部分: 包声明 引 ...
- MySQL技术内幕-InnoDB存储引擎第2版-学习笔记-02
MySQL技术内幕-InnoDB存储引擎第2版-学习笔记-02 6. 锁 人们认为行级锁总会增加开销.实际上,只有当实现本身会增加开销时,行级锁才会增加开销.InnoDB 存储引擎不需要锁升级,因 ...
- 【学习笔记】C++语言程序设计(郑莉):数组、指针与字符串
[学习笔记]C++语言程序设计(郑莉):数组.指针与字符串 1. 数组 1.1 数组的声明与使用 1.2 数组的存储与初始化 1.3 数组作为函数参数 1.4 对象数组 2. 指针 2.1 内存空间的 ...
- 中国大学MOOCPython语言程序设计(北京理工大学)第7-9周学习笔记和课后练习
中国大学MOOCPython语言程序设计(北京理工大学)第7-9周学习笔记和课后练习 第7周 文件和数据格式化 7.1 文件的使用 7.2 实例11: 自动轨迹绘制 7.3 一维数据的格式化和处理 7 ...
- c语言注释语句执行吗,C语言学习笔记之C语言概念解析(附资料分享)每一个语句都必须以分号结尾但预处理命令函数头和花括号“}”之后不能加分号...
[[怪兽爱C语言]C语言学习笔记之C语言概念解析(附资料分享)]https://toutiao.com/group/6582429294901854728/?iid=15906422033&a ...
- MySQL技术内幕-InnoDB存储引擎第2版-学习笔记-01
MySQL技术内幕-InnoDB存储引擎第2版-学习笔记-01 1. MySQL体系结构和存储引擎 1.1 定义数据库和实例 数据库database: 物理操作系统文件或其他形式文件类型的集合. 当使 ...
- [UVMC]UVMC学习笔记之跨语言作用域的config操作
UVMC学习笔记二 --- 跨语言作用域的config操作 前言:UVMC引入了特定的内存共享方法,可以在UVM/SystemVerilog与SystemC模块之间传递记名的半全局变量,在使用方式上类 ...
- Java快速入门学习笔记3 | Java语言中的表达式与操作符
有人相爱,有人夜里开车看海,有人却连LeetCode第一题都解不出来!虽然之前系统地学习过java课程,但是到现在一年多没有碰过Java的代码,遇到LeetCode不知是喜是悲,思来想去,然后清空自己 ...
最新文章
- Kubernetes学习笔记二:Namespace,Cgroups 的隔离与应用
- php.ini 延迟,php超时报错Maximum execution time of 120 seconds exceeded in解决办法
- 初面蚂蚁金服,java微积分第三方计算包
- Caffe官方教程翻译(8):Brewing Logistic Regression then Going Deeper
- 学习区块链,绕不过去的“拜占庭将军问题”!!这里正好有通俗易懂的解释
- redis和kafka读取代码
- 使用“牛顿迭代法”求解方程
- iOS多线程(一):GCD的基本使用
- Android源码:1、如何下载源码详解(一)
- Java 基本数据类型(四类八种)
- unity商店的Standard Assets自带人物移动插件的bug修改
- MIPI DSI的linux kernel驱动原理 | 基于RK3399
- Win10 chm文件无法打开解决方案
- 用php获取设备信息
- X Chen笔记---百度云破解限速
- FRP搭建内网穿透(亲测有效)
- Output输出缓存区大小只有1024KB,超过大小限制的就会被清除
- C/C++结构体内存对齐问题
- 中国一汽发布L4级智能驾驶技术,解放商用车率先使用;科大讯飞今日将发翻译机2.0版本;阿里巴巴已以50亿控股全球第二大WiFi芯片商乐鑫信息科技
- STM32之引脚GPIO