随笔分类 - 数据结构
摘要:今天在知乎上看了一个关于iOS面试题的一个问题,里面有一个题目如下:什么是Binary Search,其时间复杂度是多少呢?先介绍一下概念吧:折半查找(Binary Search):又称二分查找。他的前提是线性表的记录 必须有序。直接看代码:#include//a[]是要查找的顺序表,n是表的长度,...
阅读全文
摘要:直接上代码:void swap(int a[],int m,int n) { int temp = a[m]; a[m] = a[n]; a[n] = temp;}//开始的时候left是数组的起始位置0,right是数组最后一个元素的下标(这里是8)void quickSort(...
阅读全文
摘要:希尔排序-----####基本思想 先将整个待排序的记录序列按照指定增量分割成为若干个子序列分别进行直接插入排序,待整个序列中的记录“基本有序”时,再对全体记录进行一次直接插入排序。 这里的增量选取目前还是一个数学难题,迄今为止没有人找到一种最好的增量序列。 其中的基本有序是指:小的关...
阅读全文
摘要:直接插入排序----前面学过了冒泡排序和简单选择排序后,我们现在开始学习一下直接插入排序。 ####概念: 直接插入排序的基本操作就是:将一个记录插入到已经排好序的有序表中,从而得到一个新的、记录数量增1的有序表。 代码如下: /**直接插入排序*/ void inse...
阅读全文
摘要:简单选择排序---接下来我们来简单地学习一下简单选择排序。 #####原理: 通过n-1次关键字之间的比较,从n-i+1个记录中找到关键字最小的记录,并和第i个记录交换。其实很好理解:在冒泡排序中,我们每次都做了交换,而这里我们不需要每次都进行交换,而是把最大的数(min记录的是最大值的下标)和...
阅读全文
摘要:冒泡排序---今天学习一下冒泡排序,它是最简单的一种排序算法。这里我们按照降序排列####原理* 比较相邻的元素。如果第一个比第二个大,就交换他们两个。* 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。* 针对所有的元素重复以上的步骤,除了最后一个...
阅读全文
摘要:用大写O()来体现算法时间复杂度的记法,我们称之为大O阶记法。O(1)叫做常数阶;O(n)叫做线性阶;O(n^2)叫做平方阶。1、用常数1取代运行时间中的所有加法常数。2、在修改后的运行次数函数中,只保留最高阶项。3、如果最高阶项存在且不是1,则去除与这个项相乘的常数。得到的结果就是大O阶。
阅读全文
摘要:参考自:http://blog.csdn.net/u010187139/article/details/46673163源码下载:http://pan.baidu.com/s/1bnFIEGv//// main.c// LineStackDemo//// Created by zhanggui...
阅读全文
摘要:参考自:http://blog.csdn.net/u010187139/article/details/46659943//// main.c// SqlListDemo//对其改变的传地址,对其使用读取的传// Created by zhanggui on 15/8/11.// Copyr...
阅读全文
摘要:一、概念 折半查找(Binary Search)的查找过程是:先确定待查找记录所在的范围区间,然后逐步 缩小范围直到找到或找不到记录为止。该方法的局限性在于要排序的查找表必须有序,即 如若i#include #define N 20int BinarySearch(int a[], int n,...
阅读全文
摘要:一、前言 直到现在,我们已经知道了我们如何声明常量类型,例如int,double,等等,还有复杂的例如数组和结构体等。我们声明他们有各种语言的语法,例如Matlab,Python等等。在C语言中,把这些变量放在栈内存中。二、基础 1、栈 什么是栈,它是你的电脑内存的一个特别区域,它用来存...
阅读全文
摘要:一、前言 赫夫曼树,又称最优树,是一类带权路径长度最短的树。二、基础知识 1、路径长度:从树中一个结点到另一个结点之间的分支构成这两个结点之间的路径,路径上分支数目称为路径长度。 2、树的路径长度:是从树根到每一个结点的路径长度之和。完全二叉树就是路径长度最短的二叉树。 3、树带权路径长度:...
阅读全文
摘要:一、树的遍历 1、先根(次序)遍历树 先访问树的根节点,然后依次先根遍历根的每棵子树 2、后根(次序)遍历 先依次后根遍历每棵子树,然后访问根结点。上面的先根遍历为:A B C D E上面的后根遍历为:B D C E A二、森林的遍历 1、先序遍历森林 若森林非空,则可...
阅读全文
摘要:1、森林转二叉树 (1)、把每棵树转换为二叉树 (2)、第一棵二叉树不动,从第二棵二叉树开始,一次把后一棵二叉树的根结点作为前一棵二叉树的根结点的右孩子,用线连接起来。 转换规则:兄弟相连,长兄为父,孩子靠左。 2、树转二叉树 (1)、加线。在所有的兄弟结点之间加一条线。 (2)、去线。树中的每个结
阅读全文
摘要:一、基础知识 1、 遍历二叉树概念:如何按某条搜索路径寻访树中每个结点,使得每个结点均被访问一次,而且仅被访问一次。 2、遍历二叉树限定先左后右,则有三种情况先(根)序遍历,中(根)序遍历和后(根)序遍历 先序遍历二叉树定义操作 若二叉树为空,则空操作;否则: a、访问根节点 b、先序遍历左子树 c
阅读全文
摘要:一、压缩存储 指为多个值相同的元只分配一个存储空间,对零元不分配空间。二、矩阵分类 1、假如值相同的元素或者零元素在矩阵中的分配有一定的规律,则我们称此类矩阵为特殊矩阵;反之,称为稀疏矩阵。 2、n阶对称矩阵 满足Aij = Aji 1<=i,j<=n; 3、稀疏矩阵:非零元较零元少,且分布没有规律...
阅读全文
摘要:一、前言 由于数组一般不作插入或删除操作,也就是说,一旦建立了数组,则结构中的数据元素个数和元素之间的关系就不再发生变动。因此采用顺序存储结构标示数组是自然的事情了二、二维数组的存储方式 1、以行序为主序的存储方式和以列序为主序的存储方式。行序存储的存储顺序为a00,a01,a02,a10,a11,...
阅读全文
摘要:一、前言 线性表的顺序存储结构特点是:逻辑关系上相邻的两个元素在物理位置上也相邻,因此可以随机存取表中的任何一个元素。缺点:在作插入删除操作时,需要移动大量元素。二、链式存储结构 概念:它不要求逻辑上相邻的元素在物理位置上也相邻,因此它没有顺序存储结构所具有的弱点,但同时也失去顺序表可随机存取的优点...
阅读全文
摘要:一、前言 线性表的顺序表示是指用一组地址连续的存储单元依次存储线性表的数据元素。 一般来说,线性表的第i个数据元素ai的存储位置为: LOC(ai) = LOC(a0)+(i-1)Xl;其中LOC(a0)表示的是第一个数据元素的存储位置,通常称为线性表的起始位置或者基地址。 l代表的时每个数据元素需...
阅读全文

浙公网安备 33010602011771号