![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
超详细最全数据结构个人笔记
文章平均质量分 81
超详细最全数据结构个人笔记 同志们 我与你们同在!
从此不叫無名
路漫漫其修远兮 吾将上下而求索
展开
-
超详细最全数据结构个人笔记【哈希表】
哈希表是一种为了提高查找效率的数据存储方式,其核心思想就是将节点的存储位置与节点本身对应起来,让我们在查找数据时无需通过比对就能直接计算得到它的位置。原创 2024-05-29 23:20:45 · 722 阅读 · 0 评论 -
超详细最全数据结构个人笔记【平衡二叉树】
平衡二叉树又称AVL树,它或者是一棵空树,或者是具有以下特性的二叉排序树(BST)(1) 它的左子树或者右子树都是平衡二叉树(2) 左子树和右子树的深度之差的绝对值不超过1(1,-0,-1)若将二叉树上的节点的平衡因子定义为该节点的左子树的深度减去它右子树的深度,所以平衡二叉树所有节点的平衡因子只可能是-1,0,1只有二叉树上有一个节点的平衡因子的绝对值大于1,则该二叉树不平衡。原创 2024-05-29 23:15:45 · 304 阅读 · 0 评论 -
超详细最全数据结构个人笔记【BST树】
对于BST而言,插入一个节点主要是要保持其"小-中-大"的逻辑不变,因此插入的的逻辑可以从根节点开始,一步一步寻找新节点的"最终归宿",比如在如下BST中,要插入新节点16,最终应该插入到节点17的左孩子处。由于树中所有的节点均满足,“小-中-大”的规律因此当从根开始查找某个节点时速度比顺序查找要快的多,比如要找节点38,当发现38大于根节点13后,就可以确定13的左子树一定没有38,这就去掉了半边子树的节点。b. 否则,若有右子树,则用右子树中最小的节点min替换根节点,并在右子树中递归删除min。原创 2024-05-29 23:09:42 · 948 阅读 · 0 评论 -
超详细最全数据结构个人笔记【树】
树是一种非线性结构,其严格的数学定义是:如果一组数据中除了第一个节点(第一个节点称为根节点,没有直接前驱节点)之外,其余任意节点有且仅有一个直接前驱,有零个或多个直接后继,这样的一组数据形成一棵树。 节点拥有的子树的数量,称为该节点的度,度为0的节点称为叶子节点或者终端节点,度不为0的节点,称为非终端节点或者分支节点,比如上图节点B的度为2。 日常生活中,很多树的例子,比如一个公司的职员层级关系,学校中院系层级关系,族谱关系等,由于树状结构表现出来都是具有层次的,因此也称为层次结构。原创 2024-05-29 23:06:30 · 858 阅读 · 0 评论 -
超详细最全数据结构个人笔记【队列】
顺序存储的队列之所以被称为循环队列,是因为可以利用更新队头队尾的下标信息,来循环地利用整个数组,出队入队时也不必移动当中的数据。从上图可以看到,链式队列主要控制队头和队尾,由于管理结构体中保存了当前队列元素个数size,因此可以不必设计链表的头节点,初始化空队列时只需要让队头队尾指针同时指向空即可。构建一个顺序存储的循环队列,当用户输入数字时,将数字入队,当用户输入字母时,将队头元素出队。 队列是最常见的概念,日常生活经常需要排队,仔细观察队列会发现,队列是一种逻辑结构,是一种特殊的线性表。原创 2024-05-29 22:59:10 · 686 阅读 · 0 评论 -
超详细最全数据结构个人笔记【数据结构与时空复杂度】
数据是指对事物的进行的记录并可以鉴别的符号,可以是文字,图片,字母,特殊字符,视频,音频…,对我们有用的信息都可以称为数据。 结构体是指元素(数据)的相互关联和相互作用的关系,比如学生,图书,交通干线等等 数据结构体 = 数据+数据与数据之间的关系 算法是为了实现计算的目的而制定一系列的计算步骤程序 = 数据结构体 + 算法。原创 2024-05-29 22:52:02 · 296 阅读 · 0 评论 -
超详细最全数据结构个人笔记【顺序表】
顺序存储中,由于逻辑关系是用物理位置来表达的,因此从上述示例代码可以很清楚看到,增删数据都是比较繁琐的,需要成片的移动数据。顺序表对数据节点的增删操作是很不友好。总结其特点如下:1.优点 不需要多余的信息来记录数据的关系,存储密度高 所有数据顺序存储在一片连续的内存中,支持立即访问任意一个随机数 据,比如上述顺序表中第i个节点是s->data[i]2.缺点 插入、删除时需要保持数据的物理位置反映其逻辑关系,需要成片移动数据 当数据节点较多时,需要一整片较大的连续内存空间。原创 2024-05-29 22:49:54 · 556 阅读 · 0 评论 -
超详细最全数据结构个人笔记【顺序栈与链式栈】
只要满足上述条件,那么这种特殊的线性表就会呈现出一种"后进先出"的逻辑,这种逻辑就被称为栈,栈在生活中到处可见,比如堆叠的盘子、电梯中的人等等。 不管是顺序栈,链式栈,栈的操作逻辑都是一样的,但由于存储形式不同,代码的实现是不同的。使用链式栈,实现十进制转八进制:键盘输入一个十进制数,经过链式栈的相关算法,输出八进制数。入栈: 将节点插入栈顶之上,也称为压栈,函数名通常为push() 栈是一种逻辑结构,是特殊的线性表,特殊在只能在固定一端操作。取栈顶: 取得栈顶元素,但不出栈,函数名通常为top()原创 2024-05-29 22:45:03 · 966 阅读 · 0 评论 -
超详细最全数据结构个人笔记【单向链表】
另外注意到,整条链表用一个所谓的头指针 head 来指向,由 head 开始可以找到链表中的任意一个节点。 新节点接在原来链表的首节点前面,即新的节点指向原来的首节点,然后首节点被新节点替代。 **1. 从无到有:**第一个节点的诞生,此时的首节点和尾节点都是它本身。 新节点接在尾节点后面,即尾节点指向新节点,原来的尾节点被新节点替代。 特点 : 新接入的节点在前面,后接入的节点在后面。 特点:后接入的节点在前面,先接入的节点在后面。 2.实现链表的修改节点和删除节点。原创 2024-05-27 10:03:27 · 756 阅读 · 0 评论 -
超详细最全数据结构个人笔记【双向链表】
对链表而言,双向遍历数据节点相较于单向而言方便许多,因此双向链表在实际运用中是最常见的链式形态。附加题:合并两个链表,按从小到大排序(拆链表,比较节点,插入节点到新链表)1.实现循环链表删除节点。2.判断链表是否有环。原创 2024-05-27 10:02:59 · 333 阅读 · 0 评论 -
超详细最全C语言个人笔记【第二章节-控制流】
5.编程规范,写完if或else后,不管后面又没有语句,先写{}圈定为它的范围,然后再到{}里面补充语句,请用4个格缩进。原创 2024-05-27 09:07:01 · 986 阅读 · 0 评论 -
超详细最全C语言个人笔记【第二章节-运算符】
2. 如果非要进行有符号的移位运算,那么左移的时候,空出来的补0,右移的时候,空出来不符号位(原码阶段); 1.在进行移位运算的时候,凡是被移出去的位都丢弃,凡是空出来的都补零,移位运算是针对的是无符号整数。请编写一个程序用位运算把data的第14、15位修改1,把22、23位修改为0, 并且输出修改后的数据。逻辑与:将两个关系表达式串联起来,当且仅当左右两个表达式都为真时,结果为真。逻辑或:将两个关系表达式并联起来,当且仅当左右两个表达式都为假时,结果为假。&:按位与,两个都为1,结果才为1。原创 2024-05-27 09:05:38 · 854 阅读 · 0 评论