数据结构c++ 随堂笔记4
来源:互联网 发布:windows热键设置 编辑:程序博客网 时间:2024/06/06 14:14
串的逻辑结构
字符串:零个或多个字符组成的有限序列。
字符串中任意个连续字符组成的子序列称为该串的子串。
子串第一个字符在主串中的序号称为子串在主串中的位置。
非空串通常记为:
S=" s1 s2…… sn "
其中:S是串名,双引号是定界符,双引号引起来的部分是串值 ,si(1≤i≤n)是一个任意字符。
微机上常用的字符集是标准ASCII码,由 7 位二进制数表示一个字符,总共可以表示 128 个字符。扩展ASCII码由 8 位二进制数表示一个字符,总共可以表示 256 个字符,足够表示英语和一些特殊符号,但无法满足国际需要。Unicode由 16 位二进制数表示一个字符,总共可以表示 216个字符,即6万5千多个字符,能够表示世界上所有语言的所有字符,包括亚洲国家的表意字符。为了保持兼容性,Unicode字符集中的前256个字符与扩展ASCII码完全相同。
串的数据对象约束为某个字符集
串的比较:通过组成串的字符之间的比较来进行的。
给定两个串:X="x1x2…xn"和Y="y1y2…ym",则:
1. 当n=m且x1=y1,…,xn=ym时,称X=Y;
2. 当下列条件之一成立时,称X<Y:
⑴ n<m且xi=yi(1≤ i≤n);
⑵存在k≤min(m,n),使得xi=yi(1≤i≤k-1)且xk<yk。
串的抽象数据类型定义
⑴ StrLength (s):求串s的长度。
⑵ StrAssign (s1, s2):赋值,将s2的值赋值给串s1。
⑶ StrConcat (s1, s2, s):连接,将串s2放在串s1的后面连接成一个新串s。
⑷ SubStr (s, i, len):求子串,返回从串s的第i个字符开始取长为 len 的子串。
⑸ StrCmp (s1, s2):串比较,若s1=s2,返回0;若s1<s2, 返回-1;若s1>s2, 返回1。
⑹ StrIndex (s, t):定位,返回子串t在主串s中首次出现的位置。若t不是s的子串,则返回0。
⑺ StrInsert (s, i, t):插入,将串t插入到串s中的第i个位置。
⑻ StrDelete (s, i, len):删除,在串s中删除从第i个字符开始的连续len个字符。
⑼ StrRep (s, t, r):替换,在串s中用串r替换所有与串t相等的子串。
模式匹配:给定主串S="s1s2…sn"和模式T="t1t2…tm",在S中寻找T的过程称为模式匹配。如果匹配成功,返回T在S中的位置,如果匹配失败,返回0。
基本思想:从主串S的第一个字符开始和模式T 的第一个字符进行比较,若相等,则继续比较两者的后续字符;否则,从主串S的第二个字符开始和模式T的第一个字符进行比较,重复上述过程,直到T中的字符全部比较完毕,则说明本趟匹配成功;或S中字符全部比较完,则说明匹配失败。
模式匹配问题的特点:
⑴ 算法的一次执行时间不容忽视:问题规模通常很大,常常需要在大量信息中进行匹配;
⑵ 算法改进所取得的积累效益不容忽视:模式匹配操作经常被调用,执行频率高。
给定两个字符串S和T,在主串S中寻找子串T的过程称为模式匹配。T称为模式。
BF算法:int BF(char S[ ], char T[ ])
{
i=0; j=0;
while (S[i]!='\0'&&T[j]!='\0')
{
if (S[i]==T[j]) {
i++; j++;
}
else {
i=i-j+1; j=0;
}
}
if (T[j]=='\0') return (i-j+1);
else return 0;
}
和int BF(charS[ ], char T[ ])
{
i=0; j=0;start=0;
while (S[i]!='\0'&&T[j]!='\0')
{
if (S[i]==T[j]) {
i++; j++;
}
else {
start++; i=start; j=0;
}
}
if (T[j]=='\0') returnstart;
else return 0;
}
数组是由类型相同的数据元素构成的有序集合。
数组一般不执行插入和删除操作。
数组的基本操作:存取和修改。这两种操作在根本上对应一种操作,即寻址。
特殊矩阵:在矩阵中有很多值相同的元素并且它们的分布有一定的规律。
稀疏矩阵:矩阵中有很多零元素。
压缩存储的基本思想:为多个值相同的元素只分配一个存储空间。对零元素不分配存储空间。
三元组表:将稀疏矩阵的非零元素对应的三元组所构成的集合,按行优先的顺序排列成一个线性表。
- 数据结构(c++)随堂笔记
- 数据结构C笔记
- 数据结构c++ 随堂笔记4
- 【随堂笔记】数据结构基础
- 数据结构(c语言版) 学习笔记
- C语言-数据结构-算法-笔记
- 数据结构c++ 随堂笔记2
- 数据结构 c++ 随堂笔记3
- 数据结构(c语言)—笔记
- 严蔚敏--数据结构(C语言版)学习笔记
- 数据结构学习笔记之C指针基础
- 数据结构—使用c语言学习笔记
- 数据结构(C语言版)-递归学习笔记
- 数据结构C语言版本的学习笔记
- c++primer学习笔记-----2.6自定义数据结构
- c语言数据结构(4)
- 程序员数据结构笔记4
- 数据结构笔记4 栈
- hellocharts-android开源图表库(效果非常好)
- android-----notifyDataSetInvalidated()和notifyDataSetChanged()有什么区别
- Mysql 查询缓存
- (window)Android Studio安装以及Fetching android sdk component information超时的解决方案
- 第十六周 复习 问题 B: 按要求输出
- 数据结构c++ 随堂笔记4
- jsoncpp 扩展
- MQ直连 并通过线程池ExecutorService发送消息
- iOS疯狂详解之Svn基本命令
- R: 矩阵运算及常用函数 V - plyr Part I
- 双向链表的简单实现
- 使用Xcode自带的单元测试
- 如何让Canvas画笔填充满整个浏览器屏幕
- hadoop写mongodb问题记录(备忘)