串和数组.

Slides:



Advertisements
Similar presentations
数据结构 2014年3月.
Advertisements

§1 二阶与三阶行列式 ★二元线性方程组与二阶行列式 ★三阶行列式
2.2.1 等比数列的概念和通项公式.
第五章 数组和广义表.
数据结构——树和二叉树 1/96.
数据结构算法 模拟练习及解答二 绍兴文理学院 计算机系计算机应用教研室.
第九章 字符串.
第四章 串 2018/11/13.
第4章 串 串的基本概念和C语言的串函数 串的存储结构 动态数组实现的顺序串 串的模式匹配算法——BF算法 主要知识点.
数据结构 Data Structure 主讲人:王国军,郑瑾 中南大学 中南大学信息院计科系
第4章 串、数组和广义表 丽水学院工学院.
第五章 数组和广义表 £5.1 数组 £5.2 矩阵的压缩存储 £5.3 广义表 £5.1.1 数组的定义 £5.2.1 特殊矩阵
第五章 数组和 广义表 数组 稀疏矩阵 广义表.
第五章 数组和广义表.
数据结构 第4章 串.
第 4章 串和数组(二) 本讲主要内容: 数组的定义及其顺序表示和实现。 矩阵的压缩存储。 广义表的定义。
第3章 栈和队列(二) 1/.
数据结构——串 1/15.
第四章 串和数组(一) 1/.
第4章 串 4.1 串的基本概念及其抽象数据 4.2 串的存储结构 4.3 串类 4.4 串的模式匹配算法.
第 3 讲 线性表(一).
第3章 栈和队列(一).
第三章 栈和队列.
第二章 线性表.
数 据 结 构 Ch.4 串 计 算 机 学 院 肖明军
陈海明 副教授 信息学院 计算机系 电子信息类非计算机专业选修课 程序设计实践 陈海明 副教授 信息学院 计算机系
第4章 串、数组和广义表 4.1 串 4.2 数组 4.3 广义表.
4.1 串的抽象数据类型的定义 4.2 串的表示和实现 4.3 串的模式匹配算法.
第4章 串 4.1 串的基本概念 4.2 串的存储结构 4.3 串的模式匹配.
数据结构概论 第4章 串 董黎刚 浙江工商大学信电学院 2019年1月18日.
第三章 栈和队列.
第四章串 4.1 串类型定义 4.2 串的表示和实现 4.3 串的模式匹配算法 4.4 串操作应用举例.
第四章 串.
第五章 习题课 电子信息与计算机科学系 曾庆尚.
第4章 串和数组 本章主要介绍下列内容: 串的定义、存储结构和基本运算 数组的定义、基本运算和存储结构 特殊矩阵的压缩存储.
王玲 第 2 章 线性表 王玲 2019/2/25.
第五章 数组 5.1 数组的定义 5.2 数组的表示和实现* 5.3 数组的压缩.
第五章 串和数组 5.1 串的定义和操作 5.2 串的表示和实现 5.3 字符串应用 5.4 字符串匹配算法 5.5 数组
第四章 串.
7.1 广义表的概念 广义表是n(n≥0)个数据元素组成的序列,其中每个数据元素或是单个数据元素(简称原子),或仍然是一个广义表 。
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
C语言版 软件与理论教研室 张泽宝 哈尔滨工程大学计算机科学与技术学院.
第五章 数组和广义表.
顺序表的删除.
线 性 代 数 厦门大学线性代数教学组 2019年4月24日6时8分 / 45.
数 据 结 构 与 算 法.
第五章 串和数组 5.1 串的定义和操作 5.2 串的表示和实现 5.3 字符串应用 5.4 字符串匹配算法 5.5 数组
第5章 数组和广义表 本章主题:多维数组、特殊矩阵和广义表 教学目的:掌握数组和广义表的定义、运算及存储结构 教学难点:矩阵的压缩存储
5.1 串的基本概念 5.2 串的存储结构 5.3 串的基本运算 5.4 模式匹配 5.5 串在文本编辑中的应用
数 据 结 构 刘家芬 Sept 2012.
第四章 串和数组 4.1 串的定义* 4.2 串的表示和实现* 4.3 数组 4.4 数组的压缩.
单链表的基本概念.
顺序查找.
第 四 讲 线性表(二).
第4章 Excel电子表格制作软件 4.4 函数(一).
3.16 枚举算法及其程序实现 ——数组的作用.
第 六 讲 栈和队列(一).
第四章 串 £4.1 串的定义 £4.2 串的顺序存储结构 £4.3 串的链式存储结构 £4.4 串的应用—文本编辑
本 章 说 明 5.1 数组的定义 5.2 数组的顺序表示和实现 5.3 矩阵的压缩存储 5.4 广义表的定义 5.5 广义表的存贮结构
多层循环 Private Sub Command1_Click() Dim i As Integer, j As Integer
线 性 代 数 厦门大学线性代数教学组 2019年5月12日4时19分 / 45.
第五章 串和数组 5.1 串的定义和操作 5.2 串的表示和实现 5.3 正文匹配模式 5.4 正文编辑 5.5 数组 5.6 数组的压缩.
实验目的:掌握数据的顺序存储结构及它们在计算机中的操作。 实验内容:
第四章 串 String
基于列存储的RDF数据管理 朱敏
数据结构概论 第5章 数组和广义表 董黎刚 浙江工商大学信电学院.
Chap 7 数 组 7.1 排序问题 7.2 找出矩阵中最大值所在的位置 7.3 进制转换.
§4.5 最大公因式的矩阵求法( Ⅱ ).
本节内容 1.二叉排序树的定义 2.二叉排序树的查找操作 3.二叉排序树的插入操作 4.二叉排序树的删除操作 5.二叉排序树的总结
第5章 其他线性数据结构.
Presentation transcript:

