
数据结构
赵不懂
懒惰是天赋最大的敌人
展开
-
算法时间复杂度
算法的定义:是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作。算法特性输入输出有穷性确定性可行性算法设计要求正确性可读性健壮性时间效率高和存储量低时间效率的度量方法事后统计方法:这种方法主要通过设计好的测试程序和数据,利用计算机计时器对不同算法编制的程序的运行时间进行比较,从而确定算法效率的高地。事前分析估算方法:在计算机程序编制前原创 2016-08-28 11:05:15 · 529 阅读 · 0 评论 -
多路查找树(B树)
2-3树2-3树就是一棵多路查找树:其中的每一个结点都具有两个孩子或三个孩子。 一个2结点包含一个元素和两个孩子,一个3结点包含两个元素和三个孩子2-3-4树2-3-4树其实就是对2-3树的概念扩展,包括了4结点的使用。一个4结点包含小中大三个元素和四核孩子。B树B树是一种平衡的多路查找树,2-3树和2-3-4树都是B输的特例,结点最大的孩子数目称为B树的阶,因此2-3树是3阶B树,2-3-4树是原创 2016-09-08 09:57:49 · 466 阅读 · 0 评论 -
平衡二叉树
平衡二叉树,是一种二叉排序树,其中每一节点的左子树和右子树的高度差之多等于1。我们将二叉树上结点的左子树深度减去右子树深度的值称为平衡因子BF距离插入结点最近的,且平衡因子的绝对值大于1的结点为根的子树,我们称为最小不平衡子树。平衡二叉树的实现原理平衡二叉树构建的基本思想就是在构建二叉排序树的过程中,每当插入一个结点时,先检查是否因插入而破坏了树的平衡性,若是,则找出最小不平衡子树。在保持二叉排序树原创 2016-09-08 08:50:33 · 381 阅读 · 0 评论 -
二叉排序树
二叉排序树查找操作typedef struct BiTNode{ int data; struct BiTNode *lchild,*rchild;}BiTNode,*BiTree;/** * 递归查找二叉排序树T中是否存在key * * 指针f指向T的父结点,其初始调用值为NULL * 若查找成功,则指针p指向该数据元素结点,并返回TRUE * 否则,指针p原创 2016-09-02 11:30:53 · 211 阅读 · 0 评论 -
基本查找算法
顺序表查找/** 顺序表查找 */int Sequential_Search(int *a, int n, int key){ int i ; for (i = 0; i < n; i++) { if(a[i] == key) return i; } return -1;}/** 顺序表查找改进 */int Se原创 2016-09-02 10:23:31 · 292 阅读 · 0 评论 -
最小生成树-Prim算法和Kruskal算法
Prim算法1.概览普里姆算法(Prim算法),图论中的一种算法,可在加权连通图里搜索最小生成树。意即由此算法搜索到的边子集所构成的树中,不但包括了连通图里的所有顶点(英语:Vertex (graph theory)),且其所有边的权值之和亦为最小。该算法于1930年由捷克数学家沃伊捷赫·亚尔尼克(英语:Vojtěch Jarník)发现;并在1957年由美国计算机科学家罗伯特·普里姆(英语:Rob转载 2016-09-02 09:20:23 · 294 阅读 · 0 评论 -
赫夫曼树的定义与原理
赫夫曼:从树中一个结点到另一个结点之间的分支构成两个检点之间的路径,路径上的分支数目称做路径长度。树的路径长度就是从树根到每一结点的路径长度之和。如果考虑到带权的结点,结点的带权的路径长度为从该结点到树根之间的路径长度与结点上权的乘积。假设有n个权值,构造一棵有n个叶子结点的二叉树,每个叶子结点带权Wk,每个叶子的路径长度为lk,其中带权路径长度WPL最小的二叉树称作赫夫曼树。也称“最优二叉树”。赫原创 2016-09-01 09:40:06 · 1017 阅读 · 0 评论 -
数据结构------二叉树
树是N(N>=0)个结点的有限集。n=0时称为空树。在任意一棵非空树种:1.有且仅有一个特定的称为根(root)的结点;2.当n>1时,其余结点可分为m(m>0)个互不相交的有限集T1,T2……Tm,其中每一个集合本身又是一棵树,并且称为根的字数(SubTree).结点拥有的子树数称为结点的度。度为0的结点称为叶结点或终端节点;度不为0的结点称为非终端结点或分支结点。除根结点之外,分支结点也称为内部原创 2016-09-01 09:13:21 · 345 阅读 · 0 评论 -
栈与队列
栈的定义:栈是限定仅在表尾进行插入和删除操作的线性表我们把允许插入和删除的一端称为栈顶(TOP),另一端称为栈底(Bottom),不含任何数据元素的栈称为空栈。栈又称为后进先出的线性表,简称LIFO结构栈的插入操作,叫做近栈,也称为压栈、入栈 栈的删除操作,叫做出栈,也有的叫做弹栈struct SA原创 2016-08-28 20:54:33 · 425 阅读 · 0 评论 -
栈的应用------后缀(逆波兰)表示法
我们将“9+(3-1)3+10/2”变为“9 3 1 - 3 + 1 0 2 / +”的转换称为,中缀表达式向后缀表达式的转换转换规则:从左到右遍历中缀表达式的每个数字和符号,若是数字就输出,即成为后缀表达式的一部分;若是符号,则判断其与栈顶符号的优先级,是右括号或优先级低于栈顶符号(乘除优于加减)则栈顶元素依次出栈并输出,并将当前符号进栈到最终输出后缀表达式为止计算规则:从左到右遍历表达式的每个原创 2016-08-30 09:55:28 · 390 阅读 · 0 评论 -
裴波那契数列与递归
裴波那契数列就是一个序列,这个数列有个十分明显的特点,那是:前面相邻两项之和,构成了后一项,例如:1,1,2,3,5,8,13。我们用迭代的办法如何实现这个数列void Fbi(int n){ if(n == 0) printf("please input n > 0\n"); if(n == 1) printf("1\n"); else i原创 2016-08-30 09:22:42 · 2495 阅读 · 0 评论 -
链表------创建删除增加遍历
LINKED LIST创建链表#include <stdio.h>#include<stdlib.h>#include<time.h>struct ListNode{ int data; ListNode *next;};void CreateListHead(ListNode **head, int n){ ListNode *p; ListNode *q原创 2016-08-28 16:16:23 · 373 阅读 · 0 评论 -
散列表(哈希表)
散列技术是在记录的存储位置和它的关键字之间建立一个确定的对应关系f,使得每个关键字key对应一个存储位置f(key)这里我们把这种对应关系f称为散列函数,又称为哈希函数。按照这个思想,采用散列技术将记录存储在一块连续的存储空间中,这块连续存储空间称为散列表或哈希表散列函数的构造方法直接定址法数字分析法平方取中法折叠法除留余数法随机数法总之,现实中,应该视不同的情况采用不同的散列函数。原创 2016-09-08 10:24:51 · 586 阅读 · 0 评论