数据结构——串 1/15.

Slides:



Advertisements
Similar presentations
数据结构的引入. 通讯录管理 社团机构管理 校园导航管理 通讯录管理 社团机构管理 校园导航管理.
Advertisements

1 門市服務丙級技術士 技能檢定介紹 門市服務丙級技術士報告注意事項 證照名稱:門市服務丙級技術士 發照單位:行政院勞工委員會 有效期限:終生有效 考照時間:每年一次,皆為第一梯次 1. 簡章與報名書表發售時間:每年 1 月 2. 報名時間:每年 1 月。 3. 學科考試時間:每年 3.
生源地助学贷款系统还款功能优化说明 评审三局 2015年5月.
Ch17 績效管理 章首個案:員工績效管理:奇異強迫排名,3M的15%「私釀酒」時間 17.1 績效管理的意義 17.2 績效管理的流程
二、信用工具和外汇.
为您扬帆,助您远航! 徽商银行特色新产品介绍. 为您扬帆,助您远航! 徽商银行特色新产品介绍.
公务卡使用说明.
教 师:曾晓东 电 话: E_mail: 计算机软件技术基础 教 师:曾晓东 电 话: E_mail:
财务知识培训 杨 秀 玲 2014年10月.
近代的中华民族可谓多灾多难,饱受了西方列强的侵略。在前两课的学习中,我们已经了解了西方列强发动的两次侵略战争,下面我们来简单地回顾一下,这两次战争的名字叫什么?侵略者分别是谁? 在中国近代史上,侵略中国时间最长、危害最大的是哪个国家?
第一章会计技能的内容 1.1会计技能的重要性.
第三章 鏈結串列 Linked List.
復健護理實務與發展 授課老師:林惠卿.
補充: Input from a text file
数据结构——树和二叉树 1/96.
数据结构与算法 (C++语言版) 第4章 串.
第8章 字串與陣列 8-1 字串處理 8-2 一維陣列的處理 8-3 建立多維陣列 8-4 不規則陣列與參數傳遞 8-5 陣列排序與搜尋.
第九章 字符串.
Linked List Operations
單向鏈結串列 Singly Linked Lists.
第四章 串 2018/11/13.
第4章 串 串的基本概念和C语言的串函数 串的存储结构 动态数组实现的顺序串 串的模式匹配算法——BF算法 主要知识点.
数据结构 Data Structure 主讲人:王国军,郑瑾 中南大学 中南大学信息院计科系
第4章 串、数组和广义表 丽水学院工学院.
Hadoop I/O By ShiChaojie.
补充内容 结构体 概述 定义结构体类型和定义结构体变量 结构体变量的引用 结构体变量的初始化 指针与结构体 用typedef定义类型的别名.
第12章 樹狀搜尋結構 (Search Trees)
数据结构 第4章 串.
第三章 C++中的C 面向对象程序设计(C++).
第四章 串和数组(一) 1/.
串和数组.
第4章 串 4.1 串的基本概念及其抽象数据 4.2 串的存储结构 4.3 串类 4.4 串的模式匹配算法.
数 据 结 构 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日.
6.6 Huffman树及其应用 王 玲.
第四章串 4.1 串类型定义 4.2 串的表示和实现 4.3 串的模式匹配算法 4.4 串操作应用举例.
第四章 串.
資料結構 第4章 堆疊.
第4章 串和数组 本章主要介绍下列内容: 串的定义、存储结构和基本运算 数组的定义、基本运算和存储结构 特殊矩阵的压缩存储.
第五章 串和数组 5.1 串的定义和操作 5.2 串的表示和实现 5.3 字符串应用 5.4 字符串匹配算法 5.5 数组
第四章 串.
7.1 广义表的概念 广义表是n(n≥0)个数据元素组成的序列,其中每个数据元素或是单个数据元素(简称原子),或仍然是一个广义表 。
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
1.3 C语言的语句和关键字 一、C语言的语句 与其它高级语言一样,C语言也是利用函数体中的可执行 语句,向计算机系统发出操作命令。按照语句功能或构成的不 同,可将C语言的语句分为五类。 goto, return.
顺序表的删除.
C++语言程序设计 C++语言程序设计 第六章 指针和引用 第十一组 C++语言程序设计.
第五章 串和数组 5.1 串的定义和操作 5.2 串的表示和实现 5.3 字符串应用 5.4 字符串匹配算法 5.5 数组
5.1 串的基本概念 5.2 串的存储结构 5.3 串的基本运算 5.4 模式匹配 5.5 串在文本编辑中的应用
数 据 结 构 刘家芬 Sept 2012.
第四章 串和数组 4.1 串的定义* 4.2 串的表示和实现* 4.3 数组 4.4 数组的压缩.
单链表的基本概念.
顺序查找.
第 四 讲 线性表(二).
本教學投影片係屬教科書著作之延伸,亦受著作權法之保護。
字符串 (String) 字符串是 n (  0 ) 个字符的有限序列, 记作 S = “c1c2c3…cn” 其中,S 是串名字
課稅負擔的歸屬.
<编程达人入门课程> 本节内容 为什么要使用变量? 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ:
3.16 枚举算法及其程序实现 ——数组的作用.
第四章 串 £4.1 串的定义 £4.2 串的顺序存储结构 £4.3 串的链式存储结构 £4.4 串的应用—文本编辑
2.6 字符型数据 一、 字符常量 1、字符常量的定义 用一对单引号括起来的单个字符,称为字符常量。 例如,‘A’、‘1’、‘+’等。
第五章 串和数组 5.1 串的定义和操作 5.2 串的表示和实现 5.3 正文匹配模式 5.4 正文编辑 5.5 数组 5.6 数组的压缩.
第四章 串 String
基于列存储的RDF数据管理 朱敏
本节内容 动态链接库 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
第5章 其他线性数据结构.
Presentation transcript:

