`
韩悠悠
  • 浏览: 840665 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

数据结构5

    博客分类:
  • java
 
阅读更多

串的抽象数据类型定义

ADT String{

数据对象:D={a1|ai属于CharacterSet,i=1,2,.....n,n>=0}

数据关系:R1={<ai-1,ai>|ai-1,ai属于D,i=2........n}

}

 

串的基本操作

StrAssign(&T,chars)

初始条件:chars是字符串常量

操作结果:把chars赋为T的值

 

StrCopy(&T,s)

初始条件:串S存在

操作结果:由串S复制得串T

 

StrLength(S)

初始条件:串S存在。

操作结果:返回S的元素个数,称为串的长度

 

StrEmpty(S)

初始条件:串S存在。

操作结果:若S为空串,则返回TRUE,否则返回FALSE

 

StrCompare(S,T)

初始条件:串ST存在。

操作结果:若S>T,则返回值>0

S=T,咋返回值=0

S<T,则返回值<0

 

Concat(&T,S1,S2)

初始条件:串S1S2存在。

操作结果;用T返回由S1S2连接而成的新串。

 

SubString(&Sub,S,pos,len)

初始条件:串S存在,1<=pos<=StrLength(S)0<=len<=StrLength(S)-pos+1

操作结果:用Ssub返回串S的第pos个字符起长度为len的子串

 

Index(S,T,pos)

初始条件:串ST存在,T是非空串,1<=pos<=StrLength(S)

操作结果:若主串S中存在和串T值相同的子串,则返回它在主串S中第pos个字符之后第一次出现的位置;否则函数值为0

 

Replace(&S,T,V)

初始条件:串S,TV存在,T是非空串

操作结果:用V替换主串S中出现的所有与T相等的不重叠的子串。

 

StrInsert(&S,pos,T)

初始条件:串ST存在,1<=pos<=StrLength(S)+1

操作结果:在串S的第pos个字符之前插入串T

 

StrDelete(&S,pos,len)

初始条件:串S存在,1<=pos<=StrLength(S)-len+1

操作结果:从串S中删除第pos个字符起长度为len的子串。

 

 

串的逻辑结构和线性表极为相似,区别仅在于串的数据对象约束为字符集,然而,串的基本操作和线性表有很大差别,在线性表的基本操作中,大多以

“单个元素”作为操作对象,如:线性表中查找某个元素,求某个元素,在某个位置上插入一个元素和删除一个元素灯。而在串的基本操作中,通常以

”串的整体“作为操作对象,如:在串中查找某个子串,求取一个子串,在串的某个为孩子插入一个子串以及删除一个子串等。

 

串的表示和实现

如果在程序设计语言中,串只是作为输入或输出常量出现,则只需存储此串的串值,即字符序列即可,但在大多数非数值处理的程序中,串也以变量的形

 

式出现。

 

串的三种存储表示

1、串的定长顺序存储表示

2、串的堆分配存储表示

3、串的块链存储表示

 

一、串的定长顺序存储表示

#define MAXSTRLEN 255

typedf unsigned char String

串的实际长度可在这个给予定义长度的范围内随意设定,超过了给予定长长度的串值则被舍去,称为”截断“

 

二、串的堆分配存储表示

typedef struct{

         char *ch;

         //若是非空串,则按串长度分配存储区,否则chNULL

         int length;//串长度

}

 

通常,C语言中提供的串类型就是以这种存储方式实现的,系统利用函数malloc()free()进行串值空间的动态管理,为每一个新产生的串分配一个存储区

 

,称串值共享的存储空间为“堆”,C语言中的串以一个空字符为结束符,串长是一个隐含值。

 

这类串操作的实现算法为:

先为新生成的串分配一个存储空间,然后进行串值的复制。

 

三、串的块链存储表示

#define CHUNKSIZE 80//可由用户定义的块大小

typedef struct Chunk{ //结点结构

         char ch[CHUNKSIZE];

         struct Chunk *netx;

}

typedef struct{//串的链表结构

Chunk *head,*tail; //串的头和尾指针

int curlen; //串的当前长度

}

 

串值也可用链表来存储,由于串的数据元素是一个字符,它只有8位二进制数,因此用链表存储时,通常一个结点中存放的不是一个字符,而是一个子串,

 

例如:在编辑系统中,整个文本编辑区可用看成一个串,每一行是一个子串,构成一个结点,即:同一行的串用定长结构(80个字符),行和行之间用指

 

针相链接。

 

串的模式匹配算法

这是串的一种重要操作,很多软件,若有“编辑”菜单项的话,则其中必有“查找”子菜单项。

首先,回忆一下串匹配(查找)的定义:

INDEX(s,t,pos)

初始条件:串ST存在,T是非空串,1<=pos<=StrLength(S)

操作结果:若主串S中存在和串T值相同的子串,则返回它在主串S中第pos个字符之后第一次出现的位置;否则函数值为0

 

下面讨论以定长顺序结构表示串时的几种算法

一、简单算法

二、首位匹配算法

三、KMP算法

简单算法:

int Index(SString S,SString T,int pos){

         i=pos; j=1;

         while(i<=S[0]&&j<=T[0]}{

                   if(S[i]==T[j]{

                            ++i;++j;

                   }else{

                            i=i-j+2;

                            j=1;

                   }

         }

         if(j>T[0]) return i-T[0];

         else return 0;

}

 

 

二、首位匹配算法

先比较模式串的第一个字符,

再比较模式串的最后一个字符,

最后比较模式串中从第二个到第n-1个字符。

 

int Index_FL(SString S,SString T,int pos){

         sLength=S[0],tLength=T[0];

         i = pos;

         patStartChar=T[1];

         patEndChar=T[tLength];

         while(i<=sLength=tLength+1){

                   if(S[i]!=patStartChar) i++;

                   else if(S[i+tLength-1]!=patEndChar)++i;

                   else{

                            k=1;j=2;

                            while(j<tLength&&S[i+k]=T[j]){

                                     ++k;++j;

                            }

                            if(j==tLength)   return i;

                            else ++i;

                   }

         }

}

 

 

分享到:
评论

相关推荐

    刷题算法提高阶段-数据结构5

    刷题算法提高阶段-数据结构5

    数据结构5最小生成树.ppt

    数据结构5最小生成树.ppt

    数据结构 数据结构 数据结构 数据结构 数据结构

    5. **树**:树是一种非线性的数据结构,由节点(或顶点)和边组成。每个节点可以有零个或多个子节点,根节点没有父节点,叶节点没有子节点。二叉树、二叉查找树、平衡树(如AVL树和红黑树)等都是树的特殊形式,广泛...

    上海交大数据结构课件 上海交大数据结构课件

    数据结构是计算机科学中的核心课程之一,主要研究如何在计算机中高效地组织和存储数据,以便于进行各种操作。上海交通大学的数据结构课件是学习这一主题的重要资源,它涵盖了广泛的知识点,帮助学生深入理解数据结构...

    SSD5 Recommended Exercise 2 数据结构

    SSD5 Recommended Exercise 2 数据结构SSD5 Recommended Exercise 2 数据结构SSD5 Recommended Exercise 2 数据结构SSD5 Recommended Exercise 2 数据结构SSD5 Recommended Exercise 2 数据结构SSD5 Recommended ...

    严蔚敏数据结构动态演示

    数据结构是计算机科学中的核心概念,它涉及到如何在内存中有效地组织和管理数据,以便进行高效的操作。严蔚敏教授的《数据结构》是一本经典的教材,深入浅出地介绍了各种数据结构及其算法。"严蔚敏数据结构动态演示...

    数据结构的pdf课件

    5. **高级数据结构**:如堆、哈希表、Trie树、B树和B+树等,这些数据结构在数据库、搜索引擎等领域有着广泛应用。课件会解释它们的设计原理和优化策略。 6. **算法设计和分析**:除了具体的数据结构,课件还会教授...

    西安理工大学863数据结构真题 -西安理工大学863数据结构真题需要的滴滴我,都是我去年备考时的真题资料,还有复试资料哦~

    5. 树(Tree):是一种树形结构的数据结构,每个节点可以有多个子节点。 6. 图(Graph):是一种非线性结构的数据结构,节点之间通过边连接。 四、西安理工大学863数据结构真题的重要性 西安理工大学863数据结构...

    数据结构1800试题.pdf

    5. **特殊数据结构**: - **广义表**:一种可以包含其他列表的列表,具有灵活的结构,可表示复杂的数据关系。 - **有向图**和**字符串**:非线性数据结构,有向图用于表示对象之间的定向关系,字符串是字符序列,...

    C++数据结构与程序设计

    《C++数据结构与程序设计》作为一部计算机科学与工程领域的基础性核心课程著作,专注于C++语言环境下数据结构与算法的教学与应用。这本书在内容实用性、编写体例和结构布局方面都显示出其独到之处,不仅适合高校师生...

    《初识数据结构》教学建议.pdf

    ### 数据结构的基本概念 数据结构是计算机存储、组织数据的方式。它旨在使数据的存取和处理更加高效。数据结构通常由数据对象和数据关系两部分构成。数据对象是指具有相同数据类型的元素的集合;数据关系则定义了...

    浙江大学陈越数据结构课件

    数据结构是计算机科学中的核心课程,它探讨了如何在计算机中高效地组织和管理数据,以便于执行各种操作。在本资源中,“浙江大学陈越数据结构课件”提供了丰富的学习材料,帮助学生深入理解这一重要领域。配合视频...

    数据结构(唐发根)

    数据结构是计算机科学中的核心课程之一,主要研究如何在计算机中高效地组织和存储数据,以便于进行各种操作。唐发根教授的数据结构教程是一部深受初学者欢迎的教材,它全面且深入地介绍了数据结构的基本概念、算法和...

    Java常见数据结构面试题(带答案)

    "Java常见数据结构面试题(带答案)" 以下是对Java常见数据结构面试题的知识点总结: 栈和队列 * 栈和队列的共同特点是只允许在端点处插入和删除元素。 * 栈通常采用的两种存储结构是线性存储结构和链表存储结构...

    王红梅数据结构答案.pdf

    "数据结构基础知识点" 数据结构是计算机科学中的一门重要学科,研究如何组织、存储和处理数据的方法和技术。本资源摘要信息将涵盖数据结构的基本概念、数据元素、数据结构的分类、算法的基本特性、数据存储结构、...

    考研王道数据结构代码.zip

    5. 图:图结构用于表示对象之间的复杂关系,如邻接矩阵和邻接表是常见的图数据结构,可用于路径搜索、最短路径问题和网络流问题。 6. 散列表:散列表通过哈希函数提供快速的查找、插入和删除操作,是实现关联数组的...

    算法与数据结构.pdf

    《算法与数据结构》是由王厚峰教授在ICL of PKU进行的课程,课程主要围绕着算法和数据结构这两个核心概念展开。课程强调问题求解的过程,包括数据的表示、处理方法以及如何通过抽象数据类型来解决问题。王教授引用了...

    数据结构(严蔚敏版)

    数据结构是计算机科学与技术领域中的核心课程之一,它研究如何在计算机中组织和存储数据,以便高效地访问和修改。严蔚敏教授编著的《数据结构》是一本广泛被采用的经典教材,深受广大计算机专业学生和研究人员的青睐...

    数据结构和算法分析 C++版 第三版

    "数据结构和算法分析 C++版 第三版" 本资源是《数据结构和算法分析 C++版 第三版》的摘要信息,作者是Clifford A. Shaffer,来自 Virginia Tech 的计算机科学系。该书将数据结构和算法分析的基本概念和技术进行了...

    数据结构习题解析唐发根

    《数据结构习题解析》由唐发根编著,是为高等教育学历文凭考试计算机专业考生提供的辅导教材。该书与唐发根所著的主教材《数据结构》配套使用,内容上严格对应主教材的章节顺序,每章节都涵盖了学习要点、习题解析及...

Global site tag (gtag.js) - Google Analytics