to breath:堆栈我好像知道,但其他的是什么?
to all:说话的语气无所谓,但请多谈数据结构,因为我没感到需要用他们,所以纳闷,所以才问。

解决方案 »

  1.   

    to mrby:“不错的作品”中包括一个十六进制代码编辑器,别人的同类软件中用了二维表或者递归吗?我不知道,但不用这些,速度反而更快,为什么?
      

  2.   

    to microsoft:领教,这些人不是程序员,也总应该是别的什么吧?是什么?能告诉我吗?
      

  3.   

    该收了,感谢大家的捧场。我出这个题目,醉翁之意不在酒,相信明眼人早已看出。大家都说数据结构很重要,又不举例,我担心有些人和我一样,也只是听说的。
    其实,我可以举个例子:在我的程序里“拆”了LZW,也“拆”了RLE,唯独没敢动JPEG,不是顾忌霍夫曼,霍夫曼有“漏洞”,但“DCT”我把握不住。当然,时间也是一个因素——更重要的因素,却不足为外人道。
    以上有14位朋友发言,我打算把分数均分,抱歉,只有这么一点,请笑纳。
    感谢leer,在别的地方他告诉过我,题目很重要!
    另外,上面有一位朋友的名字是“Nicrosoft”,被我错拼成“microsoft”,对“Nicrosoft”和“microsoft”一并表示道歉。
    谢谢大家,如果有兴趣,可以用我的程序“拆”一些东西,诸如JPEG,因为你们比我条件好,你们懂数据结构。
      

  4.   

    今天才看到你的问题,堆栈我想你不会不知道的
    我说的这些都是我用过的
    举个最简单的例子,老鼠过迷宫,遇到岔路时候怎么办
    1、递归(资源占用大)
    2、堆栈(将岔路入栈,走不通时弹出...)
    至于队列,windows的消息机制不就是队列么
    ...
      

  5.   

    to breath:请原谅,我的概念好像有问题。我以为数据结构跟数学公式关系密切,而且公式总会越来越多,越来越难。如果只是考虑具体问题,怎样更小、怎样更快,这能算是数据结构吗?
    谢谢你的再次关注。
      

  6.   

    sorry,上面"数据变量"是"数组变量","我权你"是"我劝你",上面我的意思是说多看一些别人的东西,把自己的思维开拓一些,接受别人的一些想法,编程并不是简单实现某个功能了事的问题.还有
    数据结构和算法不是同一个概念,希望你能搞清楚,做程序员,在思维上狂我很赞成.有一点,我给你
    提些意见,你不知道它有什么用,为什么不找本书看一下呢?可能,你有你的原因吧!
      

  7.   

    to Geoson:听说数据结构很重要,所以有这方面的书我总是努力去看,遗憾,每次都是无功而返。我觉得在没有用到之前,看这些书的结果就是把自己搞糊涂了,所以连数据结构和算法这样的基本概念也含含糊糊(感谢Brighting帮我澄清)。不是想反对什么,而是想弄懂一些概念,当然,私下里我认为把《数据结构》当功课来学,不如等用到时再去查更加有效。
      

  8.   

    先引用一句:"私下里我认为把《数据结构》当功课来学,不如等用到时再去查更加有效。"没学过,不懂得它到底有什么用的时候你会想到你的问题可以用它解决(至少是更容易解决)吗?我想不能吧?我一直认为数学和数据结构对一个程序员都是很重要的,尽管我编程时也觉得很少需要这些东西,但有时做着做着却忽然发现自己其实已经用着了。数学给人以清晰的思维和精确的逻辑,是思想的基石,数据结构则是作为程序的基石,在程序要处理的数据越多、运算越复杂的情况下数据结构的基础就越发显得重要(当然,算法也是如此)。你的图象处理或者是16进制编辑器其实完全需要一个数据结构的,否则我觉得挺有理由认为这程序设计上比较松散。或许你有一个你自己所设计的数据结构,但在你的意识中并不认为它属于数据结构范畴,但这观念却肯定是错的,这并非不属于,而是因为它已经存在于你所学的知识领域中或者是你能从你的知识领域中独立的思考出来,并非一定要堆栈或者链表、树或者图才算数据结构,对吗?再退一步说(我把堆栈里的数据弹出来回溯到是否需要数据结构那里去了),如果你的程序需要提供不同的jpeg的压缩度(也就是失真度),你如何处理?我想还是得用别人的例程或者控件吧,要是说你的程序自己完成了这些功能的话,就不需要别人告诉你数据结构的重要性了。同理,如果你想要你的16进制编辑器支持数十步的undo(一步的话加个变量也够了,不提),不用堆栈链表什么的,应该说不用到数据结构的知识,我虚心的请教该怎么做?
      

  9.   

    我的程序支持无限的undo,不过实现很简单,没有用链表,因为undo总是顺序进行的,用一个一维数组就可以了。另外,你其实可以下载我的程序看看,在http://qinkhan.126.com,倒不是单纯为了宣传,我的程序确实比一般的十六进制浏览器好用,比如它可以看2G以下的任何文件,支持右键快捷方式,另外文件及文件间查找也不错。
    即使对图像不感兴趣,单纯用它替代一般的十六进制浏览器,我认为也足可胜任。
      

  10.   

    如果不学数据结构,大概也只能坐坐UI什么的,要么DB应用,其他呢?行吗?
      

  11.   

    就那树来讲吧!你在100万个DATA中找一个你要的数据那你要几百万次的比较吧。但是你用树的话,用的时间就是14层树的比较的时间(我用AVL树来讲).这就是数据结构的好处.
    最多不超过30次的比较判断.这就是SQL数据库的原理所在.否则不用这个的话你用的时间呈指数上
    升。
    当然,SQL数据库是用的B树的方法,比AVL数还要快的多.现在的NTFS文件系统也是一中B树的文件系
    统所以说你不学数据结构,你编的PROGRAM则是小儿科而已.现在的编程不是你会用VC,BCB,DELPHI就可以了,那只是基础.关键是要好的算法(这就是学数据结构的好处),好的思路
      

  12.   

    就那树来讲吧!你在100万个DATA中找一个你要的数据那你要几百万次的比较吧。但是你用树的话,用的时间就是14层树的比较的时间(我用AVL树来讲).这就是数据结构的好处.
    最多不超过30次的比较判断.这就是SQL数据库的原理所在.否则不用这个的话你用的时间呈指数上
    升。
    当然,SQL数据库是用的B树的方法,比AVL数还要快的多.现在的NTFS文件系统也是一中B树的文件系
    统所以说你不学数据结构,你编的PROGRAM则是小儿科而已.现在的编程不是你会用VC,BCB,DELPHI就可以了,那只是基础.关键是要好的算法(这就是学数据结构的好处),好的思路
      

  13.   

    to FireAngel:还没查到UI是什么意思,是小凳子吗?DB是不是跟数据库有关?
    to js123:在100万项数据中能够通过30次判断找到目标?需要什么样的“树”和算法?愿闻其详,非常非常感谢。
      

  14.   

    UI是User Interface
    关于树的问题,建立一棵排序二叉树就可以,不过建立这棵树倒是比较费时间。
      

  15.   

    to 2000:用vb或Delphi可以不写一句代码就完成一个功能全面的媒体播放器,这样的“程序员”当然不需要数据结构知识,如果他们能被称为程序员的话。
      

  16.   

    就是说30次判断是对有序数据进行的?那刚好是1G。
    to Nicrosoft:其实盗亦有道,我本人不会用VB或Delphi,但我觉得那里边的学问一定
    也很深。
      

  17.   

    to 2000:您误会我的意思了,我没有丝毫贬低vb或Delphi的意思(相反,我本人用vb从1.0至6.0,而我最喜欢的开发工具是Delphi),您再读一遍我的那句话看看?
      

  18.   

    首先,我希望大家不要再过多讨论该不该学的问题了。
    我有一本清华大学出版社出版的<<数据结构>>一书(C语言版)。但由于水平有限,真的看不懂。不知道这里的朋友能否向我推荐一本有关这方面的,比较浅显、入门的书籍。我看过谭浩强教授的C程序设计一书,上面有一例讲链表的生成、删除、插入,讲得很详细,对我来说就需要这样的读物。可惜,书上只有这么一个例子。关于其它东西,教我参考数据结构方面的书籍,但是,哪里才有适合我阅读的呢?
      

  19.   

    30次判断,用二分法不就可以了吗,但是必须排序
    数据结构我没有仔细琢磨,只是知道树等的概念和应用范围,说实话,我开发两年多VC以来,唯一一次用到也不过是二分法而已,也是到时现翻书学的,我一直不大明白许多人学东西为什么一定要从最原始的开始学起,学个半年的C,然后再半年C++,然后才学VC++,为什么不找本24小时学习VC呢,简单实用,先学个框架,再开发中学习细节不就可以了吗?我觉得知道用什么方法解决这个问题OK了。
      

  20.   

    To 2000:
    你的回答已经证实我上面的话(“其实你已经用了数据结构的知识了”)了:
    你用一个一维数组解决了这个问题,but……undo嘛,你的操作必定是后进先出吧?这不就是
    一个堆栈吗?然后就是无限undo的问题,用一维数组做堆栈,你把数组设多大了?考虑到内存
    容量,不可能设置得太大的吧?链表会比较浪费空间,但是都是需要时分配,也可以利用一些
    内存空洞,在步数比较多的情况下优势比较明显(关键是按需分配,而不是强行要多少)。TO Kronus:
    二分查找确实很快,但是用二分来查找一个基于链表所构成的数据实在很不实际,因为当你正
    遍历链表中第n个节点时你只知道第n+1和n-1个节点的位置,想知道n/2的位置只能不停的走
    下去……而实际应用上,有时必须用链表的那种方式来操作数据的,因为内存中并不一直存在
    巨大的连续可用空间来存在数据(一般的数组是连续存放于内存里的),在这种情况下二分就
    失效了。而树遍历来查找数据也是很快的,每遍历一个节点时确定遍历的下一个节点,要找到
    想找的数据是非常快的,只是建立这个树比较耗时耗力,但建立之后添加新节点删除节点寻找
    节点的速度都非常快。最后提一句:数据结构其实是与语言无关的,各有各的实现方法,当然,c的指针绝对会比
    basic的方式有效得多。
      

  21.   

    没有学过数据结构
    程序中就没用数据结构了吗?
    不可能的
    只是我们大多数程序员用的数据结构都很简单
    程序逻辑都不复杂
    虽然一些问题很头痛
    但是也不会使用一些复杂的数据结构
    2000说他没有用递归,程序速度更快,这是对的
    循环比递归更快
    如果能够用循环解决问题,谁都不会用递归
    要成为程序员
    会for,while,if等几个简单的语句就行
    但是想成为高手
    不懂数据结构恐怕不行
    我说的高手,不是在会不会的界限上
    而是在能不能的界限上
      

  22.   

    对不起,刚才一直进不来,似乎不是我一个人遇到这种问题,建议csdn好好改进。
    to Nicrosoft:我确实曲解了你的意思,抱歉。不过我认为即使不写代码,根据定义,做程序的人也应属于程序员。
    to microant:感谢你的关注!undo使用一维数组,不过是动态分配的,步长0x1000。在undo这种场合使用链表肯定会降低性能,并且也用不到它的长处(随机访问)。
    说到遍历链表,那正是我的意思:比如,我不太懂数据结构,但知道二分法,经常用它解决问题。忽有一日,碰到链表了,左思右想,苦无良策,于是去查书,学到“树”的方法。这样可以吗?
    如果有机会学,没必要故意不学。但如果像我一样半路出家,也没必要惴惴于自己的浅薄。许多人听信行家的话,关起门来悬梁刺骨,结果却倒尽了胃口,无功而返。他们不懂,别人的经验不适用于自己的情况。
    日积月累,有收获,有乐趣,才能越走越远。至于行家总是断言爱好者没有前途,谁也知道那是偏见,可以不去理会。