1、串的定义

串(String):是由零个或多个字符组成的有限序列,又名为字符串。

一般记为s=“a1a2a3.........an"(n>=0),其中,s是串名称,用双引号括起来的字符序列,ai(1<=i<=n),可以是字母,数字或者其他字符,i表示该字符在串中的位置。

串中字符数目n称为串的长度,零个字符数目n称为空串,它的长度为零,可以直接用“”表示,也可用希腊字母Φ表示。

所谓序列,说明串的相邻字母之间具有前驱和后继的关系。

空格串:是只包含空格的串,与空串是有区别的,空格串是有内容有长度的,而且可以不止一个空格。

子串与主串,串中任意个数的连续字符组成的子序列称为该串的子串,相应地,包含子串的串称为主串。

子串在主串中的位置是子串的第一个字符在主串中的序号。

2、串的比较

串中更多的是查找子串位置,得到指定位置的子串,替换子串等。

一个普通的查找主串中是否存在子串,且返回出现第一个这样的子串在s中的位置

package com.alice.dataStructe5.compare;

public class StringCompare {

    /**
* 查找子串在主串中第一次出现的位置
* @param s
* @param t
* @return
*/
public int StringIndex(String s,String t){
int n,m;
int index=0;
n = s.length();//主串长度
m = t.length();//子串长度 try{
for(int i=0; i< n-m+1;i++){//主串固定不动
int j = 0;
while(j< m){//子串进行比较
if(s.charAt(i) == t.charAt(j)){
j++; }else{
break;
}
}
index++;
}
}catch(Exception e){
System.out.println("没有子串");
}
return index-m+1; }
public static void main(String args[]){
String str = "abecabcd";
String sub = "abc";
StringCompare sc = new StringCompare();
System.out.println(sc.StringIndex(str, sub));
System.out.println(str.indexOf(sub));
}
}

3、串的存储结构

串的存储结构与线性表相同,分为两种。

3.1 串的顺序存储结构

串的顺序存储结构是用一组地址连续的存储单元来存储串中的字符序列的。按照预定义的大小,为每个定义的串变量分配一个固定长度的存储区。一般用数组来定义。

3.2 串的链式存储结构

对于串的链式存储结构,与线性表结构相似,但由于串结构的特殊性,结构中的每个元素数据是一个字符,如果也简单应用链式表存储串值,一个结点对于一个字符,就会存在很大的空间浪费,因此,一个结点可以放一个字符,也可以考虑一个结点存放多个字符,最后一个结点偌未被占据,可以用“#”或者其他非字符串补全。

实际上,串的链式存储除了在连接串与串操作时有一定方便,总得来说不如顺序存储灵活,性能不如顺序存储好。

