《大话数据结构》读书笔记

news/2024/4/24 17:26:52/文章来源:https://blog.csdn.net/m0_64799907/article/details/129168365

内容摘要

指针

链表

对插入或删除数据频繁的操作,优势明显

  • LinkList p; 声明指针p
  • 指针插入时,应先将p的后继结点改为s(插入元素)的后继结点,再将结点s变成p的后继结点(插入元素先接后,再接前)
  • 指针删除时,将p的后继结点改成p的后继的后继结点 (删除元素后元素绕前)
  • 双向链表插入元素时,先搞定S(插入元素)的前驱和后继,再搞定后结点的前驱,最后解决前结点的后继
  • p->next 下一个结点
  • p->data p本身的值
  • p->prior p的前驱
  • ListLength() 求线性表的长度
  • GetElem() 对于单链表实现获取第i个元素的数据的操作
  • LocateElem() 获得元素位置

结点

  • s = ( LinkList ) malloc ( sizeof ( Node ) ) 生成新结点 ( C标准函数 )
  • free() 系统回收结点,释放内存

  • 栈是限定仅在表尾进行插入和删除操作的线性表
  • 后进先出(UIFO结构)
  • 递归用栈实现,存储数据,后又以存储的次序恢复数据
  • Push(*S,e) 插入元素e到栈S中并成为栈顶元素
  • Pop(*S,*e) 删除栈S中栈顶元素,并用e
  • InitStack(*S) 创建空栈
  • DestroyStack(*S) 销毁栈
  • ClearStack(*S) 清空栈
  • StackEmpty(*S) 栈为空,返回true;不为空,输出false
  • GetTop(S,*e) 栈存在且非空,用e返回S的栈顶元素
  • StackLength(S) 返回栈S的元素个数

链栈

  • 链栈不需要头结点,因为栈顶在头部
  • LinkStackPtr s = ( LinkStackPtr ) malloc ( sizeof ( StackNode ) )

队列

  • 队列只允许在一端插入,另一端删除的线性表
  • 先进先出 ( FIFO )
  • 允许插入的叫队尾,允许删除的叫队头
  • InitQueue(*Q) 建立空队伍Q
  • DestroyQueue(*Q) 销毁队列Q
  • ClearQueue(Q) 将队列Q清空
  • QueueEmpty(Q) 队列Q为空,返回true,否则返回false
  • GetHead(Q,*e) 若队列Q存在且非空,用e返回队列Q的队头元素
  • EnQueue(*Q,e) 若队列Q存在,插入新元素e到队列Q中并成为队尾元素
  • DeQueue(*Q,*e) 删除队列Q中的对头元素,并用额返回其值
  • QueueLength(Q) 返回队列Q的元素个数
  • 循环队列满的条件( rear + 1 ) % QueueSize == front
  • 队列长度公式( rear - front + QueueSize )% QueueSize
  • QueuePtr front,rear 定义队头,队尾指针

字符串

  • StrAssign ( T , *chars ) 生成一个其值等于字符串常量chars的串T
  • StrCopy ( T , S ) 串S存在,由串S复制得串T
  • ClearString ( S ) 串S存在,将串清空
  • StringEmpy ( S ) 若串S为空,返回true,否则为false
  • StrLength ( S ) 返回串S的元素个数,即串的长度
  • StrCompare ( S , T ) 若S>T,返回值>0,若S=T,返回0,若S<T,返回值<0
  • Concat ( T,S1,S2 ) 用T返回由S1和S2联接而成的新串
  • SubString(Sub,S,pos,len) 串S存在,1<=pos<=StrLength(S), 且0<=len<=StrLength(S)–pos+1,用Sub返回串S的第pos个字符起长度为len的子串
  • Index(S,T,pos) 串S和T存在,T是非空串,1<=pos<=StrLength(S)。若主串S中存在和串T值相同的子串,则返回它在主串S中第pos个人字符之后第一次出现的位置,否则返回0。
  • Replace(S,T,V) 串S、T、V存在,T是非空串,用V代替主串S中出现的所有与T相等的不重叠的子串。
  • StrInsert(S,pos,T) 串S和T存在,1<=pos<=StrLength(S)+1。在串S的第pos个字符之前插入串
  • StrDelete(S,pos,len) 串S存在,1<=pos<=StrLength(S)-len+1。从串S中删除第pos个字符起长度为len的子串
  • 串的链式存储结构在连接串与串操作时方便
  • 串的链式存储结构不如顺序存储灵活,性能不如顺序结构好
  • reverse() 逆转操作

  • 堆可由C语言的动态分配函数malloc()和free()管理

C#

  • ToLower() 转小写
  • ToUpper() 转大写
  • IndexOf() 从左查找子串位置(操作名有修改)
  • LastIndexOf() 从右查找子串位置
  • Trim() 去除两边空格

随机数

  • srand ( time(0) ) 随机种子
  • rand()%i+1 随机生成1~i的数

