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. oracle DBA学习方法交流

    你想做什么数据库 Oracle? db2?我是做Oracle的 DB2帮不了你 oracle的体系太庞大了,对于初学者来说,难免会有些无从下手的感觉,什么都想学,结果什么都学不好,所以把学习经验共享一 ...

  2. wp8 安装.Net3.5

    Microsoft .NET Framework 3.5 Service Pack 1 http://www.microsoft.com/zh-cn/download/details.aspx?id= ...

  3. matlab中的ishghandle

    ishghandle True for Handle Graphics object handles. ishghandle(H) returns an array that contains 1's ...

  4. C# 同步/并发队列ConcurrentQueue

    如下所示,ConcurrentQueue做到了代码的简化,在并发模型中充当同步对象 private ConcurrentQueue<string> inQueue = new Concur ...

  5. bzoj1027 [JSOI2007]合金

    1027: [JSOI2007]合金 Time Limit: 4 Sec  Memory Limit: 162 MBSubmit: 2671  Solved: 703[Submit][Status][ ...

  6. lua ipairs

    tbl = {"alpha", "beta", ["one"] = "uno", ["two"] = ...

  7. HDU 4417 (划分树+区间小于k统计)

    题目链接:  http://acm.hdu.edu.cn/showproblem.php?pid=4417 题目大意:给定一个区间,以及一个k值,求该区间内小于等于k值的数的个数.注意区间是从0开始的 ...

  8. javascript继承扩展类方法实现

    javascript没有原生的继承语法,这确实很让人困惑,但是广大人民群从的智慧是无穷的.最近呢,正尝到一点从源码中学习的甜头,不分享一下实在难以平复激动的心情.前不久改造视频播放插件的时候,找到了v ...

  9. TYVJ P1056 能量项链 Label:环状区间DP

    做题记录:2016-08-16 20:05:27 背景 NOIP2006 提高组 第一道 描述     在Mars星球上,每个Mars人都随身佩带着一串能量项链.在项链上有N颗能量珠.能量珠是一颗有头 ...

  10. TYVJ P1091 等差数列 Label:dp

    背景 广东汕头聿怀初中 Train#3 Problem 3 描述 等差数列的定义是一个数列S,它满足了(S[i]-S[i-1]) = d (i>1).显然的一个单独的数字或者两个数字也可以形成一 ...