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. wp8 json2csharp

    string jsonData = "{\"result\":\"600\",\"data\":{\"items\&qu ...

  2. wp8 --退出程序

    重写OnBackKeyPress事件,设置 e.cancel=true:然后加弹窗代码,为确定按钮订阅事件委托,委托方法里加Application.Current.Terminate();退出方法即可

  3. D. Array GCD

    You are given array ai of length n. You may consecutively apply two operations to this array: remove ...

  4. Ecological Premium

    #include<bits/stdc++.h> using namespace std; int main() { int n,m; unsigned long long int a,b, ...

  5. SU suphasevel命令学习

  6. QUnit使用笔记-3测试用户操作

    模拟操作: elem.trigger(event); elem.triggerHandler(event); triggerHandler的不同: 不会引起事件的默认行为 .trigger() 会操作 ...

  7. Ajax本地跨域问题

    问题:打开本地html文件时,,报错如下 Cross origin requests are only supported for protocol schemes: http, data,chrom ...

  8. Oracle 使用小计

    1.Sequence 1.1 什么是Sequence? Sequence是oracle提供的一个对象,用于产生自增的主键.这与sql server的identity是类似的. 从数学的角度来说,其为一 ...

  9. POJ2817 WordStack(状压DP)

    题目给几个字符串,可以给它们添加前导空格,然后排列,计算每一个字符串和前一个字符串相同非空格字符相等的个数,求可能的最大个数. 状态DP: d[S][i][j]表示已经用的字符串集合S且排列的最后一个 ...

  10. BZOJ3939 : [Usaco2015 Feb]Cow Hopscotch

    设f[i][j]表示到(i,j)的方案数,则有 $f[i][j]=\sum f[x][y](x<i,y<j,a[x][y]!=a[i][j])=\sum f[x][y](x<i,y& ...