资源简介
严蔚敏数据结构C语言实现,串操作应用举例中的词索引表例子,由于作者没给出完整源码,自己写了一个比较完整的
代码片段和文件信息
#include “HString.h“
// 创建一个空串
HString createString(){
HString hs;
InitString(&hs);
return hs;
}
Status InitString(HString *T){
T->ch = NULL;
T->len = 0;
return OK;
}
Status StrAssign(HString *T char *chars){
// 生成一个其值等于串常量chars的串T
// 临时变量
int len=0i=0;
char *c;
if(T->ch)
free(T->ch);
// 计算chars的长度
for(len=0c=chars; *c; ++c)
++len;
if(!len){T->ch = NULL; T->len = 0;}
else
{
if(!(T->ch = (char*)malloc(len*sizeof(char))))
exit(0);
for(i=0;i T->ch[i] = chars[i];
T->len = i;
}
return OK;
}
// 返回S的元素个数,称为串的长度
int StrLength(HString S){
return S.len;
}
int StrCompare(HString SHString T){
// 若S>T,则返回值>0;若S=T,则返回值=0;若S int i=0;
for(i=0;i if(S.ch[i]!=T.ch[i]) return S.ch[i]-T.ch[i];
}
return S.len - T.len;
}
Status ClearString(HString *S){
// 将S清为空串
if(S->ch) {
free(S->ch);
S->ch = NULL;
}
S->len = 0;
return OK;
}
Status Concat(HString *T HString S1 HString S2){
// 用T返回由S1和S2联接而成的新串
int i=0;
if (T->ch) free(T->ch);
if(!(T->ch = (char*)malloc((S1.len + S2.len)*sizeof(char))))
exit(0);
//连接第一个串
for(i=0;ich[i] = S1.ch[i];
//连接第二个串
for(i=0;ich[i + S1.len] = S2.ch[i];
T->len = S1.len + S2.len;
return OK;
}
Status Substring(HString *Sub HString S int pos int len){
// 用Sub返回串S的第pos个字符起长度为len的子串。
// 其中,1<=pos<=StrLength(S)且0<=len<=StrLength(S)-pos+1
int i=0;
if(pos < 1 || pos > S.len || len < 0 || len > S.len - pos +1)
return ERROR;
if(Sub->ch)free(Sub->ch);
if(!len) {Sub->ch = NULL; Sub->len = 0;}
else
{
Sub->ch = (char*)malloc(len*sizeof(char));
for(i=0;i Sub->ch[i] = S.ch[i+pos-1];
Sub->len = len;
}
return OK;
}
Status StrCopy(HString *des HString src){
// des为目标串,src为源串
// 把src拷贝到des
int i=0;
if(des->ch) free(des->ch);
des->ch = (char *)malloc(sizeof(char)*src.len);
if(!des->ch) exit(0);
for(i=0;i {
des->ch[i] = src.ch[i];
}
des->len = src.len;
return OK;
}
// 返回子串T在主串S中第pos个字符之后的位置。若不存在,则函数值为0
// 其中,T非空,1<=pos<=StrLength(S).
int Index(HString S HString Tint pos){
int i=posj=1;
while(i<=S.len&&j<=T.len){
if(S.ch[i-1] == T.ch[j-1]){
++i;++j;
} else {
i=i-j+2; j=1;
}
}
if(j>T.len)return i-j;
else return 0;
}
int Index_KMP(HString S HString T int pos){
int i=posj=1;
int *next = (int *)malloc(sizeof(int)*(T.len+1));
get_nextval(T next);
while(i<=S.len && j<=T.len){
if(j==0 || S.ch[i-1] == T.ch[j-1]){
++i; ++j;
}
else
j = next[j];
}
free(next);
if(j>T.len) return i-j;
else return 0;
}
void get_next(HString T int next[])
{
//求模式串的next函数值并存入数组next
int i=1j=0;
next[1]=0;
while(i if(j==0||T.ch[i-1] == T.ch[j-1]){
++i;++j;next[i] = j;
} else {
j = next[j];
}
}
}
void get_nextval(HString T int nextval[])
{
//求模式串的next函数值并存入数组ne
相关资源
- 无向图 破圈法求最小生成树
- 日历管理系统.cpp
- 数据结构编程题目及答案
- 单项选择标准化考试系统 C语言版
- 数据结构课程设计应用索引文件和查
- 数据结构严蔚敏C语言第二版习题答案
- 数据结构的二叉树用C语言实现的代码
- 文章编辑数据结构课程设计c语言编写
- 数据结构上机题
- 数据结构C语言 一元多项式的加减法
- 数据结构 走迷宫大作业 c语言完整代
- 马踏棋盘的源程序,C语言编写,数据
- 数据结构c语言版上机题代码汇总
- 数据结构C语言之哈夫曼编码
- 数据结构表达式求值,c语言版,能计
- 银行管理系统——数据结构C
- c语言银行管理系统
- 严蔚敏.吴伟民等《数据结构(c语言版
- C++数据结构与算法(第4版) 完整版
- 数据结构栈、队列、二叉树、顺序查
- 数据结构实验和作业严蔚敏C)
- 胡学刚版 数据结构 实验3代码 合工大
- 数据结构题集答案(C语言版)严蔚敏
- 图书管理系统C语言+数据结构与算法
- 《数据结构(c语言版)习题答案》严
- 数据结构二叉树家谱
- 基于Huffman树的文件压缩C语言源码数据
- 基于顺序表的学生信息管理系统.cpp
- 数据结构课程设计 排序综合(C++)
- 二叉排序树C语言版的!.c
评论
共有 条评论