
数据结构与算法
文章平均质量分 69
羊羊猪
彼此心比天高 怎能没进步
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
平衡二叉查找树(AVL)的实现 - C语言
???? 平衡二叉查找树引言在二叉查找树(BST)中,所有操作的时间复杂度都受树高的限制,最小为 O(log(n))O(log(n))O(log(n)),最大为O(n)O(n)O(n),为了更好的控制时间的消耗,设计出平衡二叉查找树(AVL Tree),即树中任何节点的两个子树的高度最大差别为1,增加和删除可能需要通过一次或多次树旋转来重新平衡这个树。节点构成节点数据,节点高度指向其左子树及右子树的指针typedef struct Node { int key, height;原创 2021-06-22 16:39:18 · 691 阅读 · 0 评论 -
二叉搜索树(BST)递归和非递归的实现 - C语言
???? 二叉搜索树定义二叉查找树(Binary Search Tree),它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。节点构成节点数据节点指向左子树和右子树的指针还有可能由指向父元素的指针这里用的只有指向左子树和右子树的指针typedef struct Node { int key; struct Node *lef原创 2021-06-20 07:46:46 · 1267 阅读 · 0 评论 -
堆排序的实现 - C语言
???? 堆排序定义堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。除了最低级别外所有级别都满了,如果最低级别未满,则必须将节点打包到左侧二叉堆的性质给定一个节点数为n,高度为h的二叉堆n∈[2h,2h+1−1]n \in [2^h, 2^{h+1} -1]n∈[2h,2h+1−1]高度h=O(log(n))h = O(log(n))h=O(log(n))数组实原创 2021-06-20 04:13:57 · 433 阅读 · 0 评论 -
快速排序的实现 - C语言
???? 快速排序快速排序是在实践中最快的的已知排序算法,是对冒泡排序的一种改进,采用了分治的策略???? 基本步骤选取枢纽元 (pivot)把比枢纽元小的元素分成左半区,把比枢纽元大的元素分成右半区分别对左半区和右半区的元素重复步骤 1、2进行递归快速排序动画:快速排序 Quick Sort⚠️ 步骤二中的左右分区并不是唯一的,并极有可能分为左右大小不一样的区,这是一个潜在的隐患,因此选取枢纽元成了算法设计上的一个决策???? 选取枢纽元❌ 选择第一个元素作为枢纽元:若输入为预排序原创 2021-06-19 01:32:15 · 291 阅读 · 0 评论 -
归并排序的实现 - C语言
????基本思想???? 分治法(Divide and Conquer)把一个大数组分为两个相同大小的小数组用递归分别给小数组排序合并两个已排序的小数组,组成一个排好序的大数组动画:归并排序 Merge Sort图释:???? C语言实现// merge two sorted sub-arraysvoid Merge(int *A, int left, int center, int right) { //Apply for space to store the temporary原创 2021-06-19 00:26:24 · 266 阅读 · 0 评论 -
插入排序的实现 - C语言
???? 插入排序???? 基本思想每一步把待排序的元素与前面已排序的数组的元素进行比较,正确的把元素放入前面的数组动画:插入排序???? C语言的实现// input: int *A: 待排序的数组// int size: 数组大小// output: 已排序的数组void InsertionSort(int *A, int size){ for (int cmp = 1; cmp <= size - 1; cmp++){ int key = A[cmp]; int原创 2021-06-16 05:18:19 · 327 阅读 · 0 评论 -
数据结构之C语言循环队列的数组实现
一、队列模型队列是一种特殊的线性表,它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。也可称为先进先出(FIFO)表队列的动画:http://liveexample.pearsoncmg.com/liang/animation/web/Queue.html队列的应用– Printer Queue– Web Crawler– System Buffer– Any sequence maintained in a FIFO order二、队列的数组实现1原创 2021-06-14 01:44:45 · 435 阅读 · 0 评论 -
数据结构之C语言链表增查删改
一、链表定义链表(Linked List)是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。为了避免插入和删除的线性开销,我们允许表可以不连续存储,否则表的部分或全部需要整体移动。节点构成表元素指向包含该元素后继元的结构的指针最后一个单元的 Next 指针指向 NULL, 该值由C定义且不能与其他指针混淆。ANSI C规定 NULL 为零typedef struct node { double data; struct node *原创 2021-06-12 22:53:10 · 1057 阅读 · 0 评论 -
数据结构之C语言栈的实现
一、栈模型栈是限制插入和删除只能在一个位置上进行的表,该位置是表的末端,叫做栈的顶(top)。栈有时又称为LIFO(后进先出)表。栈的应用Expression evaluationBacktrackingMemory Management二、栈的实现1. 定义结构体typedef struct { double *values; int top; int maxTop;} Stack;2. 栈的创建这里我们初始化top为-1, 则存第一个元素的时候 top 为0,相当于原创 2021-06-13 02:13:57 · 640 阅读 · 0 评论