数组

  • 数组元素由data和cur(游标)组成,游标相当于单链表中的next指针
  • 用数组描述的链表叫静态链表(游标实现法)
  • Malloc_SSL() 获得空闲分量的下标

KMP模式匹配算法

  • KMP模式匹配算法就是为了让没必要的回溯发生

  • InitTree(*T) 构造空树T
  • DestroyTree(*T) 销毁数T
  • CreateTree(*T,definition) 按definition中给出树的定义来构造树
  • ClearTree(*T) 若树T存在,将树T清为空树
  • TreeEmpty(T) 若T为空树,返回true,否则返回false
  • TreeDepth(T) 返回T的深度
  • Root(T) 返回T的根节点
  • Value(T,cur_e) cur_e是树T的一个结点,返回此结点的值
  • Assign(T,cur_e,value) 给树的结点cur_e赋值为value
  • Parent(T,cur_e) 若cur_e是树T的非根结点,则返回它的双亲,否则返回空
  • LeftChild(T,cur_e) 若cur_e是树T的非叶结点,则返回它的最左孩子,否则返回空
  • RightSibling(T,cur_e) 若cur_e有右兄弟,则返回它的右兄弟,否则返回空
  • InsertChild(*T,*p,i,c) 其中p指向树T的某个结点,i为所指结点p的度加上1,非空树c与T不相交,操作结果为插入c为数T中p指结点的第i棵子树
  • DeleteChild(*T,*p,i) 其中p指向树T的某个结点,i为所指结点p的度,操作结果为删除T中的p所指结点的第i棵子树

线索二叉树

  • 线索化的过程就是在遍历的过程中修改空指针的过程

本书免费访问路径

https://juejin.cn/post/6924311052540739592

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_75652.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一文吃透 Spring 中的 AOP 编程

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

【C++】二叉搜索树的模拟实现

一、概念 二叉搜索树又称二叉排序树&#xff0c;它或者是一棵空树&#xff0c;或者是具有以下性质的二叉树: 若它的左子树不为空&#xff0c;则左子树上所有节点的值都小于根节点的值若它的右子树不为空&#xff0c;则右子树上所有节点的值都大于根节点的值它的左右子树也分别…

开源ZYNQ AD9361软件无线电平台

&#xff08;1&#xff09; XC7Z020-CLG400 &#xff08;2&#xff09; AD9363 &#xff08;3&#xff09; 单发单收&#xff0c;工作频率400MHz-2.7GHz &#xff08;4&#xff09; 发射带PA&#xff0c;最大输出功率约20dbm &#xff08;5&#xff09; 接收带LNA&#xff0c;低…

Linux学习(9.1)文件系统的简单操作

以下内容转载自鸟哥的Linux私房菜 原文&#xff1a;鸟哥的 Linux 私房菜 -- Linux 磁盘与文件系统管理 (vbird.org) 磁盘与目录的容量 df&#xff1a;列出文件系统的整体磁盘使用量&#xff1b;du&#xff1a;评估文件系统的磁盘使用量(常用在推估目录所占容量) df du 实体…

微信小程序 《新闻列表》 案例

目录&#xff1a;一&#xff0c;步骤。要求1&#xff1a;主页头部的轮播图要求2&#xff1a;中间内容上的信息案列排版。要求3&#xff1a;上拉加载内容。要求4&#xff1a;在信息加载完成后&#xff0c;给用户提示二&#xff0c;过程中要注意的几点。1.在微信小程序中&#xf…

HNU工训中心:电子开关与信号隔离

工训中心的牛马实验 1.实验目的&#xff1a; 1) 认识三极管和MOS管构成三端电子开关电路&#xff1b; 认识信号隔离的继电器和光电隔离方式。 2) 认识施密特触发器&#xff0c;掌握一种波形变换方法。 3) 实现一种脉冲波形发生器。 2.实验资源 HBE硬件基础电路实验箱、示波…

第八节 构造器和this关键字、封装

构造器的作用 定义在类中的&#xff0c;可以用于初始化一个类的对象&#xff0c;并返回对象的地址。 构造器的注意事项 1.任何类定义出来&#xff0c;默认就自带了无参数构造器&#xff0c;写不写都有。 2.一旦定义了有参数构造器&#xff0c;那么无参数构造器就没有了&#xf…

Adversarially-Aware Robust Object Detector

目标检测作为计算机视觉的基本任务&#xff0c;随着深度神经网络的出现而取得了显著的进展。然而&#xff0c;很少有研究在各种现实场景中探索目标检测器抵抗对抗攻击的对抗鲁棒性。探测器已经受到不可察觉的扰动的极大挑战&#xff0c;在干净图像上的性能急剧下降&#xff0c;…

记录pytorch安装 windows10 64位--(可选)安装paddleseg

