6.串、数组、广义表
思考
一.什么是串、数组、广义表?(What)
1.串的定义
1.串:
2.子串、真子串:
3.字符位置、子串位置、空格串
4.串相等
2.案例引入
3.串的类型定义、存储结构及其运算
1.类型定义
2.存储结构
3.串的运算
4.数组
1.一维数组
2.二维数组
3.三维数组
4.n维数组的抽象数据类型
5.基本操作
6.计算a[i]地址
7.行存储
8.列存储
9.二维数组中a[i][j]的存储位置
10.三维数组中a[i][j][k]的存储位置
11.多维数组存储位置地址
5.对称压缩矩阵存储
6.广义表
1.广义表的定义
2.表头、表尾、长度
3.深度
4.求表头、求表尾
7.案例分析与实现
二.为什么需要串、数组、广义表?(Why)
1.串
2.数组
3.广义表
三.如何学好串、数组、广义表?(How)
数据结构很重要!
数据结构很重要!!!
数据结构很重要!!!!
思考
1.什么是串、数组、广义表?(What)
2.为什么需要串、数组、广义表?(Why)
3.如何学好串、数组、广义表?(How)
注:特别感谢青岛大学王卓老师
第4章 串、数组和广义表.pdf
一.什么是串、数组、广义表?(What)
1.串的定义
1.串:
2.子串、真子串:
3.字符位置、子串位置、空格串
空串:"" 什么都没有
空格串:“ ”有一个空格
4.串相等
2.案例引入
3.串的类型定义、存储结构及其运算
1.类型定义
2.存储结构
1.顺序存储结构(用的更多)
一般串只做匹配多些
#define MAXLEN 255
typedef struct{
char ch[MAXLEN+1];
int length;
}
2.链式存储结构
#define ChunkSize 80
typedef struct Chunk{ //定义块大小
char ch[CHUNKSIZE];
struct Chunk *next;
}Chunk;
typedef struct{
Chunk *head , *tail;
int clen;
}LString ; //字符串的块链结构
3.串的运算
1.BF算法
i=i-j+2=i-(j+1)+1
i,j:移动的格数 3格,但j是4,所以-1
i-(j+1): 移动几格,往后退几格
int Index_BF(SString S, SString T,int pos){
int 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;
}
最坏时间复杂度:
2.KMP算法
4.数组
1.一维数组
2.二维数组
声明格式:
3.三维数组
4.n维数组的抽象数据类型
5.基本操作
数组:结构固定
基本操作:
1.初始化、销毁、取元素、修改元素
2.一般不做插入、删除
顺序存储
6.计算a[i]地址
a+i*L (i>0)
7.行存储
8.列存储
9.二维数组中a[i][j]的存储位置
求A[3][3]存放在哪个位置?
L=1,每个字节的大小为1
a[i][j]存储位置:
Loc(i,j)=LoC(0,0) + (n*i+j)*L
10.三维数组中a[i][j][k]的存储位置
11.多维数组存储位置地址
5.对称压缩矩阵存储
1.对称矩阵
2.三角矩阵
3.对角矩阵
4.稀疏矩阵储存
稀疏矩阵的链式存储结构
6.广义表
1.广义表的定义
广义表又称列表List,是n=>0个有限序列。
2.表头、表尾、长度
3.深度
展开后所包含括号的重数
4.求表头、求表尾
7.案例分析与实现
二.为什么需要串、数组、广义表?(Why)
1.串
可以做字符匹配
2.数组
数组很常见,而且可以存放不同维度的数据,方便取值和查值。
3.广义表
又称List集合,可以存储多个不同类型的数据。
三.如何学好串、数组、广义表?(How)
1.chunk it up:指的是把要学习的知识点进行切碎,变成一个有机的整体。
先学底层一个个小知识点,不断积累,一点点串成烤串。(听课)
2.deliberate practicing:做刻意练习,多做题,多实践。
自己练习、梳理、总结(做)
3.feedback:一种是主动式反馈,还有一种叫被动式反馈。
a.主动式反馈:主动去学习,看到别人,原来这个地方可以这么写,这么写之后就特别的漂亮,而且的话程序跑的也很快。(思)
b.被动式反馈:code review。如说这是faker的直播的视角,通过他看,你看他怎么操作,你会知道哦,原来为什么他这么强或者什么?什么地方要学习?(学)
搞清楚,串、数组、广义表的定义,各种操作,扎实基础。
清楚串、数组、广义表的联系与区别。
用心
用心、用心
用心、用心、用心
知其然、知其所以然!!!
多学习,多思考,多总结,多输出,多交流 (five kills)~~~
6.串、数组、广义表相关推荐
- C语言数据结构-数组广义表-十字链表-实现十字链表的初始化操作-实现十字链表的删除操作
十字链表 十字链表相关定义如下: typedef int ElemType;// 非零元素结点结构 typedef struct OLNode {int row,col;ElemType value; ...
- 数据结构之数组与广义表
目录 联系 数组 广义表 联系 数组和广义表可看作一种扩展的线性数据结构,其特殊性在于数据元素的构成上.从组成线性表的元素角度看,数组是由具有某种结构的数据元素构成,广义表则是由单个元素或子表构成的. ...
- 【数据结构总结】第四章:串、数组和广义表(线性结构)
第四章:串.数组和广义表(线性结构) 提示:本文主要是以思维导图的形式概括数据结构第一章的精华内容,基本不会用到文字性的内容,目的是为了给大家梳理每个重要的知识点的相关概念,方便大家在复盘的时候快速阅 ...
- 二维数组m的元素是4个字符组成的串_串、数组和广义表
1. 串 1.1 串的定义 ADT String{ 数据对象:D={ai|ai∈CharacterSet, i=1, 2, -, n, n≧0} 数据关系:R1={|ai-1, ai∈D, i=2, ...
- 《数据结构》第四章串,数组和广义表
<数据结构>第四章 文章目录 <数据结构>第四章 4.1 串的定义 4.2 案例引入 4.3 串的类型定义,存储结构及其运算 4.3.1 串的抽象类型定义 4.3.2的存储结构 ...
- 《数据结构》-第四章 串、数组和广义表(习题)
第四章 串.数组和广义表练习题 本章考点较少易于掌握,对于串的重点考点为串的模式匹配算法:数组的主要考点为数组下标与存储地址计算和特殊矩阵的压缩存储方法:针对广义表的考点主要为在广义表中取原子项(表) ...
- 数据结构(C语言第2版) 课后习题答案之第四章 串、数组和广义表
目录 第4章 串.数组和广义表 1.选择题 (1)串是一种特殊的线性表,其特殊性体现在( ). (2)串下面关于串的的叙述中,( )是不正确的? (3)串"ababaaababaa&q ...
- 数据结构:串、数组和广义表
串 线性结构:线性表.栈和队列.串与数组和广义表 串的逻辑结构和线性表极为相似,区别仅在于串的数据对象限定为字符集.在基本操作上,串和线性表有很大差别.线性表的基本操作主要以单个元素作为操作对象,如查 ...
- 数据结构-串、数组、广义表
串.数组.广义表 XDOJ0224 矩阵相乘 XDOJ0250 螺旋填数 XDOJ0257 公共子串 XDOJ0287 求矩阵中的马鞍点 XDOJ0288 求一个顺序串的next函数值 XDOJ029 ...
- 数据结构串、数组和广义表
整本书的知识点,点击右方链接:整本书笔记知识点 文章目录 四.串.数组和广义表 4.1.串的定义 4.2.案例引入 4.3.串的类型定义.存储结构及其运算 4.3.1.串的抽象类型定义 4.3.2.串 ...
最新文章
- 什么是Java Marker Interface(标记接口)
- price change SAT trace
- .NET 6新特性试用 | 文件范围的命名空间
- 看到一个暴强的翻译,闲的蛋疼,写个c#版的
- 初学者python笔记(静态属性、类方法、静态方法、类的组合)
- Oracle数据库异常---OracleDBConsoleorcl无法启动
- 在ASP.NET MVC应用程序中实现Server.Transfer()类似的功能
- Go 判断元素是否在切片中
- 路由协议之间的经典对比
- [Flink]Flink的window介绍
- TypeScript:函数基础
- 数据通信技术初级工程师证题库
- 推荐一个互联网电子书免费下载网站
- JRuby: Wiki: RailsWithH2InJNDIOnJetty — Project Kenai
- win8.1配置java环境
- 小程序接口加密时去除昵称数据含有的reshuffle表情(例如emoji)
- C语言深度剖析——关键字sizeof、整型数据存储深入、数据类型取值范围深入
- gophish企业内部钓鱼邮件测试
- ios底部栏设计规范_iPhone6界面设计尺寸规范大全【含原型设计规范】
- 可信认证之九阴真经一