串和数组

教学目标 了解字符串的基本概念和基本操作; 掌握字符串的基本操作在顺序存储结构上的实现; 了解字符串的基本操作在链式存储结构上的实现; 了解数组的基本概念和基本操作; 掌握二维数组的映像函数; 特殊矩阵的压缩存储

1 串类型的定义 串的定义 串由零个或多个任意字符组成的字符序列。 s=“c1 c2 … cn” 串的长度 空串、空格串 串相等 子串、主串 3/18

串的抽象数据类型定义 ADT String { 数据对象:D={ ai |ai∈CharacterSet, i=1,2,...,n, n≥0 } 数据关系:R1={ < ai-1, ai > | ai-1, ai ∈D, i=2,...,n } 基本操作: SubString (&Sub, S, pos, len) 初始条件:串S存在,1≤pos≤StrLength(S)且 0≤len≤StrLength(S)-pos+1。 操作结果:用Sub返回串S的第pos个字符起长度为len的子串。 StrInsert (&S, pos, T) 初始条件:串S和T存在,1≤pos≤StrLength(S)+1。 操作结果:在串S的第pos个字符之前插入串T。 StrDelete (&S, pos, len) 初始条件:串S存在,1≤pos≤StrLength(S)-len+1。 操作结果:从串S中删除第pos个字符起长度为len的子串。 … } ADT String 4/18

串的最小操作子集 串的最小子集操作 举例说明 串赋值StrAssign 串比较StrCompare 求串长StrLength 求子串SubString 串联接Concat 举例说明 定位函数Index(S,T,pos) 3 = Index(“abbcd”, “bc”,2) 基本思想:在主串S中取从第i(i的初值为pos)个字符起、长度和串T相等的子串。和串T比较,若相等,则求得函数值为i,否则i值增1直至串S中不存在和串T相等的子串为止。 5/18

Index (String S, String T, int pos) int Index (String S, String T, int pos) { if (pos > 0) { n = StrLength(S); m = StrLength(T); for (i = pos; i <= n-m+1; i++) { SubString (sub, S, i, m); if (StrCompare(sub,T) == 0) return i; } // for } // if return 0; // S中不存在与T相等的子串 } // Index 6/18

2 串的表示和实现 定长顺序存储表示 堆分配存储表示 串的块链存储表示 7/18

2.1 定长顺序存储表示 char data[MAXSTRLEN+1] 采用带长度域的结构 typedef struct { int length; } SeqString; 3 a b c a b c d Length=4 8/18

Concat(SString &T,SString S1,SString S2) 基本操作-串的联接算法 Concat(SString &T,SString S1,SString S2) 基本思想 1)两串相连后长度不超过MAXSTRLEN T = S1+S2 2)两串相连后长度超过MAXSTRLEN S1长度 < 最大长度: T = S1+S2.part S1长度 = 最大长度: T= S1 9/18

