资源简介
严蔚敏数据结构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
相关资源
- 利用C++哈希表的方法实现电话号码查
- 学校超市选址问题(数据结构C语言版
- 数据结构,迷宫问题C语言版源代码
- DSDEMO-C演示(数据结构C语言版 严蔚敏
- 数据结构 图的遍历源代码
- 数据结构实验源代码集
- 实验报告:数据结构长整数四则运算
- 数据结构教程李春葆第五版书中例题
- 吕鑫vc6c++数据结构视频源码
- 数据结构教程李春葆第五版课后答案
- 李春葆课后习题答案(数据结构教材
- 数据结构1800题 题+答案(全)
- 数据结构(C语言版)ppt课件,清华,
- c++常用游戏算法及数据结构设计
- 数据结构超全面复习导图
- 《Data Structures and Algorithm Analysis in C
- 数据结构C语言版教学笔记严蔚敏
- 数据结构C语言版期末考试试题(有答
- 多功能计算器实现C++代码以及代码详
- C语言数据结构银行客户排队
- C语言实现栈操作
- 简易学生管理系统源码 数据结构 大作
- 数据结构与C语言综合习题集
- 数据结构实验——赫夫曼树相关
- C语言进阶源码---基于graphics实现图书
- 数据结构——C++语言描述 陈慧南
- 广东工业大学数据结构课程设计航空
- 数据结构课程设计扑克牌排序
- 数据结构各种算法实现(C++模板),
- (严版C语言版数据结构源码.rar
评论
共有 条评论