数据结构
数据结构
Borny鼎鼎
我想,我也是个匠人,砌代码的。
展开
-
数据结构-图
边表示的是顶点之间的关系,有的关系是双向的,比如同学关系,A是B的同学,那么B也肯定是A的同学,用不带箭头的边表示二者的关系,这样的图就是无向图。有的关系是有方向的,比如父子关系,A是B的爸爸,但B肯定不是A的爸爸,用带箭头的边表示二者的关系,这样的图就是有向图。对于一个关系,如果我们既关心关系的有无,也关心关系的强度,比如描述地图上两个城市的关系,需要用到距离,那么就用带权图来表示,带权图中的每一条边一个数值表示权值,代表关系的强度。图中的数据元素,我们称之为顶点,图至少有一个顶点(非空有穷集合)。原创 2022-12-29 11:03:53 · 466 阅读 · 0 评论 -
数据结构-树
顺序存储就是利用数组进行存储,数组中的每一个位置仅存储节点的data,不存储左右子节点的指针,子节点的索引通过数组下标完成。根结点的序号为1,对于每个节点Node,假设它存储在数组中下标为i的位置,那么它的左子节点就存储在2i的位置,它的右子节点存储在下标为2i+1的位置。二叉树节点的平衡因子定义为该节点的左子树的深度减去右子树的深度,则平衡二叉树的所有节点的平衡因子只可能是-1、0、1。二叉树的先序遍历,就是先输出根结点,再遍历左子树,最后遍历右子树,遍历左子树和右子树的时候,同样遵循先序遍历的规则。原创 2022-12-29 10:53:43 · 194 阅读 · 0 评论 -
数据结构-堆
1、什么是堆堆是一种满足以下条件的树:堆中的每一个节点值都大于等于(或小于等于)子树中所有节点的值。2、堆的用途当我们只关心所有数据中的最大值或者最小值,存在多次获取最大值或者最小值,多次插入或删除数据时,就可以使用堆。3、堆得分类堆分为最大堆和最小堆。最大堆,堆中的每一个节点的值都大于等于子树中所有节点的值。最小堆,堆中的每一个节点的值都小于等于子树中所有节点的值。4、堆的存储利用数组存储堆,方便存储和索引。5、堆得操作堆的更新操作主要包括两种:插入元素和删除堆顶元素。(1)插入元素原创 2022-12-29 10:28:43 · 269 阅读 · 0 评论 -
数据结构-数组、链表、栈、队列
数组、链表、栈、队列简介原创 2022-12-29 10:17:46 · 253 阅读 · 0 评论 -
时间复杂度和空间复杂度简介
时间复杂度,算法中基本操作的执行次数。空间复杂度,算法中变量的个数。原创 2022-12-29 10:12:31 · 84 阅读 · 0 评论 -
循环链表的算法操作
循环单链表和循环双链表是由对应的单链表和双链表改造而来,只需在终端节点和头结点间建立联系即可。循环单链表终端节点的next结点指针指向表头结点。循环双链表终端节点的next指针指向表头结点,头结点的prior指针指向表尾结点。如果p指针沿着循环链表行走,判断p走到表尾节点的条件是p->next==head。原创 2016-05-29 16:04:05 · 803 阅读 · 0 评论 -
双链表的算法操作
1、双链表双链表就是在单链表结点上增添了一个指针域,指向当前结点的前驱。2、双链表结点定义typedef struct DoubleLinkedLists{ int data; struct DoubleLinkedLists *prior; struct DoubleLinkedLists *next;}DoubleLinkedLists;3、插入结点的算法假设在双链表原创 2016-05-29 16:00:47 · 412 阅读 · 0 评论 -
单链表的算法操作
1、单链表在每个结点中除了包含数据域外,还包含了一个指针域,用以指向其后继结点。2、头插法和尾插法建立链表(1)算法代码typedef struct SinglyLinkedLists{ int data; struct SinglyLinkedLists *next;}SinglyLinkedLists;void createListByFront(SinglyLink原创 2016-05-29 15:33:00 · 627 阅读 · 0 评论 -
顺序表的算法操作
1、顺序表顺序表就是把线性表中的所有元素按照其逻辑顺序,依次存储到从指定的存储位置开始的一块连续的存储空间中。2、算法代码#define maxSize 100typedef struct//typedef声明新的类型名来代替已有的类型名{ int data[maxSize]; int length;}SequenceList;int queryData(SequenceL原创 2016-05-26 16:16:35 · 661 阅读 · 0 评论 -
二路归并排序
1、执行流程原始序列:49、38、65、97、76、13、27(1)将原始序列看成是7个只含有一个元素的子序列,显然这些子序列都是有序的。子序列1:49子序列2:38子序列3:65子序列4:97子序列5:76子序列6:13子序列7:27(2)两两归并,形成若干有序二元组。第一趟二路归并排序结束,结果如下:{38、49,},{65、原创 2016-05-02 14:02:08 · 4244 阅读 · 1 评论 -
堆排序
算法思想:堆排序中最关键的操作是将序列调整为堆。整个排序的过程就是通过不断调整使得不符合堆定义的完全二叉树变为符合堆定义的完全二叉树的过程。原创 2016-05-02 13:21:20 · 286 阅读 · 0 评论 -
简单选择排序
算法思想:选择类排序的主要动作是选择,简单选择排序采用最简单的选择方式,从头到尾顺序扫描序列,找出最小的一个记录,和第一个记录交换,接着从剩下的记录中继续这种选择和交换,最终使序列有序。原创 2016-05-02 12:57:19 · 277 阅读 · 0 评论 -
快速排序
算法思想:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。原创 2016-04-29 17:15:12 · 336 阅读 · 0 评论 -
冒泡排序
算法思想:在要排序的一组数中,对当前还未排好序的范围内的全部数,自上而下对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的数往上冒。冒泡排序算法结束的条件是在一趟排序过程中没有发生元素交换。原创 2016-04-29 15:02:17 · 266 阅读 · 0 评论 -
希尔排序
算法思想:先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序,待整个序列中的记录“基本有序”时,再对全体记录进行直接插入排序。原创 2016-04-29 14:52:03 · 219 阅读 · 0 评论 -
折半插入排序
算法思想:折半插入排序的基本思想和直接插入排序一样,区别在于寻找插入位置的方法不同,折半插入排序是采用折半查找法来查找插入位置的。原创 2016-04-27 17:25:12 · 328 阅读 · 0 评论 -
直接插入排序
算法思想:每趟将一个待排序的元素作为关键字,按照其关键字值的大小插入到已经排好的部分序列的适当位置上,直到插入完成。原创 2016-04-27 15:05:20 · 256 阅读 · 0 评论