Concat(SString &T, SString S1, SString S2) Status Concat(SString &T, SString S1, SString S2) { if (S1[0]+S2[0] <= MAXSTRLEN) { // 未截断 T[1..S1[0]] = S1[1..S1[0]]; T[S1[0]+1..S1[0]+S2[0]] = S2[1..S2[0]]; T[0] = S1[0]+S2[0]; uncut = TRUE; } else if (S1[0] < MAXSTRSIZE) { // 截断 T[1..S1[0]] = S1[1..S1[0]]; T[S1[0]+1..MAXSTRLEN] = S2[1..MAXSTRLEN-S1[0]]; T[0] = MAXSTRLEN; uncut = FALSE; } else { // 截断(仅取S1) T[0..MAXSTRLEN] = S1[0..MAXSTRLEN]; uncut = FALSE; } return uncut; } // Concat 10/18

2.2 堆分配存储表示 typedef struct { char *ch; int length; } HString; 11/18

Concat(HString &T, HString S1, HString S2) Status Concat(HString &T, HString S1, HString S2) { if (T.ch) free(T.ch); T.length=S1. length+S2. length; if (!(T.ch = (char *)malloc(T.length*sizeof(char))) exit(OVERFLOW); T.ch[0..S1.length-1]=S1.ch[0 ..S1.length-1]; T.ch[S1.length..T.length-1]=S2.ch[0 ..S2.length-1]; return OK; }//Concat 12/18

2.3 串的块链存储表示 当结点大小大于1时,串尾会出现无效字符。 串值所占的存储位/实际分配的存储位。 结点大小 存储密度 类型定义 2.3 串的块链存储表示 结点大小 当结点大小大于1时,串尾会出现无效字符。 存储密度 串值所占的存储位/实际分配的存储位。 类型定义 #define CHUNKSIZE 3 typedef struct Chunk { // 结点结构 char ch[CHUNKSIZE]; struct Chunk *next; } Chunk; //块定义 typedef struct { // 串的链表结构 Chunk *head, *tail; // 串的头和尾指针 int curlen; // 串的当前长度 } LString; //块链串 13/18

3 串的模式匹配算法 3 = Index(“abbcd”, “bc”,2) 基本概念 3 串的模式匹配算法 3 = Index(“abbcd”, “bc”,2) 基本概念 串的定位操作Index(S,T,pos)称为串的模式匹配。 串S称主串,串T称模式串。 基本思路 从主串的第pos个字符起每次取出长度和模式串相等的子串,将该子串与模式串的字符一一比较。如果成功比较结束,则该子串就是要求的子串,否则从主串的下一个子串重新比较。 14/18

Index(SString S,SString T,int pos) int Index(SString S,SString T,int pos){  i=pos; j=1;  while (i<=S[0]&&j<=T[0]){   if (S[i] = = T[j]) {++i; ++j;} //继续比较下一字符   else { i=i-j+2; j=1;} //指针回溯到第i-j+2个字符  }//while  if (j>T[0]) return i-T[0]; //找到匹配的子串  else return 0; //未找到 } //Index 15/18

4 数组 数组的定义和特点 定义 数组特点 数组运算 数组结构固定 数据元素同构 给定一组下标,存取相应的数据元素 4 数组 数组的定义和特点 定义 ( ) ( ) 数组特点 数组结构固定 数据元素同构 数组运算 给定一组下标,存取相应的数据元素 给定一组下标,修改数据元素的值

数组的顺序存储结构 次序约定 a11 a12 …….. a1n a11 a12 …….. a1n a21 a22 …….. a2n 以行序为主序 以列序为主序 a11 a12 …….. a1n a21 a22 …….. a2n am1 am2 …….. amn …………………. Loc( aij)=Loc(a11)+[(i-1)n+(j-1)]*l   按行序为主序存放 amn …….. am2 am1 ………. a2n a22 a21 a1n ……. a12 a11 1 n-1 m*n-1 n   按列序为主序存放 1 m-1 m*n-1 m amn …….. a2n a1n ………. am2 a22 a12 am1 ……. a21 a11 a11 a12 …….. a1n a21 a22 …….. a2n am1 am2 …….. amn …………………. Loc(aij)=Loc(a11)+[(j-1)m+(i-1)]*l

4.1 矩阵的压缩存储 特殊矩阵 对称矩阵 三角矩阵 对角矩阵 稀疏矩阵 18/16

对称矩阵 按行序为主序: 1 2 9 7 4 6 … 5 a11 a21 a22 a31 a32 an1 ann …... k=0 1 2 3 4 n(n-1)/2 n(n+1)/2-1 按行序为主序:

三角矩阵 ann c … an2 an1 a33 a32 a31 a22 a21 a11 按行序为主序: 上三角阵           下三角阵           ann c … an2 an1 a33 a32 a31 a22 a21 a11 a11 a21 a22 a31 a32 an1 ann …... k=0 1 2 3 4 n(n-1)/2 n(n+1)/2-1 按行序为主序:

带状矩阵 带状矩阵压缩存储作为课后作业。

稀疏矩阵 设在m×n矩阵中,有 t 个数据元素不为零,则通常认为当 时,称该矩阵为稀疏矩阵,其中δ称稀疏因子。 数据类型 i j v 1 1 1 15 2 1 4 22 3 1 6 -15 4 2 2 11 5 2 3 3 6 3 4 6 7 5 1 91 数据类型 typedef struct { int i,j; //非零元素的行、列 ElemType e; //非零元素值 }SPNode; //三元组类型 typedef struct { int mu,nu,tu; SPNode data[SMAX+1]; //data[0]未用 } SPMatrix; //三元组表的存储类型 //矩阵的行、列和非零元素的个数

作业与实验 作业 设用顺序存储结构存储字符串S1和S2,要求设计一个函数完成对两个字符串的比较。若S1>S2时则返回正数;若S1=S2时则返回0;若S1<S2时则返回负数。 用顺序存储结构实现在字符串S中删除所有其值等于ch的字符的算法。 设单链表中存放n个字符,试设计算法判断字符串是否关于中心对称。

作业与实验 设有n行n列的对称矩阵A,每个数组元素占L个字节的存储单元,按行的顺序将下三角矩阵中的元素(包括对角线上的元素)存放在n*(n+1)/2个存储单元中,已知A[0][0]的地址为1000,则A[i][j](i>=j)的地址是多少? 设有n行n列的三对角矩阵A,每个数组元素占L个字节的存储单元,按照从上到下从左到右的顺序将三条对角线上的元素存放在3n-2个连续的存储单元中,已知A[0][0]的地址为1000,则三对角线上元素A[i][j]的地址是多少?