数据结构与算法
CHRN晨
如今你的气质里,藏着你走过的路,读过的书和你爱过的人。
展开
-
二叉树的基本操作与题型总结
更新中…目录更新中........1二叉树的遍历1.1递归算法1.1.1前序遍历的递归算法1.1.2中序遍历的递归算法1.1.3后序遍历的递归算法1.1.4双序遍历1.2非递归算法1.2.1前序遍历的非递归算法1.2.2中序遍历的非递归算法1二叉树的遍历typedef struct node{ int data; struct node *lchild,*rchild;}BTNode,BTREE;1.1递归算法1.1.1前序遍历的递归算法void Pre_Order(BTREE T)原创 2020-12-11 20:46:51 · 274 阅读 · 0 评论 -
链表基本操作与题型总结
目录1.链表的基本操作1.1创建链表1.2求链表的长度1.3确定元素item在链表中的位置1.4在非空链表第一个链接点插入信息为item的节点1.5在非空末尾插入信息为item的链接点1.6逆转一个线性链表1.7销毁链表1.8将两个链表连在一起1.9复制一个链表1.91将链表中数据域最大的那个链接点移动到链表末尾2.链表的题型总结2.1循环链表1.链表的基本操作1.1创建链表#include<stdio.h>#include<malloc.h>typedef struct原创 2020-12-10 10:59:21 · 375 阅读 · 0 评论 -
排序算法之选择排序(SelctionSort)
排序算法之选择排序(SelctionSort)基本思想:在长度为N的无序数组,第一次遍历n-1个数,找到最小的数值与第一个元素交换,第二次遍历n-2个数,找到最小的数值与第二个元素交换;。。。第n-1次遍历,找到最小的数值与第n-1个元素交换,排序完成。实例说明如上图所示,以一组数据{12,6,1,15,3,19}为例先选择最小元素1交换到数组头部,则原数组分为:已排序序列和未排序序列。在未排序序列选最小元素3,交换到已排序序列中。重复第二步,直到未排序序列数量为0,排序完成。C语言代码原创 2020-08-21 12:34:38 · 367 阅读 · 0 评论 -
排序算法之希尔排序(ShellSort)
排序算法之希尔排序(Shell Sort)前言:如果数据序列基本有序,使用插入排序更加有效。基本原理:1 核心思想:希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序。2 算法分析:希尔排序是把序列按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的元素越来越多,当增量减至1时,整个序列恰好被分成一组,排序便终止。实例说明如上图所示,以一组数据{9,1,2,5,7,4,8,6,3,5} 为例,进行直接插入排序的算法演示转载 2020-08-21 12:11:47 · 404 阅读 · 0 评论 -
排序算法之冒泡排序(BubbleSort)
排序算法之冒泡排序(BubbleSort)基本原理:通过比较相邻元素大小来决定是否交换位置。事例:如上图所示,以一组数据{20,40,30,10,60,50} 为例,进行冒泡排序的算法演示:第一轮:从数组第一个元素开始,依次比较相邻元素,如:20与40比较,位置不变;40与30比较交换位置。。。。最后,最大元素60位于数组末尾。第二轮:重复上一步操作,将数组中第二大元素50交换至数组倒数第二位。重复上述操作第五轮,比较10与20,位置不变,完成最终排序。代码#include<st原创 2020-08-21 11:57:58 · 359 阅读 · 0 评论 -
图的基本操作(C语言)
更新中。。。。。目录1.邻接矩阵创建图2.邻接表创建图3.图的遍历3.1图的广度优先遍历3.2图的深度优先遍历1.邻接矩阵创建图2.邻接表创建图3.图的遍历3.1图的广度优先遍历3.2图的深度优先遍历1.邻接矩阵创建图void AdjMatrix(int a[][MAX],int n,int e)//邻接矩阵存储图{ int i,j,k,weight; for(i=0;i<n;i++) { for(j=0;j<n;j++) { a[i][j]=MaxValu原创 2020-12-06 10:23:07 · 13130 阅读 · 5 评论 -
LeetCode栈题目总结
更新中。。。目录1.有效的括号2.栈的压入、弹出序列3.最小栈4.用栈实现队列5.下一个更大的数1.有效的括号2.栈的压入、弹出序列3.最小栈4.用栈实现队列5.下一个更大的数1.有效的括号题目描述:给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。有效字符串需满足:*左括号必须用相同类型的右括号闭合*左括号必须以正确的顺序闭合*注意空字符串可被认为是有效字符串示例 1:输入: "()"输出: true示例 2:输入: "()[]原创 2020-12-05 16:31:12 · 172 阅读 · 0 评论 -
剑指offer数组题型总结篇
更新中…类别1.无序数组概念:未经过排序的数组优点:插入快缺点:查找慢,删除慢,大小固定2.有序数组概念:数组中的元素是按照一定规则排列的。优点:查找效率高。根据元素值查找时可以使用二分查找,效率比无序数组高很多,在数据量大的时候尤其明显。对于leetcode中很多查找元素类的题目,如果没有事先说明是有序数组,可以事先对数组进行排序,再进行查找,二分法或其他方法都可以。缺点:插入和删除较慢。插入元素时,首先判断该元素的小标,然后对该小标之后的所有元素后移以为才能进行插入,所以有序数组比较适原创 2020-12-02 14:20:41 · 139 阅读 · 0 评论 -
被忽略的技巧:位运算
位运算基本操作知识小结1.左移操作A<<B将A的二进制表示的每一位向左移B位,左边超出的位截掉,右边不足的位补0A = 1100 B = 2A << B = 1100002.右移操作A>>B,A>>>B右移操作分为算数右移和逻辑右移算术右移是带符号的右移,逻辑右移是不带符号的右移。算术右移:将A的二进制表示的每一位向右移B位,右边超出的位截掉,左边不足的位补符号位的数。逻辑右移:将A的二进制表示的每一位向右移B位,右边超出的位截掉,左原创 2020-12-02 12:40:17 · 439 阅读 · 0 评论