2014.07.04 17:23 简介: 我们考虑一种特殊的图: 1. 有向图 2. 只有一个连通分量 3. 不存在环 那么这样的图里,必然可以找到一种排序方式,来确定谁在谁的“前面”. 简单的来说可以这么理解:如果存在一条边a->b,那么a顶点就在b的前面. 下面我们通过例子来看看拓扑排序的过程,确定所有的顶点中,谁排在谁的前面. 图示: 下面是一个图,符合上面所提出的三个条件,因此可以进行拓扑排序.我们关注每个顶点的入度,表示这个顶点被指向的次数. 每次我们都选出一个入度为0的顶点,因为入度…
数据结构与算法分析--C语言描述 第三章的单链表 很基础的东西.走一遍流程.有人说学编程最简单最笨的方法就是把书上的代码敲一遍.这个我是头文件是照抄的..c源文件自己实现. list.h typedef int ElementType; #ifndef _List_H #define _List_H struct Node; typedef struct Node *PtrToNode; typedef PtrToNode List; typedef PtrToNode Position; Li…
算法 算法(algorithm)是为求解一个问题需要遵循的.被清楚地指定的简单指令的集合. 数学基础 四个定义: 1.大O表示法: 如果存在正常数 c 和 n0 使得当 N ≥ n0时,T(N) ≤ cf(N),则记为T(N) = O(f(N)). (描述了T(N)的相对增长率小于等于f(N)的相对增长率.) 2.大Ω表示法: 如果存在正常数 c 和 n0 使得当 N ≥ n0时,T(N) ≥ cf(N),则记为T(N) = Ω(f(N)). (描述了T(N)的相对增长率大于等于f(N)的相对增…
这一章主要复习了一些数学知识,像指数.对数.模运算.级数公式:还有2种证明方法,归纳假设法和反证法.所幸以前学过,重新拾捡起来也比较轻松. 简要地复习了递归,提出了编写递归例程的四条基本法则: 基准情形.必须总有些基准情形.它无需递归就能解出. 不断推进.对于那些需要递归求解的情形,每一次递归调用都必须要使求解状况朝接近基准情形的方向推进. 设计法则.假设所有的递归调用都能运行. 合成效益法则.在求解一个问题的同一实例时,切勿在不同的递归调用中做重复性的工作.(譬如斐波那契数列的递归使用 Fib…
#include "stdio.h" #include "stdlib.h" #define random(x) (rand()%x) void creat_array(int a[],int len,int max); void print_array(int a[],int n); void main(){ printf("please input two numbers as the array's length and the array's ma…
维斯 (作者), 冯舜玺 (译者) <数据结构与算法分析:C语言描述(原书第2版)>内容简介:书中详细介绍了当前流行的论题和新的变化,讨论了算法设计技巧,并在研究算法的性能.效率以及对运行时间分析的基础上考查了一些高级数据结构,从历史的角度和近年的进展对数据结构的活跃领域进行了简要的概括.由于<数据结构与算法分析:C语言描述(原书第2版)>选材新颖,方法实用,题例丰富,取舍得当.<数据结构与算法分析:C语言描述(原书第2版)>的目的是培养学生良好的程序设计技巧和熟练的算…
开始学习数据结构,使用的教材是机械工业出版社的<数据结构与算法分析——C语言描述>,计划将书中的ADT用C语言实现一遍,记录于此.下面是第一个最简单的结构——链表. 链表(Linked-List),即最基本的数据结构——线性表的链式存储结构.比起顺序存储,其好处在于空间使用的灵活性,以及插入.删除操作的高效性.下面给出笔者的链表结构C语言实现.其中算法和细节部分定有可优化之处,欢迎大神指正. // LinkedList.h #ifndef _LINKEDLIST_H #define _LINK…
书籍信息 书名:<数据结构与算法分析-Java语言描述> 原作名:Data Structures and Algorithm Analysis in Java 作者: 韦斯 (Mark Allen Weiss) 内容简介 本书是国外数据结构与算法分析方面的经典教材,使用卓越的Java编程语言作为实现工具讨论了数据结构(组织大量数据的方法)和算法分析(对算法运行时间的估计). 随着计算机速度的不断增加和功能的日益强大,人们对有效编程和算法分析的要求也不断增长.本书把算法分析与最有效率的Java程…
表.栈和队列是最简单和最基本的三种数据结构.基本上,每一个有意义的程序都将明晰地至少使用一种这样的数据结构,比如栈在程序中总是要间接地用到,不管你在程序中是否做了声明. 本章学习重点: 理解抽象数据类型(ADT)的概念学习如何对表进行有效的操作 熟悉栈ADT及其在实现递归方面的应用 熟悉队列ADT及其在操作系统和算法设计中的应用 ADT 抽象数据类型(abstract data type)是一个操作的集合,是数学的抽象,在ADT中不涉及如何实现操作的集合,这可以看作是模块化设计的扩充.对于每种A…
目录 第 3 章 表.栈和队列 3.2 表 ADT 3.2.1 表的简单数组实现 3.2.2 简单链表 3.3 Java Collections API 中的表 3.3.1 Collection 接口 3.3.2 Iterator 接口 3.3.3 List接口.ArrayList 类和 LinkedList 类 3.3.5 关于 ListIterator 接口 3.4 ArrayList 类的实现 3.5 LinkedList 类的实现 3.6 栈 ADT 3.6.1 栈模型 3.6.2 栈的…