安装完paddlepaddle之后&#xff0c;就可以安装paddleseg了。一、安装Git可以参考这个网址&#xff1a;https://blog.csdn.net/u010348546/article/details/124280236windows下安装git和gitbash安装教程二、安装paddleseghttps://github.com/PaddlePaddle/PaddleSeg记得翻墙啊这…

Ubuntu 交叉编译工具链安装

Ubuntu 交叉编译工具链安装 1 交叉编译器安装 ARM 裸机、Uboot 移植、Linux 移植这些都需要在 Ubuntu 下进行编译&#xff0c;编译就需要编译器&#xff0c;我们在第三章“Linux C 编程入门”里面已经讲解了如何在 Liux 进行 C 语言开发&#xff0c;里面使用 GCC 编译器进行代…

试题 算法训练 JOE的矩阵

问题描述 最近JOE又在线性代数的模拟考中拿满分了&#xff0c;这直接导致了JOE对于计算矩阵的热情急剧下降&#xff0c;所以JOE希望能有这样一个程序能帮助他计算矩阵的秩。 输入格式 第一行&#xff0c;两个数n,m&#xff0c;表示矩阵是n*m的。   下面共n行&#xff0c;每行…

Airbnb(三) Managing Diversity in Airbnb Search 搜索多样性

abstract 搜索系统中一个长期的问题是结果多样性。从产品角度讲&#xff0c;给用户多种多样的选择&#xff0c;有助于提升用户体验及业务指标。 多样性需求和模型的目标是相矛盾的&#xff0c;因为传统ctr模型是 point wise&#xff0c;只看单个相关性不管相邻之间item差异。 …

设计模式-笔记

文章目录七大原则单例模式桥模式 bridge观察者模式 observer责任链模式 Chain of Responsibility命令模式 Command迭代器模式 Iterator中介者模式 Mediator享元模式 Flyweight Pattern组合模式 composite装饰模式 Decorator外观模式 Facade简单工厂模式工厂方法模式工厂抽象模式…

数学小课堂:无穷小(平均速度和瞬间速度的关系)

文章目录 引言I 速度1.1 平均速度1.2 瞬间速度(某一时刻特定的速度)1.3 解释飞箭是静止的悖论II 导数2.1 概念2.2 导数的现实影响2.3 微积分的意义III 无穷小3.1 贝克莱挑战牛顿(无穷小悖论)3.2 无穷小的定义引言 柯西和魏尔斯特拉斯给出的无穷小的定义: 它不是零;它的绝对…

【GUI】Robo 3T(Studio 3T Free) for Mongodb安装与使用教程

下载 robo 3T现已更名为studio 3T free&#xff0c;官网即可下载 studio 3T free下载地址 安装 mac电脑下载的是dmg安装包&#xff0c;直接正常安装即可&#xff0c;windows电脑也是一样的&#xff0c;不需要配置环境&#xff0c;安装即可使用。&#xff08;前提是你已经安装…

什么是接口测试,我们如何实现接口测试?

1. 什么是接口测试 顾名思义&#xff0c;接口测试是对系统或组件之间的接口进行测试&#xff0c;主要是校验数据的交换&#xff0c;传递和控制管理过程&#xff0c;以及相互逻辑依赖关系。其中接口协议分为HTTP,WebService,Dubbo,Thrift,Socket等类型&#xff0c;测试类型又主…

SkyWalking简介和安装

APM系统 早期的监控系统功能比较单一&#xff0c;主要以监控CPU、内存、网络、I/O等基础设置为主&#xff08;cacti、nagios&#xff09; 后来随着中间件技术的不断发展&#xff0c;监控系统也开始监控缓存、数据库、MQ等各种基础组件的性能&#xff08;zabbix、prommethus&a…

【MinIO】文件断点续传和分块合并

【MinIO】文件断点续传和分块合并 文章目录【MinIO】文件断点续传和分块合并0. 准备工作1. 检查文件是否存在1.1 定义接口1.2 编写实现方法2. 检查分块文件是否存在2.1 定义接口2.2 编写实现方法3. 上传分块文件接口3.1 定义接口3.2 编写实现方法4. 合并分块文件接口4.1 定义接…

Python - Opencv应用实例之CT图像检测边缘和内部缺陷

Python - Opencv应用实例之CT图像检测边缘和内部缺陷 将传统图像处理处理算法应用于CT图像的边缘检测和缺陷检测,想要实现效果如下: 关于图像处理算法,主要涉及的有:灰度、阈值化、边缘或角点等特征提取、灰度相似度变换,主要偏向于一些2D的几何变换、涉及图像矩阵的一些统…

java中使用protobuf总结

基本没怎么接触过java编程&#xff0c;别的团队发过来一个用java编写的存储pb的文件&#xff0c;让拆分和解析&#xff0c;硬着头皮做一下&#xff0c;在此将步骤做个记录&#xff1a;下载安装protobufhttps://github.com/protocolbuffers/protobuf/tags?afterv3.6.1.2编译pro…