C数据结构
文章平均质量分 72
xero10
这个作者很懒,什么都没留下…
展开
-
数据结构基础
递归的四条基本法则:1. 基准情形:必须总有某些基本情形,无需递归就能解出2. 不断推进:对于那些需要递归求解的情形,每一次递归调用都必须使求解状况向接近基准情形方向推进3. 设计法则:假设所有的递归调用都能运行4. 合成效益法则:在求解一个问题的一个实例时,不能在不同的递归调用中做重复的工作1. 如果存在正的常数c和n0使得当N>=n0时,T(N)2. 如果存在正原创 2015-06-30 11:28:58 · 326 阅读 · 0 评论 -
树
树一棵树是由N个结点和N-1条边的集合从结点n(1)到n(k)的路径(path)定义为结点n(1),n(2),...,n(k)的一个序列,且对1一棵树的内部路径长(internal path length)定义为所有结点的深度和假设所有的树出现的机会均等,则树所有节点的平均深度为O(log N)结点的深度(depth)为根到该结点唯一路径的长;节点的高(height)是从该结点原创 2015-07-09 03:40:36 · 409 阅读 · 0 评论 -
链表,栈,队列
使用链表时最好使用一个表头,也称为头结点。个人的感受是,使用头节点有一个好处那就是可以方便地修改链表中第一个结点的值。因为对链表中结点的操作通常都是通过调用函数,将指向节点的指针结点作为参数传入来进行更改的。但由于函数是call by value,若使用一个指针直接指向第一个结点, 这个指针指向的结点的值可以改变,但指针本身的值不能改变。例如要在链表的第一个结点前插入一个新的结点,如果指向第一个结原创 2015-07-09 00:58:05 · 290 阅读 · 0 评论 -
散列
散列(hashing)是一种用于以常数平均时间执行插入、删除和查找的技术,但需要元素间任何排序信息的操作将不会得到有效的支持理想的散列表数据结构只是一个包含关键字的具有固定大小的数组;每个关键字被映射到从0~TableSize-1这个范围中的某个数,并且被放到适当的单元中。这个映射叫做散列函数(hash function),理想情况下它应该运算简单并且保证任何两个不同的关键字映射到不同的单元。原创 2015-09-14 10:26:03 · 470 阅读 · 0 评论 -
图论算法
图的基础一个图(graph)G = (V,E)由顶点(vertex)集V和边(edge)集E组成。每一条边就是一个点对(v,w),v,w∈V。有时也把边叫做弧(arc)。如果点对是有序的,那么图叫做有向的(directed),有向的图叫做有向图(digraph)。当且仅当(v,w)∈E时,称顶点v和w邻接(adjacent)图中的一条路径(path)是一个顶点序列w1,w2,w3,...,原创 2015-10-10 02:32:16 · 2952 阅读 · 0 评论 -
优先队列(堆)
优先队列是至少允许至少下列两种操作的数据结构:插入,和删除最小者(DeleteMin),它的工作是找出、返回并删除优先队列中最小的元素。简单的实现包括:1. 使用一个简单链表在表头以O(1)执行插入操作,并遍历该链表以删除最小单元,这又需要O(N)2. 始终让表保持排序状态;这使得插入代价高昂(O(N))而DeleteMin花费低廉(O(1))3. 使用二叉查找树,它对这两种操作的平均原创 2015-09-23 09:07:29 · 563 阅读 · 0 评论 -
排序
插入排序(insertion sort)插入排序由N-1趟排序组成,对于P = 1到P = N-1趟,插入排序保证从位置0到位置P上的元素为已排序状态。插入排序的平均情形是Θ(N^2)假设不存在重复的元素,有以下定理:【定理】N个互异的数的数组的平均逆序数是N(N-1)/4【定理】通过交换相邻元素进行排序的任何算法平均需要Ω(N^2)希尔排序(S原创 2015-09-29 05:11:36 · 595 阅读 · 0 评论