数据结构--串

串是由零个或者多个字符组成的有限序列,一般记为  s='a1a2a3....an'(n>=0)。

串中字符的数目n称为串的长度。零个字符的串称为空串,它的长度为零。

串有3种表示方法,分别是(1)定长顺序存储表示(2)堆分配存储表示(3)块链存储表示  其存储形式为:




//串的定长顺序存储表示
#define MAXSIZE 255           //用户自定义串长
typedef char SString[MAXSIZE+1];   //0号单元存放串的长度


//串的堆分配存储表示
typedef struct
{
  char  *ch;     //若是非空串,则按串长分配存储区,否则ch为NULL
  int length;    //串的长度
}HString;


//串的块链存储表示
#define CHUNSIZE 80       //用户自定义块的大小
typedef struct Chunk
{
  char *ch[CHUNSIZE];     
  struct Chunk *next;
}Chunk;
typedef struct
{
  Chunk *front,*tail;   //串的头尾指针
  int length;
}LString;
串的常用操作有:
ADT 串 (String)

Data
	串中的元素仅由一个字符组成,相邻元素具有前驱和后继关系.
	
Operation
StrAssign (&T, chars)
	初始条件:chars是字符串常量。
	操作结果:生成一个其值等于chars的串T。
StrCopy (&T, S)
	初始条件:串S存在。
	操作结果:由串S复制得串T。
StrEmpty(S)
	初始条件:串S存在。
	操作结果:若S为空串,则返回TRUE,否则返回FALSE。 
StrCompare(S, T)
	初始条件:串S和T存在。
	操作结果:若S>T,则返回值>0;若S=T,则返回值=0;若S < T,则返回值 < 0。
StrLength(S)
	初始条件:串S存在。
	操作结果:返回S的元素个数,称为串的长度。
ClearString (&S)
	初始条件:串S存在。
	操作结果:将S清为空串。
Concat (&T, S1, S2)
	初始条件:串S1和S2存在。
	操作结果:用T返回由S1和S2联接而成的新串。
SubString(&Sub, S, pos, len)
	初始条件:串S存在,1≤pos≤StrLength(S)且0≤len≤StrLength(S)-pos+1
	操作结果:用Sub返回串S的第pos个字符长度为len的子串。
Index(S, T, pos)
	初始条件:串S和T存在,T是非空串,1≤pos≤StrLength(S)。
	操作结果:若主串S中存在和串T值相同的子串,则返回它在主串S中第pos个字符之后第一次出现的位置;否则函数值为0。
Replace (&S, T, V)
	初始条件:串S, T和V存在,T是非空串。
	操作结果:用V替换主串S中出现的所有与T相等的不重叠的子串。
StrInsert (&S, pos, T)
	初始条件:串S和T存在, 1≤pos≤StrLength(S)+1。
	操作结果:在串S的第pos个字符之前插入串T。
StrDelete (&S, pos, len)
	初始条件:串S存在, 1≤pos≤StrLength(S)-len+1。
	操作结果:从串S中删除第pos个字符起长度为len的子串。
DestroyString (&S)
	初始条件:串S存在。
	操作结果:串S被销毁。

endADT
上述共有13种操作,其中StrAssign  StrCompare  StrLength Concat SubString这5个操作构成了串类型的最小操作子集

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值