数据结构——串 1/15

第四章 串 知识点:串的定义、表示与实现,定位函数 2/15

第四章 串 4.1 串类型的定义 4.2 串的表示和实现 4.3 串的模式匹配算法 4.4 串操作应用举例 3/15

4.1 串类型的定义 串 一对单引号括起的字符序列,如“abcd ef” 一般地,串是由零个或多个字符组成的有限序列 一些概念:串的长度、空串、子串、主串、 字符/子串在串/主串中的位置 如:S=“Data Structure”,S为串名,“Data Structure”为串值,长度为14;“ata Str”为主串S的子串,它在S中的位置为2 称两个串是相等的,当且仅当这两个串的值相等。 空格串 vs. 空串Ø 是特殊的线性表 1)元素类型为字符; 2)操作对象:个体(字符)与整体(子串) 4/15

4.1 串类型的定义-ADT String ADT String 串的整体操作 赋值 StrAssign(S, “Data Structure”) 复制 StrCopy(T, S) // T<=S, T为“Data Structure” 比较 StrCompare(S, T) 连接 Concat(T, “Data”, “Structure”) //T为“DataStructure” 取子串 SubString(sub, S, 2, 5) // sub为“ata S” 子串在主串中的定位 Index(S, “a”, 3) // 4 子串置换 Replace(S, “a”, “b”) // S为“Dbtb Structure” 子串插入 StrInsert(S, 3, “aha”) // “Daahata Structure” 子串删除 StrDelete(S, 3, 5) // “Daructure” 5/15

