萍聚社区-德国热线-德国实用信息网

 找回密码
 注册

微信登录

微信扫一扫,快速登录

萍聚头条

查看: 598|回复: 0

1-1-4-1-1 如何实现链表等数据结构?

[复制链接]
发表于 2003-2-6 16:47 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册 微信登录

x

  1. 发信人: Compiler (编译器), 信区: Java      
  2. 标  题: Re: 如何实现链表等数据结构?
  3. 发信站: BBS 水木清华站 (Fri Jan 29 22:19:32 1999)

  4. Java中并非没有指针和引用,事实上,Java中的对象全部是由指针("引用")
  5. 在"堆"中进行内存分配的(与C++不同,后者可以在"栈"中直接生成对象,
  6. 但是这种对象不适于进行多态操作).

  7. C++中既有指针,又有引用,指针和引用在实现上有共同点,他们的最大区别
  8. 在于,指针可以进行运算,而引用不行,所以,引用要比指针安全的多.

  9. 在很多Java的书籍中,都会出现"引用"一词.或者说Java有指针,只是
  10. 其指针不能参加运算.这两种说法在本质上是一致的.

  11. 链表等数据结构是必须由指针来完成的,但是在链表的的操作中,涉及的
  12. 是内存的分配和对象的联系,几乎不会,也不提倡使用指针加减法等运算.
  13. 所以,用Java的引用是完全可以实现的.

  14. 我认为,数据结构中指针的加减法运算主要使用鲁棒性来换取速度,
  15. 数据结构是完全可以用引用实现的.至于使用Java天然提供的predefined classes,
  16. 自然更好.

  17. 一点陋见,欢迎指正.

  18. 【 在 lenlon (九天) 的大作中提到: 】
  19. : 在JAVA中由于没有指针和引用,无法实现许多传统的数据结构,
  20. : 如链表、二叉树等,有没有什么变通的办法?

  21. 发信人: Winobject (无忌), 信区: Java      
  22. 标  题: Re: 如何实现链表等数据结构?
  23. 发信站: BBS 水木清华站 (Sun Jan 31 10:01:32 1999)

  24. 【 在 Compiler (编译器) 的大作中提到: 】
  25. : Java中并非没有指针和引用,事实上,Java中的对象全部是由指针("引用")
  26. >>>指针和引用是不一样的,Java 没有指针,但有引用.
  27. >>>可以利用引用来生成链表.
  28. : 在"堆"中进行内存分配的(与C++不同,后者可以在"栈"中直接生成对象,
  29. : 但是这种对象不适于进行多态操作).
  30. : C++中既有指针,又有引用,指针和引用在实现上有共同点,他们的最大区别
  31. : 在于,指针可以进行运算,而引用不行,所以,引用要比指针安全的多.
  32. : 在很多Java的书籍中,都会出现"引用"一词.或者说Java有指针,只是
  33. : 其指针不能参加运算.这两种说法在本质上是一致的.
  34. : 链表等数据结构是必须由指针来完成的,但是在链表的的操作中,涉及的
  35. : 是内存的分配和对象的联系,几乎不会,也不提倡使用指针加减法等运算.
  36. : 所以,用Java的引用是完全可以实现的.
  37. : 我认为,数据结构中指针的加减法运算主要使用鲁棒性来换取速度,
  38. : 数据结构是完全可以用引用实现的.至于使用Java天然提供的predefined classes,
  39. : 自然更好.
  40. : 一点陋见,欢迎指正.


  41. 发信人: proger (大飞), 信区: Java      
  42. 标  题: Re: 如何实现链表等数据结构?
  43. 发信站: BBS 水木清华站 (Sun Jan 31 11:40:56 1999)

  44. 当然,我就做过链表,很简单就可以实现的。用Vector太不爽了。
  45. public class chain
  46. {
  47. chain next;
  48. int content;
  49. ....
  50. }
  51. 就可以了嘛;不过始终不太爽,因为常常会被引用和对象搞糊涂:(

  52. 【 在 Compiler (编译器) 的大作中提到: 】
  53. : Java中并非没有指针和引用,事实上,Java中的对象全部是由指针("引用")
  54. : 在"堆"中进行内存分配的(与C++不同,后者可以在"栈"中直接生成对象,
  55. : 但是这种对象不适于进行多态操作).
  56. : C++中既有指针,又有引用,指针和引用在实现上有共同点,他们的最大区别
  57. : 在于,指针可以进行运算,而引用不行,所以,引用要比指针安全的多.
  58. : 在很多Java的书籍中,都会出现"引用"一词.或者说Java有指针,只是
  59. : 其指针不能参加运算.这两种说法在本质上是一致的.
  60. : 链表等数据结构是必须由指针来完成的,但是在链表的的操作中,涉及的
  61. : 是内存的分配和对象的联系,几乎不会,也不提倡使用指针加减法等运算.
  62. : 所以,用Java的引用是完全可以实现的.
  63. : 我认为,数据结构中指针的加减法运算主要使用鲁棒性来换取速度,
  64. : 数据结构是完全可以用引用实现的.至于使用Java天然提供的predefined classes,
  65. : 自然更好.
  66. : 一点陋见,欢迎指正.

  67. 发信人: Compiler (编译器), 信区: Java      
  68. 标  题: Re: 如何实现链表等数据结构?
  69. 发信站: BBS 水木清华站 (Sun Jan 31 13:36:52 1999)

  70. 在技术实现上,指针和引用并无不同,同是对象的地址
  71. 只不过引用比指针有更强的安全性.
  72. 在很多书籍中(包括Sun)引用和指针的关系已经说明.
  73. 总的来说,引用不是指针,但是引用是不能进行运算的特殊指针.


  74. 【 在 Winobject (无忌) 的大作中提到: 】

  75. 发信人: Compiler (编译器), 信区: Java      
  76. 标  题: Re: 如何实现链表等数据结构?
  77. 发信站: BBS 水木清华站 (Sun Jan 31 13:39:13 1999)

  78. 【 在 proger (大飞) 的大作中提到: 】
  79. : 当然,我就做过链表,很简单就可以实现的。用Vector太不爽了。
  80. : public class chain
  81. : {
  82. :  chain next;
  83. :  int content;
  84. : ....
  85. : }
  86. : 就可以了嘛;不过始终不太爽,因为常常会被引用和对象搞糊涂:(
  87.               ^^^^^^^^^^^^^^^没有什么,其实这里的next和指针完全一样,只是
  88.                              不能进行加一,减一等运算而已.



  89. 发信人: Winobject (无忌), 信区: Java      
  90. 标  题: Re: 如何实现链表等数据结构?
  91. 发信站: BBS 水木清华站 (Sun Jan 31 19:34:15 1999)

  92. 【 在 Compiler (编译器) 的大作中提到: 】
  93. : 在技术实现上,指针和引用并无不同,同是对象的地址
  94. >>>>>指针是对象的地址的地址,即它指向对象的地址,
  95. >>>>>引用是对象的地址,即它指向对象本身!
  96. : 只不过引用比指针有更强的安全性.
  97. : 在很多书籍中(包括Sun)引用和指针的关系已经说明.
  98. : 总的来说,引用不是指针,但是引用是不能进行运算的特殊指针.


  99. 发信人: Compiler (编译器), 信区: Java      
  100. 标  题: Re: 如何实现链表等数据结构?
  101. 发信站: BBS 水木清华站 (Sun Jan 31 20:54:51 1999)

  102. 【 在 Winobject (无忌) 的大作中提到: 】
  103. 【 在 Compiler (编译器) 的大作中提到: 】
  104. : 在技术实现上,指针和引用并无不同,同是对象的地址
  105. >>>>>指针是对象的地址的地址,即它指向对象的地址,
  106. >>>>>引用是对象的地址,即它指向对象本身!
  107.      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^这只是理解问题,在技术上,引用变量
  108.                                       和指针变量中存储的都是对象的首地址.
  109.                                       区别是编译器对他们的保护程度.
  110. : 只不过引用比指针有更强的安全性.
  111. : 在很多书籍中(包括Sun)引用和指针的关系已经说明.
  112. : 总的来说,引用不是指针,但是引用是不能进行运算的特殊指针.

  113. 发信人: Winobject (无忌), 信区: Java      
  114. 标  题: Re: 如何实现链表等数据结构?
  115. 发信站: BBS 水木清华站 (Mon Feb  1 09:51:52 1999)

  116. 【 在 Compiler (编译器) 的大作中提到: 】
  117. :      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^这只是理解问题,在技术上,引用变量
  118. :                                       和指针变量中存储的都是对象的首地址.
  119. :                                       区别是编译器对他们的保护程度.
  120. 否,按你的说法,对象的名与指向该对象的指针将没有区别!
  121. 举个例子:
  122.   对象A,对象的引用A_ref,指向该对象的指针A_point,首先,
  123. 它们实际上均是符号地址,假设对象A在内存中的首地址为B243:1000;
  124. 则A为B243:1000,A_ref也为B243:1000,而A_point则可以为一
  125. 随意地址,假设为B243:1200;只要该地址中的内容为B243:1000.
  126. 所以 ,引用是直接的指向对象,相当于对象的别名,指针是间接的
  127. 指向对象.


  128. 发信人: Compiler (编译器), 信区: Java      
  129. 标  题: Re: 如何实现链表等数据结构?
  130. 发信站: BBS 水木清华站 (Mon Feb  1 10:17:54 1999)

  131. 【 在 Winobject (无忌) 的大作中提到: 】
  132. 【 在 Compiler (编译器) 的大作中提到: 】
  133. :      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^这只是理解问题,在技术上,引用变量
  134. :                                       和指针变量中存储的都是对象的首地址.
  135. :                                       区别是编译器对他们的保护程度.
  136. >否,按你的说法,对象的名与指向该对象的指针将没有区别!
  137. >举个例子:
  138. >  对象A,对象的引用A_ref,指向该对象的指针A_point,首先,
  139. >它们实际上均是符号地址,假设对象A在内存中的首地址为B243:1000;
  140. >则A为B243:1000,A_ref也为B243:1000,而A_point则可以为一
  141. >随意地址,假设为B243:1200;只要该地址中的内容为B243:1000.
  142. >所以 ,引用是直接的指向对象,相当于对象的别名,指针是间接的
  143. >指向对象.

  144. 在32位系统中,A_ref和A_point同为32位的变量.他们的地址都是任意的.只要其
  145. 内容是B234:1000即可.A_point是一个独立的变量,它的地址同A_ref一样是编译
  146. 器分配的,并不与其指向的内容相同.

  147. 发信人: proger (大飞), 信区: Java      
  148. 标  题: Re: 如何实现链表等数据结构?
  149. 发信站: BBS 水木清华站 (Tue Feb  2 21:02:06 1999)

  150. 如果在java中有:
  151.   MyClass mc;
  152. 那么mc的内容就是MyClass的地址。
  153.   从mc=new MyClass();可以知道它就是一个指针。只是在用mc.MyValue1时,
  154. 解释器自动理解为指针指向的内容罢了。初用java时被她这个特性搞糊涂过。

  155. 【 在 Compiler (编译器) 的大作中提到: 】
  156. : 在32位系统中,A_ref和A_point同为32位的变量.他们的地址都是任意的.只要其
  157. : 内容是B234:1000即可.A_point是一个独立的变量,它的地址同A_ref一样是编译
  158. : 器分配的,并不与其指向的内容相同.


  159. 发信人: qinsj (qinsj), 信区: Java      
  160. 标  题: Re: 如何实现链表等数据结构?
  161. 发信站: BBS 水木清华站 (Thu Feb  4 20:21:34 1999)

  162. 【 在 Compiler (编译器) 的大作中提到:  
  163. JAVA 是可以实现链表的,如:

  164. public class Node{

  165.         int data;
  166.         
  167.         Node prvNode;
  168.         Node nextNode;

  169.         public Node(int data){

  170.                 this.data = data;
  171.                 prvNode = null;
  172.                 nextNode = null;
  173.         }

  174. }

  175. ...

  176. public class NodeList{

  177.         protected Node node;
  178.         public void list(){
  179.                 if(node == null)return;
  180.                 for(Node n = node; n != null; n = n.nextNode){
  181.                         System.out.println("data = "+n.data);
  182.                 }
  183.         }
  184.        public void addNode(Node n){
  185.                 if(node = null)
  186.                     node = n;
  187.                 else{
  188.                    node.prvNode = n;
  189.                    node = n;
  190.                 }
  191.         }
  192.         public void deleteNode(Node n){
  193.                 if(Node nod = node,prv = null;nod != null;
  194.                                         prv = nod,nod = nod.nextNOde){
  195.                         if(node.equals(n)){
  196.                                 if(prv != null){
  197.                                         prv.nextNode = nod.nextNode;
  198.                                 }else{
  199.                                         node = nod.nextNode;
  200.                                 }
  201.                                 break;
  202.                         }
  203.                 }
  204.         }

  205. }


  206. 望适当修改.


  207. 发信人: Compiler (编译器), 信区: Java      
  208. 标  题: Re: 如何实现链表等数据结构?
  209. 发信站: BBS 水木清华站 (Thu Feb  4 21:22:28 1999)

  210. 正是,推荐电子工业出版社的<<Java算法>>,Scott Robert Ladd著



复制代码
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
您需要登录后才可以回帖 登录 | 注册 微信登录

本版积分规则

手机版|Archiver|AGB|Impressum|Datenschutzerklärung|萍聚社区-德国热线-德国实用信息网 |网站地图

GMT+2, 2024-5-22 00:50 , Processed in 0.053810 second(s), 18 queries , MemCached On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表