大话数据结构(十一)java程序——串的更多相关文章

  1. Java程序员从笨鸟到菜鸟全部博客目录

    本文来自:曹胜欢博客专栏.转载请注明出处:http://blog.csdn.net/csh624366188 大学上了一年半,接触java也一年半了,虽然中间也有其他东西的学习,但是还是以java为主 ...

  2. Java程序员进击书籍推荐

    计算机基础 计算机科学导论 计算机操作系统 操作系统原理及应用(Linux) Java 基础和进阶 疯狂Java讲义 Java 核心基础卷1/2 Java编程思想 Java 8实战 jls11 Eff ...

  3. 《Java程序员由笨鸟到菜鸟》

    <Java程序员由笨鸟到菜鸟> 在众多朋友的支持和鼓励下,<Java程序员由菜鸟到笨鸟>电子版终于和大家见面了.本电子书涵盖了从java基础到javaweb开放框架的大部分内容 ...

  4. 【Java】 大话数据结构(8) 串的模式匹配算法(朴素、KMP、改进算法)

    本文根据<大话数据结构>一书,实现了Java版的串的朴素模式匹配算法.KMP模式匹配算法.KMP模式匹配算法的改进算法. 1.朴素的模式匹配算法 为主串和子串分别定义指针i,j. (1)当 ...

  5. 大话数据结构(八)Java程序——双向链表的实现

    线性链表--双向链表 双向链表定义: 双向链表(double linked list): 是在单表单的每个结点中,再设置一个指向前驱结点的指针域.因此,在双向链表中的结点都有两个指针域,一个指向前驱, ...

  6. 【Java】 大话数据结构(1) 线性表之顺序存储结构

     本文根据<大话数据结构>一书,实现了Java版的顺序存储结构. 顺序存储结构指的是用一段地址连续的存储单元一次存储线性表的数据元素,一般用一维数组来实现. 书中的线性表抽象数据类型定义如 ...

  7. 【Java】 大话数据结构(2) 线性表之单链表

    本文根据<大话数据结构>一书,实现了Java版的单链表. 每个结点中只包含一个指针域的链表,称为单链表. 单链表的结构如图所示: 单链表与顺序存储结构的对比: 实现程序: package ...

  8. 【Java】 大话数据结构(3) 线性表之静态链表

    本文根据<大话数据结构>一书,实现了Java版的静态链表. 用数组描述的链表,称为静态链表. 数组元素由两个数据域data和cur组成:data存放数据元素:cur相当于单链表中的next ...

  9. 【Java】 大话数据结构(5) 线性表之双向链表

    本文根据<大话数据结构>一书,实现了Java版的双向链表. 在每个数据结点中都有两个指针,分别指向直接后继和直接前驱,这样的链表称为双向链表. 双向链表的结构如图所示: 查找元素可以根据元 ...

随机推荐

  1. IOS项目自动构建

    # Sets the target folders and the final framework product. # 如果工程名称和Framework的Target名称不一样的话,要自定义FMKN ...

  2. Java Hour 57 Java Architecture

    Java 的架构中有4个重要的组成部分: 1 Java programming langrage 2 Java class file format 3 Java API 4 Java virtual ...

  3. Hadoop_10_shuffle02_详解Shuffle过程【来源网络】推荐更为详细

    网址:http://www.cnblogs.com/felixzh/p/4680808.html Shuffle过程,也称Copy阶段.reduce task从各个map task上远程拷贝一片数据, ...

  4. 字符串截取函数substr和substring的不同及其相关说明

    1.substr 方法 功能:用于返回一个从指定位置开始的指定长度的子字符串,从“母字符串”的“指定位置”开始提取“指定长度”的“子字符串”. 语法:stringObject.substr(start ...

  5. 二叉索引树BIT

    定义     二叉索引树,binary index tree,又名树状数组,或Fenwick Tree,因为本算法由Fenwick创造.     对于数组A,定义Query(i,j) = Ai +Ai ...

  6. MVC 使用HandleErrorAttribute统一处理异常

    HandleErrorAttribute继承自FilterAttribute,且实现了IExceptionFilter接口. 属于AOP思想的一种实现,MVC的四大筛选器(权限,动作,结果,异常)中的 ...

  7. UOJ#61. 【UR #5】怎样更有力气

    大力水手问禅师:“大师,很多事情都需要用很大力气才能完成,而我在吃了菠菜之后力气很大,于是就导致我现在非常依赖菠菜.我很讨厌我的现状,有没有办法少吃点菠菜甚至不吃菠菜却仍很有力气?” 禅师浅笑,答:“ ...

  8. java网络编程之UDP实例

    package Socket; import java.net.DatagramPacket; import java.net.InetAddress; public class Dgram { pu ...

  9. Delphi 复习代码

    1.取得可文件路径 Path := ExtractFilePath(Application.ExeName); //取得可执行文件路径 TXMLDocument.Create(ExtractFileP ...

  10. Asp.Net 常用代码-备用

    1.DropDownList 复制 //DropDownList DropDownList2.Items.Clear(); foreach (ListItem li in DropDownList1. ...