4.1 串类型的定义-操作间的关系 串的最小操作子集 赋值、求串长、比较、联接、取子串 定位函数 Index(S, T, pos) int Index(String S, String T, int pos) { if (pos>0){ // pos的合法性 n = StrLength(S); m = StrLength(T); i = pos; while( i<=n-m+1) { SubString(sub, S, i, m); if (StrCompare(sub, T) != 0) ++i; else return i; // 返回子串在主串中的位置 } // while } // if return 0; // S中不存在与T相等的子串 } // Index 6/15

4.2 串的表示和实现-定长顺序存储 定长顺序存储表示----顺序映像 类型定义 typedef unsigned char SString[MAXSTRLEN+1]; 约定:1) 下标为0的分量存放串的长度 或 2)串值后加入一个不计入串长的结束标记字 符,如C语言中的'\0' 串联接Concat(&T, S1, S2) ∵是定长存储,联接后T的串长为S1和S2串长之和,该长度可能会超出MAXSTRLEN ∴分情况处理,超出部分要“截断” 7/15

4.2 串的表示和实现-定长顺序存储 串联接Concat(&T, S1, S2) S1[0]>=MAXSTRLEN T[1..MAXSTRLEN]=S1[1..MAXSTRLEN]; T[0] = MAXSTRLEN; //S2全被截去 S1[0]<MAXSTRLEN && S1[0]+S2[0] > MAXSTRLEN T[1..S1[0]]=S1[1..S1[0]]; T[S1[0]+1.. MAXSTRLEN]=S2[1..MAXSTRLEN-S1[0]]; T[0]=MAXSTRLEN; //S2部分截断 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]; 8/15

4.2 串的表示和实现-定长顺序存储 求子串SubString(&Sub, S, pos, len) 评价 串长超出最大长度,约定采用截尾法 合法的pos和len pos>0 && len>=0 && pos<= S[0]-len+1 串的复制 Sub[1..len]=S[pos..pos+len-1]; Sub[0]=len; 评价 串长超出最大长度,约定采用截尾法 串长过小,则串空间浪费较大 9/15

4.2 串的表示和实现-堆分配存储 堆分配存储表示----顺序映像 类型定义 typedef struct { char *ch; // 串值所在的存储区的起始地址 int length; // 串长度 } HString; 一些操作的实现 基于复制 利用malloc()分配一块足够的空间,再按要求完成复制;如StrAssign(&T,chars), Concat(&T, S1, S2), SubString(&Sub, S, pos, len) 10/15

4.2 串的表示和实现-堆分配存储 堆分配存储表示----顺序映像 一些操作的实现 评价 基于动态存储管理 建立串名和串值的映射关系 基于链接 建立串名和串值的映射关系, 如: StrAssign(&T, chars) 评价 基于动态存储管理 建立串名和串值的映射关系 处理方便、串值共享 11/15

4.2 串的表示和实现-块链存储 块链存储表示----链式映像 sizeof(char) < sizeof(链域)  存储密度不高 存储密度 = 串值所占的存储位/实际分配的存储位 类型定义 typedef struct Chunk { char ch[CHUNKSIZE]; struct Chunk *next; } Chunk; typedef struct { Chunk *head, *tail; // 串的头和尾指针 int curlen; // 串的当前长度 } LString; 12/15

4.2 串的表示和实现-块链存储(续) 存储密度的影响 存储密度小,运算处理方便,但存储占用量大 评价 存储密度较低 块链使串的操作复杂化 顺序映像的缺点 空间利用率低 空间不可扩充,使串的某些操作(联接、置换)受到限制 插入、删除、置换操作带来的移动 13/15

4.3 串的模式匹配算法 求子串位置的定位函数 Index(S, T, pos) ——模式匹配(T:模式串) 基于堆分配存储的算法 int Index( HString S, HString T, int pos ){ i = pos; j = 1; while ( i<=S.length && j<=T.length ){ if ( S.ch[i]==T.ch[j] ) { i++; j++; } //继续比较后继字符 else { i = i- j+2; j = 1;} // 指针后退重新开始匹配 } if ( j>T.length) return (i – T.length); else return 0; } 14/15

4.4 串操作应用举例 文本编辑 建立词索引表 处理规则:行插入/删除,页插入/删除,…… 数据结构:页表、行表(行号,起始地址,长度) 词表——书名中的关键词集合 关键词索引表 15/15