随笔分类 - 数据结构与算法
摘要:在数据结构中,堆其实就是一棵完全二叉树。我们知道内存中也有一块叫做堆的存储区域,但是这与数据结构中的堆是完全不同的概念。在数据结构中,堆分为大根堆和小根堆,大根堆就是根结点的关键字大于等于任一个子节点的关键字,而它的左右子树又分别都是大根堆;小根堆与大根堆恰好相反。在C++的STL中优先队列pr...
阅读全文
摘要:二叉树,结构很简单,只是比单链表复杂了那么一丢丢而已。我们先来看看它们结点上的差异:/* 单链表的结构 */struct SingleList{ int element; struct SingleList *next;};/* 二叉树的结构 */struct BinaryTree{...
阅读全文
摘要:其实所有的数据结构都是“图”。图其实就是一系列的顶点和边的集合。如果边有指向性就叫做有向图,否则就是无向图,边也可以有权值。任意两点间都有路径连接的图叫做连通图,顶点连接的边数叫做这个顶点的度。 没有圈的连通图就是所谓的树,没有圈的非连通图就是森林。1、图的表示 (1)邻接矩阵 使用|V|...
阅读全文
摘要:除了数组、链表,线性的数据结构中还有很重要的几种结构:队列、栈。 队列,一种先进先出的数据结构(FIFO),其实队列可以看成是一个两个口的管道,从一个口进,另一个口出,先进去的必定得在另一个口先出去,否则后面的都出不去;栈,一种后进先出的数据结构(LIFO),栈更像是只有一个口的管道,只有一个...
阅读全文
摘要:与链表不同,树是一种非线性的数据结构。树中最常用的是二叉树,二叉树限制了子树的数量,也就是每个结点的子树至多2个,并且这两个子树是有顺序的。而二叉搜索树(二叉查找树,二叉排序树)是指根节点的关键字大于左子树的,而小于右子树,并且,左右子树也是一颗二叉搜索树。也就是说中序遍历一颗二叉搜索树,它的输...
阅读全文
摘要:软件设计中,最常用的两种数据存储结构就是顺序存储结构和链式存储结构,顺序存储结构中用的最多的便是数组了,而链式存储结构用的比较多的应该是单链表以及它们的变形。 单链表中只有一个指向下一个结点的指针,并且最后一个元素的next指针为NULL;循环链表与单链表的区别就是最后一个指针指向头结点;双向...
阅读全文
摘要:将若干个有序序列进行两两合并,直到所有待排记录都在一个有序序列为止。1、二路归并排序 对于任意一个给定长度为n的待排序列,其中的n个记录各自为一个有序序列(单个记录必定是有序的),然后把相邻的两个序列归并,组成一个新的有序序列,一次下去,直到归并成一个有序序列为止。把两个有序序列归并,数组ar...
阅读全文
摘要:每次 从待排序序列中选择出一个最大(或者最小)的记录添加到有序序列的后面即为选择排序。 选择排序主要有:简单选择排序、树形选择排序、堆排序。1、简单选择排序基本思路:重复进行n趟选择,第i趟通过n-i次记录的比较,在n-i+1个记录中选取最小(或最大)的记录与第i个记录进行交换。void se...
阅读全文
摘要:交换排序,顾名思义,肯定是通过两个数或者几个数之间的比较和交换来达到排序的目的。基于交换的排序主要有冒泡排序和快速排序。1、冒泡排序通过两两之间的比较和交换,每次冒出一个最大的记录(升序)或者最小的记录(降序)。void bubbleSort(int arr[],int n){ int o...
阅读全文
摘要:好久没写点什么了,最近很多企业都在招实习生,周围很多人也都开始到处投简历找实习了,搞的我们人心惶惶的,压力好大。尤其最近互联网好像很火的样子,作为传统通信行业的烟酒僧们,也都放弃了自己的老本行,开始投向了软开的队伍。 只可惜我们学的是《信号与系统》、《通信原理》这种底层的理论的通信课程,虽然看...
阅读全文