串(string,又称字符串)是一种有特殊的线性表,每个元素结点仅由一个字符组成。
串的常见存储结构有顺序存储结构和链式存储结构。
顺序存储结构按存储方式又分为:
静态存储分配(定长顺序存储)
动态存储分配(堆分配存储)
1 串的定长顺序存储
用一组地址连续的存储单元来存储串中的字符序列。
具体类型定义如下:
#define MAXSIZE 100
typedef struct{
char str[MAXSIZE];
int len;
}seqString;
基本操作:
//创建字符串
seqString *createStr(seqString *s){
gets(s->str);
s->len = lenStr(s);
return s;
}
//求字符串长度
int lenStr(seqString *s){
int i=0;
while(s->str[i]!='\0')
i++;
return i;
}
//字符串连接
void catStr(seqString *r1,seqString *r2){
if(r1->len+r2->len > MAXSIZE){
printf("两个字符串相加太长,溢出!");
}else{
for(i=0;i<r2->len;i++)
r1->str[r1->len+i] = r2->str[i];
r1->len=r1->len+r2->len;//修改连接后新串的长度
}
}
//求子串
seqString *subStr(seqString *r,int i,int j){
seqString *r1;
int k;
if(i+j-1>r->len){
printf("子串越界");
return;
}else{
for(k=0;k<j;k++){
r1->str[k] = r->str[i+j-1];//从r中取出子串
r1->len = j;
r1->str[r1->len] = '\0';
}
return r1;
}
//串相等的比较,在2个串长度不相等的情况下比较串的长度,相等的情况下比较第一个不相同的字符的大小
int equalStr(seqString *r1,seqString *r2){
int i;
for(i=0;i<r1->len && i<r2->len;i++)
if(r1->str[i]!=r2->str[i])
return (r1->str[i]-r2->str[i]);
return (r1->len - r2->len);
}
//插入子串
seqString *insertStr(seqString *s,seqString *s1,int i){
if(i>s->len || s->len + s1->len > MAXSIZE){
printf("溢出");
}else{
int k = s1->len-1;
//腾出位置
while(k >= i){
s->str[k+s1->len] = s->str[k];
k--;
}
for(k=i;k<i+s1->len;k++){
s->str[k] = s1->str[k-i];
}
//改变字符串s的长度
s->len = s->len + s1->len;
//修改最后一位
s->str[s->len] = '\0';
}
}
//删除子串,从第i位开始,删除j个字符
void delStr(seqString *r,int i,int j){
int k = 0;
if(i+j-1 > r->len)
printf("子串越界");
else{
while(k<j){
r->str[i+k] = s->str[i+k+j];
k++;
}
r->len = r->len - j;
r->str[r->len] = '\0';//字符串最后以'\0'结束
}
}
2 串的堆分配存储
优点:可以根据具体情况,灵活地申请适当数目的存储空间,从而提高存储资源利用率。
类型定义如下:
typedef struct{
char *str;
int len;
}HString;
基本操作:
(1) 串的赋值
//赋值,将字符串常量r的值赋给堆串s
int createHstr(HString *s,char *r){
int len,i=0;
if(s->str!=NULL) free(s->str);//若s已经存在,将它占据的空间释放掉
while(r[i]!='\0') i++;
if(i!=0){//分配空间
s->str = (char *)malloc(i);
if(s->str == NULL){
printf("空间分配失败");
return(0);
}
for(i=0;i<len;i++)
s->str[i] = r[i];
}else{
s->str = NULL;
}
s->len = i;
return(1);
}
(2) 判断串是否为空
int isStrEmpty(HString *s){
return s->len == 0 ? 0:1;
}
分享到:
相关推荐
本文将深入探讨“数据结构之串—关键词搜索”,并结合win32程序设计,阐述串(字符串)在数据处理和文件操作中的重要作用。 首先,我们要了解什么是“串”。在计算机科学中,串是字符的有限序列,通常由字母、数字...
数据结构中的"串",又称为字符串,是一种特殊类型的线性表,它的数据元素是单一的字符。在计算机科学中,字符串是字符的序列,包括空格、字母、数字和其他字符。串的操作主要针对串中的连续字符进行,例如赋值、复制...
本压缩包包含关于三种基本数据结构——串(字符串)、栈和队列的实现代码,分别是1.c、2.c、3.c、顺序栈.cpp、循环队列.cpp、链队列.cpp,以及一个名为"串.rar"的子文件,可能包含了字符串处理的相关资料,还有...
数据结构中的串是一种重要的线性数据结构,由零个或多个字符组成,具有特定的顺序。在计算机科学中,理解和掌握串的相关概念及其存储形式对于处理文本数据至关重要。本篇文章将深入探讨串的概念、存储方式以及如何...
### 数据结构之串 #### 4.1 串类型的定义 **4.1.1 串的定义** 串(String)是由零个或多个字符组成的有限序列,通常表示为 `s = ‘a1a2a3…an’ (n ≥ 0)`。在这个表达式中: - `s` 是串名,用来标识这个串。 - ...
C语言数据结构之串插入操作 实例代码: /* 串的堆分配存储表示 */ #include #include #include #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 #define OVERFLOW -2 typedef int Status; typedef ...
这个文件包含了数据结构中串的一些基本操作 可为那些嫌麻烦的同学省去一些敲代码的时间
数据结构 严蔚敏 串 string
【数据结构——串实践报告】 本实践报告主要探讨了数据结构中的一个重要概念——串,以及其在实际操作中的应用。实验项目聚焦于定长串的顺序存储表示方法,旨在通过编程实现来熟练掌握这一概念,并利用串的基本操作...
数据结构串的存储结构程序 数据结构是计算机科学中的一门重要课程,本程序是数据结构中串的存储结构的一个实现。串是由零个或多个字符组成的有限序列,串的存储结构是指如何将串存储在计算机中,以便于后续的操作。...
顺序串作为一种基本的数据结构,尤其在处理字符串时十分常见。顺序串是指在内存中连续存储的字符序列,它的实现简单,操作直观,适合进行一些基础的字符串操作。 顺序串的基本操作包括插入、删除、查找等。在插入...
在众多数据结构中,“串”是一种特殊的数据结构,用于存储和处理字符串(一串字符)。在这个主题中,我们将深入探讨串的两种主要存储方式——定长顺序存储和堆分配存储,以及它们在实现串的基本操作和模式匹配中的...
"串"是一种特殊的数据结构,它由一个或多个字符按照特定顺序排列而成,可以视为字符的序列。在本实验中,我们将深入探讨串的逻辑结构以及如何在实际编程中实现串的相关操作。 1. 串的逻辑结构 串在逻辑上是一个线性...
在IT领域,数据结构是计算机科学中的核心概念之一,它涉及到如何有效地组织和管理大量数据。本项目聚焦于“串”的基本操作,这是一种常见的线性数据结构,通常用于存储文本信息。在这里,我们将深入探讨串的基本操作...
本文实例讲述了javascript数据结构之串的概念与用法。分享给大家供大家参考,具体如下: 串是由零个或多个字符组成的有限序列。串中字符的个数称为串的长度。 串中任意个连续的字符组成的子序列称为该串的子串。包含...
在本主题“数据结构字符串代码实现”中,我们将深入探讨如何使用C语言来实现与字符串相关的数据结构。C语言因其简洁、高效而被广泛用于底层系统编程和数据结构实现。 首先,我们要理解字符串在计算机科学中的基本...
严蔚敏 数据结构 串 课件ppt C语言描述
"数据结构课程设计串—查找与替换" 数据结构课程设计串—查找与替换是数据结构课程设计的一部分,旨在通过设计和实现串的查找与替换功能,掌握数据结构课程中学到的基本理论和算法,并将其应用于实际问题中。 知识...
数据结构课设设计作业之一.实现基本的串基本操作。简单易懂。