感觉java的数据结构好难理解
C/C++的数据结构代码我看一遍基本上就能看懂
用java写的数据结构我看很多遍都不一定能看懂
谁给我说一下java写数据结构的一些思想 不像C/C++用指针指来指去的感觉很直观明了 我很喜欢goto那种逻辑
C/C++的数据结构代码我看一遍基本上就能看懂
用java写的数据结构我看很多遍都不一定能看懂
谁给我说一下java写数据结构的一些思想 不像C/C++用指针指来指去的感觉很直观明了 我很喜欢goto那种逻辑
解决方案 »
- 飞信API源代码
- ‘protected’ means all classes ...出自哪本书
- 如何将在文本区域里输入的内容转变为数字?
- 请问取得oracle 中long raw 字段的值
- [转帖] 请不要做浮躁的人(希望你我共勉)
- 关于package,一个让初学者迷惑不已的问题!请都进来谈谈。
- 总算成为一颗红星,散些分先
- 急死了! oracle中long数据类型问题! 重酬!!!
- 是不是applet的安全机制与jdbc的连接机制,使得在applet中根本就无法实现数据库连接!
- 有关java与web服务器的通讯的问题
- JLabel文本如何竖立显示(swing界面)高手在哪里?
- 想做一个类似聊天的工具,设计征求阶段
不过C++语言确实是更加自由,因为有指针!
确实,我学了N年的Basic,那个时候对GOTO的使用很得心应手,现在反而不会用了。这是个习惯的问题。
数据结构和算法的重点显然是非面向对象的,更多偏重于过程的刻画。C++在刻画过程上很清楚,值的复制还是引用很明了。
PS:面向对象,还有纯面向对象这种噱头就不要拿出来了,蒙蒙初学者倒是不错。
C++支持的不仅仅是面向对象,还有面向过程,泛型编程等多范式编程。如果你的代码量不够的话,或者只会写接口和类,就很难体会到这一点的重要性。
面向对象尽管是软件开发中的很重要的东西,不是软件开发的全部。
太多人对C++有偏见了,认为C++是和C一样很靠近操作系统的东西,很底层,很难学。C++只是提供了这种能力而已,而C++也提供了更高级的语法和类库。还有老紫竹说的:“特别是引以为自豪的指针和goto ”
C++从来不会以GOTO而自豪的,但是实际上GOTO有的时候是很好用的,在松本行宏的Ruby 手工Lex里很多GOTO的,效率高了。
如果真的想把数据结构看得很透澈,可以看《算法导论》,代码看C++的STL,书可以参考《STL源码剖析》。那你所得到的知识就是最实在的知识了。
最后,算法和数据结构是为了把实际问题抽象为数学的理论,理论上在链表中Insert和Delete元素要比数组效率高,但是这个只是理论。
在《C++ Primer》里分析了为什么vector往往效率高于list的原因,很清晰。它讲了内存copy等速度的问题。
而Java,ArrayList,你要知道它多少的信息才能真的确定它的效果呢?你可能都无法知道add一个元素会真正引发什么样的内存和寄存器操作,可能在准备调用add的时候就已经经历了一次“add”的查找呢(Java里不是这样的,但是Ruby是这样的)。所以你所学到的东西太“正龙拍虎”了。
如果你想让你的数据结构和算法有更好的实用价值,那么用Delphi。
但是如果你想要它们类型安全,那么用C++ templates。
http://topic.csdn.net/u/20080127/02/a573bca0-393a-403c-8699-00be680e4477.html
其实只要你用的熟练了,深入了,都会化繁为简的~
Java延用了C++的语法,和Smalltalk(还是Effil,我记不清了)的引用语义。
如果是这点,你应该看看Thinking In Java关于句柄的一个小节。这和C++的指针是一个语义的,只不过不能对指针值进行加减运算而已。
http://healerkx.spaces.live.com/blog/cns!9485FFC4816F2CAD!911.entry
http://healerkx.spaces.live.com/blog/cns!9485FFC4816F2CAD!912.entry
调用就可以了,让开发人员更多地关注于业务逻辑的实现,而并非关注在数据结构上。或者可以这么说,Java是一种偏向于应用的编程语言,而C/C++更多地偏向于学术方面。
思想上的问题 Java会使你的思想从过程式的设计方式转变到oo方式..
把具体细节给封装(隐藏)了,你只需要关注你本职的那一部分,而不用了解整个系统..
Java中也有指针的,只不过不对外开放,由虚拟机内部进行操作。
————————————————————————————————
你这句话等于没有说,那我说SQL也有指针呢。Java在语言上没有C#的unsafe,sizeof等关键字,即便是把指针开放出来,也是没有用的。
如果加了,就要考虑大端,小端的问题,那么Java还能跨平台嘛?不能跨平台的Java还是Java嘛?
C/C++所能实现的数据结构和算法在Java都能实现,现在也有以Java为语言的数据结构和算法书籍。
————————————————————————————————
这个确实,但是HashMap这种东西基本都是C/C++写的,Java给做了一个“壳子”。有真正用Java本身实现的哈息表在使用嘛?为了便于开发人员使用,Java类库中的已经包含了大多数的数据结构,并不需要自己去实现,直接
调用就可以了,让开发人员更多地关注于业务逻辑的实现,而并非关注在数据结构上。
————————————————————————————————
确实,大多数的情况,ArrayList,HashTable,TreeMap就可以适用了,但是那种极端的情况就是非C/C++不可的了。
或者可以这么说,Java是一种偏向于应用的编程语言,而C/C++更多地偏向于学术方面。
—————————————————————————————————
C/C++在学术方面相对于Java来说的确实够学术了,但是从应用的角度,java的应用还是远远少于C/C++的。
你此刻无论是在WinXP上,还是Linux上,除了你的Eclipse是一个优秀的Java产品外,你还能找出来第二个嘛?:)
有只会Java,不会其他语言的高手存在嘛? 我不知道,等着大家发掘出来一个,不过常常听人说不会C就等于不会编程。
你用C++去写网站啊 你直接把html的内容以字符流返回啊
就好像老式的房子 地基是用那种水泥砖 俗称青砖 上面就用红砖 非沉重墙只用半砖
如你所愿 满世界的程序都是C写的 与我又何干
你就捧着C成为大师吧
一个人在Java版,每天说C++好,说Java不好,能有一个星星嘛? 我这颗星星也不是倒分倒来的。
但是我不是一个Java Purist。Java做的好的地方,我就支持它,它不行的地方就应该指出来。如果一个学习者的目标不高,安于每天写写PHP,调调CSS,那么我们就不给他过高的要求。
但是你想学习计算机知识,纯Java的思想是不可行的。
我得罪你了? 你骂我就算了, 为啥扯上所有的C/C++程序员呢?To 火龙果,
你继续举例子,你还能举出WebSphere和WebLogic。然后继续。
还有Lotus Notes 8,不过限于外面的Shell,里面真正的Notes还是原来C++的代码。
还有Oracle9i,也限于外面的Shell,数据库的内核肯定是C的。
再学java
因为你还没适应java的习惯,所以就有这种感觉
http://topic.csdn.net/u/20080121/13/14691c78-e3b7-4043-bb69-3342b803c2ca.html
我第一次做这个题目的时候40多分钟就做出来了 然后我想既然学了编程 我也试试用程序来解 而且既然用了电脑就不应该再包含人的推理过程了
想法是这样的 就是一个二维数组 然后按已知条件往里面放元素 如果该位置已经有数据了再往后放 如果放到最后都不能满足条件 说明上一个条件位置放错了 再返回上一个条件 先清空再往后放
感觉类似栈的结构 但是我却无从下手(用C++的话可能勉强能写个类出来)所以才发现数据结构的重要性 而且我还有一些更好的想法 但实在是写不好代码下面是我写的一部分垃圾代码 初学编程 代码逻辑比较简单 见笑了
我的目的就是想把这个问题用一个类或者一个函数来解决 传递给出条件中的两个参数 外加一个辅助参数就可以了 //因为条件中有减一的情况 所以用了[6][6] 省去了判断
public class Einstein {
public static void main(String args[]){
String[][] house=new String[6][6];
/*----------------------------
house[1]:颜色
house[2]:国籍
house[3]:饮料
house[4]:香烟
house[5]:宠物
----------------------------*/
for(int j=1;j<6;j++)
for(int k=1;k<6;k++)
house[j][k]="blank";
//8、住在中间房子的人喝牛奶
house[3][3]="牛奶";
//9、挪威人住第一间房
house[2][1]="挪威";
//14、挪威人住蓝色房子隔壁
house[1][2]="蓝色";
//其他按顺序来
//===============================================================
//1、英国人住红色房子
for(int i=1;i<6;i++){
while(false){
_i:
house[2][i]="blank";house[1][i]="blank";
i++;
}
if(house[2][i].equals("blank") && house[1][i].equals("blank")){
house[2][i]="英国";house[1][i]="红色";
break;
}
}
//===============================================================
//2、瑞典人养狗
for(int ii=1;ii<6;ii++){
if(ii>5) continue _i;
while(false){
_ii:
house[2][ii]="blank";house[5][ii]="blank";
ii++;
}
if(house[2][ii].equals("blank") && house[5][ii].equals("blank")){
house[2][ii]="瑞典";house[5][ii]="狗";
break;
}
}
//===============================================================
//3、丹麦人喝茶
for(int iii=1;iii<6;iii++){
if(iii>5) continue _ii;
while(false){
_iii:
house[2][iii]="blank";house[3][iii]="blank";
iii++;
}
if(house[2][iii].equals("blank") && house[3][iii].equals("blank")){
house[2][iii]="丹麦";house[3][iii]="茶";
break;
}
}
//===============================================================
//5、绿色房子主人喝咖啡(4先跳过)
for(int v=1;v<6;v++){
if(v>5) continue _iii;
while(false){
_v:
house[1][v]="blank";house[3][v]="blank";
v++;
}
if(house[1][v].equals("blank") && house[3][v].equals("blank")){
house[1][v]="绿色";house[3][v]="咖啡";
break;
}
}
//===============================================================
//6、抽Pall Mall香烟的人养鸟
for(int vi=1;vi<6;vi++){
if(vi>5) continue _v;
while(false){
_vi:
house[4][vi]="blank";house[5][vi]="blank";
vi++;
}
if(house[4][vi].equals("blank") && house[5][vi].equals("blank")){
house[4][vi]="Pall Mall";house[5][vi]="鸟";
break;
}
}
……
……
……
看到有的星星很激动~~
嗬嗬,新手加入,看看大家都讨论什么~~
PS:喜欢C语言~~
如果LZ C++基础还行的话学这些应该不难