数据结构(寒假小结)--3.3串
来源:互联网 发布:数据分析师笔试逻辑 编辑:程序博客网 时间:2024/06/05 16:30
1.本节学习要点:
2.基本定义与相关名词:
①S是串名
②双引号括起的字符序列是串值;
将串值括起来的双引号本身不属于串,它的作用是避免串与常数或与标识符混淆。
【例】"123"是数字字符串,它不同于整常数123
【例】"xl"是长度为2的字符串,而xl通常表示一个标识符。
③ai(1≤i≤n)可以是字母、数字或其它字符;
④串中所包含的字符个数称为该串的长度。
串长:串中所包含的字符个数。
空串(Empty String):长度为零,不含任何字符。
空白串(Blank String):由一个或多个空格组成的串。
子串:串中任意个连续字符组成的子序列。该串本身称为主串。
空串是任何串的子串,任何串是其自身的子串。
串中某字符在串中出现时的序号(从1开始)称为该字符在串中的位置;子串在主串中第一次出现时,子串的第一个字符在主串中的序号,称为该子串在主串中的位置。
例:A=“This is a string” B=“is”
如果两个串的长度相同,并且各个对应位置上的字符也相同,则称这两个串相等。
串常量:只能引用不能改值,一般用直接量来表示。
串变量:值可以改变,必须用名字来识别。
3.基本运算:
1)赋值ASSIGN(S,T):将串T的值传给串S。strcpy(S,T)。
2)联接CONCAT(S,T):由S和T连接成新串,T接在S的后面。strcat(S,T)。
3)求串长LENGTH(S):求串S的长度。strlen(S)。
4)求子串SUBSTR(S,i,j):串S中第i个字符开始连续j个字符组成的子串。
5)串比较COMPARE(S,T)或判等EQUAL(S,T):前者比较两个串S和T的大小,结果小于、等于或大于0,表示S<T、S=T和S>T。后者比较两个串S和T是否相等,结果为1(相等)或0(不相等)。strcmp(S,T)。
6)插入INSERT(S,i,T):将串T插入到串S的第i个字符位置。
7)删除DELETE(S,i,j):从S中删除第i字符开始的连续j个字符
8)子串定位INDEX(S,T):在主串S中查找子串T第一次出现的位置或指针。T不能为空串。strstr(S,T)。
9)置换REPLACE(S,i,j,T)或REPLACE(S,T,R):前者用T置换S中第i个字符开始的连续j个字符;后者用R替换所有在S中出现的子串T。
4.BF算法:
1.子串定位又称串的模式匹配(Pattern Matching)或串匹配(String Matching),其中主串称为目标串,子串称为模式串。
2.朴素模式匹配算法(BF算法):利用判等、求串长和求子串等实现子串定位INDEX(S,T):依次从主串S中第i(i≥1)个字符开始,取出长度与T相同的子串和T比较,若相等则子串位置为i; 否则i增1取下一个子串比较,直到最后找到或没有。
3.图演示和代码:
int index(sqstring *s, sqstring *t){//BF算法 int i,j; i=0,j=0; while(i<s->n && j<t->n){ if(s->data[i]==t->data[j]){ i++;j++; //对应字符相等时向后推进 }else {i=i-j+1; j=0;} //i退到主串下一趟开始位置,j重新开始 } if(j>=t->n) return i-t->n;//匹配成功,返回成功位置 else return -1;}
5.串的分类:
1.顺序串:串的顺序存储结构简称为顺序串。
2.链串:用单链表方式存储串值,串的这种链式存储结构简称为链串。
如果有错误请大家指出,共同学习共同进步!
- 数据结构(寒假小结)--3.3串
- 数据结构(寒假小结)--3.1桟
- 数据结构(寒假小结)——2.线性表
- 数据结构(寒假小结)——3.2队列
- 大二寒假小结(上)
- 大二寒假小结(中)
- 数据结构(寒假小结)——2.1线性表之顺序表
- 数据结构(寒假小结)——2.2线性表之单链表
- 数据结构(寒假小结)——2.3线性表之双链表和循环链表
- 寒假小结
- 数据结构小结 (四) 串
- 寒假生活小结
- 2013年底寒假小结
- 寒假英语小结
- 寒假自学JAVA小结
- 2017寒假训练 小结
- 2017寒假小结
- 16年寒假学习小结
- hdoj 4411 Arrest 【费用流 + 最短路】
- LeetCode Best Time to Buy and Sell Stock II C 4ms
- leetcode系列(73)Insertion Sort List
- 王学岗Fragment(五)
- hdu 2544最短路(Dijkstra)
- 数据结构(寒假小结)--3.3串
- ajax与Jquery中的Ajax
- python 模块(module)基础讲解
- POJ 1062 昂贵的聘礼(dijkstra)
- svm
- Android应用程序资源的编译和打包过程分析
- HDU 1517:A Multiplication Game
- 解决登录WDCP面板出现"无法连接mysql,请检查mysql是否已启动"问题
- leetcode系列(74)Sort List