博文
C语言-数据结构-二叉排序树与平衡树算法实现及演示(转)(2006-05-11 16:55:00)
摘要:这个程序是我学数据结构时候,老师说让我做个演示程序时候做的一个最初版本程序。当然这不是教给老师的演示程序版本,演示版本的算法是套用书上的,这版本算法是我自己写的,所以我不能保证它没BUG(PS:在删除平衡树节点时候,由于我采用不同于书上的删除策略,所以后面演示程序可能不会象想象中那样旋转)。下面我给出程序中主要的算法及功能模块函数概要说明,最后附上源代码。
算法1:平衡树创建
说明:1,输入数列以整数零结束;2,平衡树HEAD初始化为空树
(1) 从输入数列接收一个DATA
(2) IF DATA!=0 THEN DATA转化成NODE
ELSE 返回
(3) 将NODE插入平衡树HEAD中
(4) 转到(1)继续实行
算法2:平衡树中插入的实现
说明:作左旋转和作右旋转的同时,相关节点的BF均置0。
(1)从调用函数中接收一个节点NODE
(2)IF HEAD=NULL THEN 将NODE节点直接插入平衡树HEAD
转到(6);
(3)IF HEAD>NODE
THEN 将NODE节点插入HEAD->LCHILD平衡树
转到(4);
ELSE IF HEAD<NODE
THEN 将NODE节点插入HEAD->RCHILD平衡树
转到(4);
ELSE 转到(6)
(4) 计算HEAD根节点平衡因子BF0
(5) IF –2<BF0<2 THEN 转到(6)
ELSE IF HEAD根节点BF==2
THEN IF HEAD左子树根节点BF==1 THEN 右旋转
ELSE (说明左子树根节点BF==-1)
做先左后右旋转,修改相关节点BF;
ELSE IF HEAD根节点BF==-2
THEN IF HEAD右子树根节点BF==-1 THEN 左旋转
ELSE (说明右子树根节点BF==1)
作先右后左旋转,修改相关节点BF
(6)返回
功能模块概要说明:
1,创建二叉排序树 Insert(BNODE **head),InitBST(int *p)
2,打印二叉排序数 Pr......
成为一个的程序员需要哪些条件?(转)(2006-05-07 13:16:00)
摘要: 程序员是一种技术工作,在IT的发展中有相当重要的地位,从底层硬件通讯协议的建立, 到数据传输层的处理,到操作系统的建设,到数据库平台的建设,一直到应用层上各种数 据营销平台的搭建,程序员在里面都扮演着举足轻重的角色并为IT事业的发展做出了巨大 的贡献。
中国有很多精于编码的人,但是中国软件行业,尤其是网络应用开发方面误区很大,很难 形成有规模的软件开发力量和产品能力,不但比美国差距甚远,和印度相比也是颇有不 如。这些问题不是在于中国程序员的智商和工作努力状况,也不是在于国家和民间对开发 的投入程度,而是很大程度上,有一些对技术,对程序开发,对项目设计方面的思想误 区,这些误区,导致了软件行业的产品化能力不足,缺乏规模化和大型复用系统研发能 力,可以说,改变认识误区,是解决软件行业小作坊模式和个体英雄模式所带来的局限性 的重要工作。
中国有很多小朋友,他们18,9岁或21,2岁,通过自学也写了不少代码,他们有的代码写的 很漂亮,一些技术细节相当出众,也很有钻研精神,但是他们被一些错误的认识和观点左 右,缺乏对系统,对程序的整体理解能力,这些人,一个网上的朋友说得很好,他们实际 上只是一些Coding fans,压根没有资格称为程序员,但是据我所知,不少小网络公司的 CTO就是这样的coding fans,拿着吓人的工资,做着吓人的项目,项目的结局通常也很吓 人。
程序员基本素质:
作一个真正合格的程序员,或者说就是可以真正合格完成一些代码工作的程序员,应该具 有的素质。
1:团队精神和协作能力
把它作为基本素质,并不是不重要,恰恰相反,这是程序员应该具备的最基本的,也是最 重要的安身立命之本。把高水平程序员说成独行侠的都是在呓语,任何个人的力量都是有 限的,即便如linus这样的天才,也需要通过组成强大的团队来创造奇迹,那些遍布全球 的为linux写核心的高手们,没有协作精神是不可想象的。独行侠可以作一些赚钱的小软 件发点小财,但是一旦进入一些大系统的研发团队,进入商业化和产品化的开发任务,缺 乏这种素质的人就完全不合格了。
2:文档习惯
说高水平程序员从来不写文档的肯定是乳臭未干的毛孩子,良好的文档是正规研发流程中 非常重要的环节,作为代码程序员,30%的工作时间写技术文档是......
学好VC++的十大良好习惯(转)(2006-05-07 13:08:00)
摘要: 每到年底各大媒体就争先恐后热火朝天地搞总结,什么十大人物,十大品牌,十大美女,十大帅哥等等五花八门乱七八糟的让人充满好奇充满怀疑,这事确实让人有点郁闷,就如同男足国家队的国产教练如沈墙扶们每一次踢球失败后都要说这么一句:我们回去后要好好总结,下次会打得更好! 这话听了几十年了,耳朵都生虫了,但还是无法看到中国猪球队有象人样的表现.因此,总结在某一程度上来说只不过是一种形式罢了,总结不代表就能改过原有的不足,也不代表就能进步了,甚至有点俗不可耐,尽管如此,阿蒙亦明知故俗,前人说过了入乡了就要随俗,因此你生活在这种环境里,你无法对这些无聊无趣的东东置之不理,除非你是天才,天才往往在非天才的人看来是很怪异的,处处与现实格格不入,,所以我们还得赶快总结。
(一)充分利用MSDN,因为我个人觉得它胜过任何一本编程参考书;
MSDN是 Microsoft 当前提供的有关编程信息的最全面的资源,它包含微软最新的技术数据库,加上易学易用的全文检索功能,让您迅速找到任何您需要的技术参考数据,让您随时拥有与全世界菁英同步的技术,掌握最丰富的程序开发资源。我经常收到很多朋友的EMAILS,他们所提的问题往往都非常的简单,MSDN完全可以解答这些问题,但他们好象不太喜欢用,这是让我郁闷的地方,是因为英文不好呢,还是没有学会充分利用各种资源来解决问题的方法呢?
(二)提高英文水平,养成多上英文网站多看英文资料多买老外原版英文书;
有关程序员与英文水平的讨论已太多太多, 我个人认为要成为程序员,高中的英语水平够了,甚至不懂英语的一些人,也同样可以成为较好的程序员,因为开发工具的发展将是越来越傻瓜,但如果你是仅仅满足于能运用某种工具开发某个软件模块,那是没话说了.真正热衷技术肯干钻研乐于接受挑战的程序员是不满足于现状的,他们总感觉有太多的未知,于是总在不停地学习,如今信息技术发展得太快,而大部分的技术最先出现的时候都是英文版本的,要几个月或者几年以后才有中文版本的书出来,因此要想跟上步伐,一定要努力提高自己的英文水平,这样才能同步跟上信息技术。你可能担心自己的英语水平不行,没关系,刚开始多查字典,"万事开头难",必须有持之以恒的精神,不久你就会发现计算机英语其实很容易的。何况很多
英文技术站点确实比国内做得......
VFP系统命令和函数的运用技巧(1)(转)(2006-05-07 12:59:00)
摘要: Vfp为我们提供了非常丰富的命令和函数,在Vfp中编程应尽量用Vfp身的命令或函数,只有实在没办法时才考虑用WIN32API外部连接库。
1.如何取得系统目录
nPath_ls=fullpath('command.com',2)
nPath=strtran(nPath_ls,'COMMAND.COM','') &&取得Windows\的目录名
*如果想得到SYSTEM目录则:
nPath=strtran(nPath_ls,'COMMAND.COM','system\') &&取得Windows\system\的目录名
当然下面的代码更简单:
mWinPath=getenv("windir") &&取得Windows\的目录名
2.如何取得运行程序的盘符和当前目录
Dqml=sys(5)+sys(2003)+'\'
3.如何取得某个文件的大小、修改日期及属性
Vfp为我们提供了一个非常强大函数ADIR(),
语法:
ADIR(ArrayName [, cFileSkeleton [, cAttribute [, cCreatorType]]])
使用:
X=Adir(Myml,'C:\TEMP\*.DBF')
返回:
X=符合cFileSkeleton条件的文件或目录个数
Myml=一个有五列内容的数组。
这五列的含义是:
1 文件名 字符型
2 文件大小 数值型
3 文件日期 日期型
4 文件时间 字符型
5 文件属性 字符型
例:我们想得到某个文件的大小或文件修改日期及属性:
X=Adir(Myml,'C:\TEMP\abc.DBF')
IF X#0
wjsize=Myml(1,2) &&取得文件大小
wjdate=Myml(1,3) &&取得修改日期及属性
wjAttr=Myml(1,5) &&取得文件属性
ELSE
wait wind '没有您指定的文件'
ENDI
文件属性的含义:
程序开发团队-团队开发精神(转)(2006-05-06 15:32:00)
摘要:要形成出色的团队精神,我觉得应在工作团队中达到以下几个方面的一致:
第一, 在目标上达成一致;
我们都喜欢交一些志同道合的朋友,因为志不同道不合的人,让我们很难沟通与交流,也很难在思想上有火花冒出,共同的目标是一种意境,在程序开发团队中,只要有一名程序员与团队的目标不致,那么该团队的整体水平将受到影响,这种影响不仅仅来自于这个程序员本身,而也来自于团队内部其他程序员的绩效下降,在心理上,其它程序员总能感觉到团队内部的分歧或者某个同伴漠不关心的态度;因此,为了实现团队目标的一致,最好的办法莫过于让程序组自已来确定其目标,这样做的好处有:首先,在目标的制定时的广泛参与,可以确保目标能被大家充分理解,而不是某个LEADER的个人行为;另外,目标制定的过程使团队中的每个程序员可以有机会对共同的目标做出公开的承诺,提高目标的可接受性,增加目标的清晰程度。团队成员即程序员广泛也参与到目标的制定、讨论,让他们感受到自已在团队中的重要性,以及团队的成功就是他们自已的成功,以后不论遇到任何困难,他们都会团结一致,勇往直前。
第二, 共同承担责任;
建立一个环境,使每个团队成员在这个环境中都感到自已应对团队的绩效负责,除了勇于承担自已的那部分责任,而敢于承担团队的共同责任,遇到问题或困难时,勇于接受挑战,而不是互相推诿,这样,团队的目标才能继续前进。
第三, 一位值得尊重的团队领导;
在实际工作中,遇到一名糟糕的主管要比找到一名出色的程序容易得多。在我前些的编程工作中,我的部分领导是通过外部力量而任命的,比如老板觉得那个搞市场或搞工程或搞行政的人很能干,就派他来做程序团队的LEADER,事实上他们可能了解一些规范化的玩意,但并不具备为了在开发团队中实施自已的影响所必需的能力,这种LEADER往往喜欢不懂装懂,手提长鞭高高在上,就象一个不可一世的军官那样发号施令,不难想象,极少程序员会服他听他,一种最典型的反应就是“消极怠工”,严重的还会造成LEADER与PROGRAMMER的冲突,以致于有一方辞职不干了,多般是程序员,呵呵,因此程序开发团队的LEADER最好是一位具有优秀的开发能力和管理能力的资深程序员,他不......
C语言中使用中常见的错误分析(转)(2006-05-06 15:09:00)
摘要:1 引言
C语言是比较通用的一种程序设计语言,具有数据类型多样、函数丰富、运算灵活、生成目标程序效率高、应用面广、可移植性好、且可以直接对硬件系统进行控制操作等优点而受到广泛的欢迎,目前很多高校都开设了C语言课程。但由于C语言书写比较灵活,语法限制不严,对初学者来说容易出错。笔者在教学中针对学生学习C语言时常见错误进行了分析,供初学者借鉴。
2 C语言使用中常见的错误
2.1 系统设置错误编译时出现“LinkerError:Unabletoopeninputfile‘COS.OBJ’”错误信息。说明连接目录在错误,改正的方法是在菜单“Option”中“Directories”需重新设置“Includedirectories”、“Librarydirecto-ries”和“Turbocdirectories”,如果TC安装在D:\TC目录下,那么以上三项分别应设置为“D:\TC\INCLUDE”、“D:\TC\LIB”、“D:\TC\TC”,然后使用菜单“Option”→“Saveoptions”保存当前的设置。这种错误常发生在TC不是安装在C盘的根目录下,因为系统默认是C盘的设置。
2.2 大小写错误C语言规定所有的关键字必须小写,而标识符中的字母则既可以大写,也可以小写,标识符不能与关键字相同,并区分大小写字母。例如,else是关键字,不能作为标识符使用,而ELSE可以作为标识符使用。
2.3 漏写分号、花括号在C语言中,规定一个语句必须以分号结束或花括号结束,如:intx=1;{inty=2;y+=x;printf("%d,%d\n",x,y);}应注意,复合语句中的最后一个语句仍然需要分号,最后一个“}”不能省略。比较容易忽视的是在“}”之后的分号,如一个类型的定义之后必须使用分号,包括结构体、联合体和枚举。如:structst{intx,*y;};
2.4 混淆“=”与“==”的区别在C语言中“=”是赋值运算符,不能作等号使用,这与其它高级语言是有区别的,而“==”是关系运算符,比较两个数据是否相等,且“==”比“=”优先级别高,如:main(){intx=1,y=2;print......
比尔·盖茨的忠告(2006-05-05 15:26:00)
摘要:墨西哥《成绩》周刊6月6日一期发表了比尔·盖茨写给即将走出学校、踏入社会的青年一代的11点忠告:
生活是不公平的,你要去适应它。
这个世界并不会在意你的自尊,而是要求你在自我感觉良好之前先有所成就。
刚从学校走出来时你不可能一个月挣6万美元,更不会成为哪家公司的副总裁,还拥有一部汽车,直到你将这些都挣到手的那一天。
如果你认为学校里的老师过于严厉,那么等你有了老板再回头想一想。
5.卖汉堡包并不会有损于你的尊严。你的祖父母对卖汉堡包有着不同的理解,他们称之为“机遇”。
如果你陷入困境,那不是你父母的过错,不要将你理应承担的责任转嫁给他人,而要学着从中吸取教训。
在你出生之前,你的父母并不像现在这样乏味。他们变成今天这个样子是因为这些年来一直在为你付账单、给你洗衣服。所以,在对父母喋喋不休之前,还是先去打扫一下你自己的屋子吧。
你所在的学校也许已经不再分优等生和劣等生,但生活却并不如此。在某些学校已经没有了“不及格”的概念,学校会不断地给你机会让你进步,然而现实生活完全不是这样。
走出学校后的生活不像在学校一样有学期之分,也没有暑假之说。没有几位老板乐于帮你发现自我,你必须依靠自己去完成。
电视中的许多场景决不是真实的生活。在现实生活中,人们必须埋头做自己的工作,而非像电视里演的那样天天泡在咖啡馆里。
善待你所厌恶的人,因为说不定哪一天你就会为这样的一个人工作。......
提高Matlab运算速度的方法(转)(2006-05-05 14:03:00)
摘要:由于matlab是一种解释性语言,所以在matlab程序中最忌讳直接使用循环语句,如果不得已要使用for循环,可以采用以下方法提高速度。
1、使用6.5以上版本,对循环已作优化;
2、尽可能转化为矩阵运算;
3、转化为二进制执行文件运算,如使用matlab内带的编译系统或matcom以及com组件技术。
其中com组件技术最方便的就是利用com builder来实现,这里重点介绍。
com builder是matlab6.5才有的,也是mathworks公司推荐使用于混合编程的,这些日子进行了全方位的摸索,感觉是爽呆了,下面我们一起来揭开它的神秘面纱。
此系列分为以下几块:
1.matlab下做com组件
2.vb,c#.net实现调用
3.vc实现调用
4.打包
5.优缺点评注
其中2,3部分可以选择一个看
matlab下做com组件
com是component object module的简称,它是一种通用的对象接口,任何语言只要按照这种接口标准,就可以实现调用它。matlab6.5新推出来的combuilder就是把matlab下的程序做成com组件,供其他语言调用。
我们先准备两个测试文件,并copy一个图片到c盘下,起名叫1.jpg(这些你都可以改的,我这儿是为了程序方便):
第一个叫im_test.m如下:
function im_test %这个文件不带输入与输出
I=imread('c:\1.jpg'); %因为以前带有imshow的程序用mcc编成dll后用不
%了,所以想试combuilder是否
imshow(I); %能支持这些函数
第二个叫split2rgb.m,就是前些日子Zosco发给我的那个程序,因为它用mcc编成dll后有问题,所以我在这儿继续将它进行测试,而且它也带有多个输入及输出参数,所以也正好拿来测试
在matlab的workspace下打comtool,就打开了matlab com builder,点击file-new project,新建一个工程,在component name里填上comtest,Class name里填上一个sgltest(并将自动生成classes里的co......