- 博客(261)
- 资源 (4)
- 收藏
- 关注
原创 单源点最短路径
单源点最短路径对于给定的有向图G=(V,E)及单个源点Vs,求Vs到G的其余各顶点的最短路径。针对单源点的最短路径问题,Dijkstra提出了一种按路径长度递增次序产生最短路径的算法,即迪杰斯特拉(Dijkstra)算法。基本思想:从图的给定源点到其它各个顶点之间客观上应存在一条最短路径,在这组最短路径中,按其长度的递增次序,依次求出到不同顶点的最短路径和路径长度。即按长度递增的次序生
2011-12-15 12:27:25 700
原创 与AOE有关的研究问题
与AOE有关的研究问题◆ 完成整个工程至少需要多少时间?◆ 哪些活动是影响工程进度(费用)的关键? 工程完成最短时间:从起点到终点的最长路径长度(路径上各活动持续时间之和) 。长度最长的路径称为关键路径,关键路径上的活动称为关键活动。关键活动是影响整个工程的关键。 设v0是起点,从v0到vi的最长路径长度称为事件vi的最早发生时间,即是以vi为尾的所有活动的最早
2011-12-15 12:26:50 669
原创 有向无环图及其应用
有向无环图(Directed Acycling Graph):是图中没有回路(环)的有向图。对工程的活动加以抽象:图中顶点表示活动,有向边表示活动之间的优先关系,这样的有向图称为顶点表示活动的网(Activity On Vertex Network ,AOV网) 。拓扑排序由某个集合上的一个偏序得到该集合上的一个全序的操作。算法实现说明◆ 采用正邻接链作为AOV网的存储结构;
2011-12-15 12:26:12 711
原创 克鲁斯卡尔(Kruskal)算法
设G=(V, E)是具有n个顶点的连通网,T=(U, TE)是其最小生成树。初值:U=V,TE={} 。对G中的边按权值大小从小到大依次选取。⑴ 选取权值最小的边(vi,vj),若边(vi,vj)加入到TE后形成回路,则舍弃该边(边(vi,vj) ;否则,将该边并入到TE中,即TE=TE∪{(vi,vj)} 。⑵ 重复⑴ ,直到TE中包含有n-1条边为止。Kruskal算法实现的关
2011-12-15 12:25:41 709
原创 普里姆(Prim)算法
从连通网N=(U,E)中找最小生成树T=(U,TE) 。⑴ 若从顶点v0出发构造,U={v0},TE={};⑵ 先找权值最小的边(u,v),其中u∈U且v∈V-U,并且子图不构成环,则U= U∪{v},TE=TE∪{(u,v)} ;⑶ 重复⑵ ,直到U=V为止。则TE中必有n-1条边, T=(U,TE)就是最小生成树。设用邻接矩阵(二维数组)表示图,两个顶点之间不存在边的权值为机内
2011-12-14 13:27:41 551
原创 有向图的强连通分量
求有向图G的强连通分量的基本步骤是:⑴ 对G进行深度优先遍历,生成G的深度优先生成森林T。⑵ 对森林T的顶点按中序遍历顺序进行编号。⑶ 改变G中每一条弧的方向,构成一个新的有向图G’。⑷ 按⑵中标出的顶点编号,从编号最大的顶点开始对G’进行深度优先搜索,得到一棵深度优先生成树。若一次完整的搜索过程没有遍历G’的所有顶点,则从未访问的顶点中选择一个编号最大的顶点,由它开始再进行
2011-12-14 13:27:14 456
原创 无向图的生成树和生成森林算法
对图的深度优先搜索遍历DFS(或BFS)算法稍作修改,就可得到构造图的DFS生成树算法。 在算法中,树的存储结构采用孩子—兄弟表示法。首先建立从某个顶点V出发,建立一个树结点,然后再分别以V的邻接点为起始点,建立相应的子生成树,并将其作为V 结点的子树链接到V结点上。显然,算法是一个递归算法。(1) DFStree算法typedef struct CSNode{
2011-12-14 13:26:20 2377
原创 广度优先搜索算法
广度优先搜索(Breadth First Search--BFS)遍历类似树的按层次遍历的过程。设初始状态时图中的所有顶点未被访问,则:⑴:从图中某个顶点vi出发,访问vi;⑵:访问vi的所有相邻接且未被访问的所有顶点vi1,vi2,…,vim;⑶:以vi1,vi2, …,vim的次序,以vij(1≦j≦m)依此作为vi ,转⑴; ⑷:继续选取图中未被访问顶点vk作为起始顶点
2011-12-14 13:25:51 411
原创 深度优先搜索算法
深度优先搜索(Depth First Search--DFS)遍历类似树的先序遍历,是树的先序遍历的推广。设初始状态时图中的所有顶点未被访问,则:⑴:从图中某个顶点vi出发,访问vi;然后找到vi的一个邻接顶点vi1 ;⑵:从vi1出发,深度优先搜索访问和vi1相邻接且未被访问的所有顶点;⑶:转⑴ ,直到和vi相邻接的所有顶点都被访问为止⑷:继续选取图中未被访问顶点vj作为起始
2011-12-14 13:25:27 417
原创 邻接链表法操作图
结点及其类型定义#define MAX_VEX 30 /* 最大顶点数 */typedef int InfoType;typedef enum {DG, AG, WDG,WAG} GraphKind ;typedef struct LinkNode{ int adjvex ; // 邻接点在头结点数组中的位置(下标)
2011-12-14 13:24:54 927
原创 图的邻接矩阵的操作
图的邻接矩阵的实现比较容易,定义两个数组分别存储顶点信息(数据元素)和边或弧的信息(数据元素之间的关系) 。其存储结构形式定义如下:#define INFINITY MAX_VAL /* 最大值∞ */ /* 根据图的权值类型,分别定义为最大整数或实数 */#define MAX_VEX 30 /* 最大顶点数目 */typedef enum {DG,
2011-12-14 13:24:07 598
原创 线索化二叉树
仿照线性表的存储结构,在二叉树的线索链表上也添加一个头结点head,头结点的指针域的安排是: ◆ Lchild域:指向二叉树的根结点; ◆ Rchild域:指向中序遍历时的最后一个结点; ◆ 二叉树中序序列中的第一个结点Lchild指针域和最后一个结点Rchild指针域均指向头结点head。如同为二叉树建立了一个双向线索链表,对一棵线索二叉树既可从头结点也可从最后一个结点开始按寻找
2011-12-14 13:23:16 328
原创 求二叉树的深度
利用层次遍历算法可以直接求得二叉树的深度。#define MAX_NODE 50int search_depth( BTNode *T){ BTNode *Stack[MAX_NODE] ,*p=T; int front=0 , rear=0, depth=0, level ; /* le
2011-12-14 13:22:39 270
原创 求二叉树的叶子结点数
只要将先序遍历二叉树算法中vist()函数简单地进行修改就可以。#define MAX_NODE 50int search_leaves( BTNode *T){ BTNode *Stack[MAX_NODE] ,*p=T; int top=0, num=0; if (T!=NULL) {
2011-12-14 13:22:11 982
原创 二叉树的二叉链表创建
⑴ 按满二叉树方式建立 (补充) 在此补充按满二叉树的方式对结点进行编号建立链式二叉树。对每个结点,输入i、ch。i : 结点编号,按从小到大的顺序输入;ch : 结点内容,假设是字符。在建立过程中借助一个一维数组S[n] ,编号为i的结点保存在S[i]中。#define MAX_NODE 50typedef struct BTNode{ char
2011-12-14 13:21:48 1742
原创 层次遍历二叉树
为保证是按层次遍历,必须设置一个队列,初始化时为空。设T是指向根结点的指针变量,层次遍历非递归算法是:若二叉树为空,则返回;否则,令p=T,p入队; ⑴ 队首元素出队到p; ⑵访问p所指向的结点; ⑶将p所指向的结点的左、右子结点依次入队。直到队空为止。#define MAX_NODE 50void LevelorderT
2011-12-14 13:21:23 352
原创 遍历二叉树及其应用
先序遍历二叉树1 递归算法void PreorderTraverse(BTNode *T){ if (T!=NULL) { visit(T->data) ; /* 访问根结点 */ PreorderTraverse(T->Lchild
2011-12-14 13:20:56 406
原创 二叉树的性质
性质1:在非空二叉树中,第i层上至多有2i-1个结点(i≧1)。性质2:深度为k的二叉树至多有2k-1个结点(k≧1) 。性质3:对任何一棵二叉树,若其叶子结点数为n0,度为2的结点数为n2,则n0=n2+1。 满二叉树和完全二叉树 一棵深度为k且有2k-1个结点的二叉树称为满二叉树(Full Binary Tree)。 完全二叉
2011-12-14 13:20:01 485
原创 串
#define MAX_STRLEN 256typedef struct{ char str[MAX_STRLEN] ; int length;} StringType ; 1 串的联结操作Status StrConcat ( StringType s, StringType t)/* 将串t联结到串s之
2011-12-14 13:19:13 418
原创 循环队列
当队首、队尾指针指向向量上界(MAX_QUEUE_SIZE-1)时,其加1操作的结果是指向向量的下界0。这种循环意义下的加1操作可以描述为:if (i+1==MAX_QUEUE_SIZE) i=0;else i++ ;其中: i代表队首指针(front)或队尾指针(rear)用模运算可简化为:i=(i+1)%MAX_QUEUE_SIZE ;无法通过front=
2011-12-14 13:18:41 462
原创 栈的链式存储表示
typedef struct Stack_Node{ ElemType data ; struct Stack_Node *next ;} Stack_Node ; (1) 栈的初始化Stack_Node *Init_Link_Stack(void){ Stack_Node *top ;
2011-12-14 13:18:05 365
原创 栈的顺序存储表示
#define STACK_SIZE 100 /* 栈初始向量大小 */#define STACKINCREMENT 10 /* 存储空间分配增量 */#typedef int ElemType ;typedef struct sqstack{ ElemType *bottom; /* 栈不存在时值为NULL */
2011-12-14 13:17:13 741
原创 线性表的链式存储结构
typedef struct Lnode{ ElemType data; /*数据域,保存结点的值 */ struct Lnode *next; /*指针域*/}LNode; /*结点的类型 */ 1 建立单链表⑴ 头插入法建表LNode *create_LinkList(void) /* 头
2011-12-14 13:16:29 674
原创 线性表的顺序存储结构
#define OK 1#define ERROR -1#define MAX_SIZE 100typedef int Status ;typedef int ElemType ; typedef struct sqlist{ ElemType Elem_array[MAX_SIZE] ;int length
2011-12-14 13:15:44 380
转载 各种IT公司笔试所考题目的类型
各种IT公司笔试所考题目的类型公司名称公司类型笔试内容Trend网络公司C++或Java、网络,数据库,设计模式,智力测试,英语阅读SAP软件咨询、ERP、CRMC++,概率问题,设计模式,智力测试Advantech硬件,自动化公司
2011-12-13 13:51:44 1049
原创 Java核心技术:卷1笔记[10] 流与文件
1.保存在文件中的信息,或者从一个网络连接中获取的信息,其处理方式在本质上是完全一样的。可以从中读出一系列字节的对象称为输入流,能向其中写入一系列字节的对象称为输出流。这两种对象分别用抽象类InputStream和OutputStream来实现。对于以Unicode格式来保存的信息来说,用以字节为基础的流来处理不是很方便,因此,专门处理Unicode的类都从抽象类Reader和Writer继承而来
2011-12-13 11:53:32 1576
原创 Java核心技术:卷1笔记[9] 异常和调试
1.一个异常对象总是Throwable子类的实例。Throwable的子类演变成两个分支:Error和Exception。Error类体系描述了Java运行系统中的内部错误以及资源耗尽的情况,应用程序不应该抛出这种类型的对象。Exception自身也演变成两个分支:一个是RuntimeException的子类,以及不从它衍生的其他异常。由编程导致的错误会导致RuntimeException异常,而
2011-12-13 11:52:59 1234
原创 Java核心技术:卷1笔记[8] applet和应用程序
1.applet仅仅是一个扩展了java.applet.Applet类的Java类,如果applet包含Swing组件就必须扩展JApplet类。applet中使用init函数来替代main函数,因为applet是在网页中运行的,所以没有必要指定退出方法。2.applet嵌入Html中的格式: 3.将应用程序转换成applet的详细步骤:
2011-12-13 11:52:19 1538
原创 Java核心技术:卷1笔记[7] Swing用户界面组件
1.MVC设计模式: 1)模型:存储内容,实现改变和发现内容的方法。模型是不可见的。 2)视图:显示内容,一个模型可以有多个视图,其中每个视图可以显示完整内容的不同部分或不同方面。 3)控制器:处理用户输入,决定是否把用户输入事件转化成对模型或视图的改变。2.对于大多数控件,模型类实现了名字结尾为Model的接口,例如ButtonModel接口。
2011-12-13 11:51:45 1706
原创 Java核心技术:卷1笔记[6] 事件处理
1.AWT中事件处理机制概览: 1)一个监听器对象是一个实现了专门的监听器接口的类的实例; 2)一个事件源是一个能够注册监听器对象并向它们发送事件对象的对象; 3)事件发生时,事件源会把事件对象发送给所有的注册监听器; 4)监听器对象随后会使用事件对象中的信息来决定对事件的反应。2.习惯使用内部类: button.
2011-12-13 11:50:55 1805
原创 Java核心技术:卷1笔记[5] 图形编程
1.Java中的顶层窗口被称为框架,在Swing中为JFrame,它从AWT中的Frame类扩展而来。JFrame是少数几个不绘制在画布上的Swing组件之一。因此它的修饰部件(按钮、标题栏、图标等)是通过用户的窗口系统,而非Swing绘制的。2.框架在建立时是不可见的,这使得程序员有机会在框架初次显式前为其增添一些组件。为了显式框架需要调用其show方法。3.默认情况下,当用户关闭一个框
2011-12-13 11:49:53 1492
原创 Java核心技术:卷1笔记[4] 接口和内部类
1.接口中的任何方法都自动是public类型的,无需提供public关键字。不能在接口中放置静态方法,接口中也绝不会去实现方法。在实现接口时必须把方法声明为public。2.接口中可以提供常量。3.接口中决不能有实例字段。接口中的字段总是默认为public static final的,无需提供关键字说明。4.接口不是类,不能构造接口对象,但还是可以声明接口变量。5.也可以用inst
2011-12-13 11:49:19 1672
原创 Java核心技术:卷1笔记[3] 继承
1.子类无法直接访问其超类中的私有字段,要访问这些字段必须和其他方法一样使用公有接口。2.super不同于this,它不是一个对对象的引用(不能把super赋给另一个对象变量),而是指示编译器调用超类方法的专用关键字。3.一个对象变量可以指向多种实际类型的现象被称为“多态”。而在运行时自动选择正确的方法进行调用的现象称为“动态绑定”。动态绑定有一个非常重要的特性:它使程序无需重新编译已有代
2011-12-13 11:48:40 1520
原创 Java核心技术:卷1笔记[2] 对象和类
1.类之间最常见关系 1)依赖(“use-a”)一个类的方法操作了另一个类的对象 2)聚合(“has-a”) 3)继承(“is-a”)2.对象变量并不包含对象,它只是指向一个对象。在Java中,任何对象变量的值都是指向存储在别处的对象的一个引用。new运算符的返回值也是一个引用。3.本地对象变量并不会被自动初始化为null,必须对它们进行初始
2011-12-13 11:47:56 1320
原创 Java核心技术:卷1笔记[1] Java基本编程结构
Java基本编程结构[18]1.源代码的文件名必须同公有类的名字相同,且需以.java作为扩展名。2.和C不同,Java的main方法并不向操作系统返回“退出代码”,Java中,如果main方法正常退出,Java程序的退出代码为0,表示成功地执行完毕程序。若要用不同的退出代码终止程序,则使用System.exir方法。3.回车并不代表语句的结束,所以语句可以跨越多行。4.Java共
2011-12-13 11:47:20 1659
原创 CPP学习备忘[13] 异常
【1】异常使用三部曲1. 框定异常(try语句块)2. 定义异常处理(catch语句块)3. 抛掷异常(throw语句)前两个步骤是在一个函数中定义的,而抛掷异常则可以跨函数使用。当直接在try语句块中使用时,异常处理则退化为一般的错误处理模式;在try语句块中,会有一些语句调用了其他函数,它们之间则构成一个调用链,在调用链中的某一个节点上,如果出现抛掷语句
2011-12-13 11:42:10 347
原创 CPP学习备忘[12] 模板
【1】模板使程序员能够快速建立具有类型安全的类库集合和函数集合,以方便更大规模的软件开发。C++的STL全赖于模板实现,模板是C++面向对象程序设计的重要补充。 【2】函数模板的定义形式为: template 返回类型 函数模板名(数据参数表) { 函数模板定义体; } 【3】函数模板不是函数,它是以具体的类型为实参来生成函
2011-12-13 11:41:35 403
原创 CPP学习备忘[10] 抽象类
【1】一般地,一个容器,其元素是基类对象的指针或引用,才有多态可言。若没有指向基类的操作,子类就不能行使多态。 【2】抽象类的用途是被继承。定义抽象类就是在类定义中至少声明一个纯虚函数。所谓纯虚函数就是指明为不具体实现的虚函数。纯虚函数一旦声明,就不用定义,纯虚函数的声明形式是在虚函数声明形式后跟“=0”,例如:virtual void withdrawal(double amount)=
2011-12-13 11:41:10 351
原创 CPP学习备忘[9] 多态
【1】虽然从广义上说,数据类型是数据结构在一定的编程语言中的描述形式,但实际上描述群体数据(容器)的抽象数据类型才是数据结构的真正体现。 【2】类定义不占用任何内存空间,也没有任何对象的预处理,所以没有任何操作上的开销。 【1】一个操作随着所传递或捆绑的对象类型的不同能够做出不同的反应,其行为模式称为多态。 C++中采用一种滞后绑定技术来支持多态性,即滞后到运行时,根据具
2011-12-13 11:39:59 323
原创 CPP学习备忘[8] 继承
【1】派生类对象本体包括两个部分,一个为基类部分另一个为派生类部分。 派生类的默认无参构造函数会首先调用父类的无参构造函数,如果父类定义了有参构造函数(因此没有默认的无参构造函数),又没有重载定义无参构造函数,则会导致编译发怒。 并不是非得调用默认无参构造函数,可以在派生类的构造函数中规定调用基类构造函数的形式。如: class GraduateStudent : p
2011-12-13 11:39:11 329
《C++ Primer 4 Answer Book》 整理
2011-12-12
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人