`
bcyy
  • 浏览: 1885625 次
文章分类
社区版块
存档分类
最新评论

Java模拟单向链表和双向链表的实现

 
阅读更多

下面演示的Java模拟的单向链表的实现

  1. packagecom.jadyer.sort;
  2. /**
  3. *模拟单向链表
  4. *@author hope
  5. *@editorJan23,20127:55:21PM
  6. *@see==================================================================================================
  7. *@see【数据结构的分类:线性数据结构和非线性数据结构】
  8. *@see1)线性数据结构,包含:线性表、栈、队列、串、数组、文件
  9. *@see2)非线性数据结构,含:树、图
  10. *@see==================================================================================================
  11. *@see【线性表的概述:其数据元素呈线性关系】
  12. *@see1)线性表中的所有数据元素在同一个线性表中必须是相同的数据类型
  13. *@see2)线性表中必存在唯一的称为"第一个"的数据元素,必存在唯一的称为"最后一个"的数据元素
  14. *@see3)线性表中除第一个元素外,每个元素都有且只有一个前驱元素。除最后一个元素外,每个元素都有且只有一个后继元素
  15. *@see4)线性表的逻辑结构是n个数据元素的有限序列(a1,a2,a3,...,an),其中n为线性表的长度(n>=0),n=0的表称为空表
  16. *@see==================================================================================================
  17. *@see【线性表的分类:按其存储结构可分为顺序表和链表】
  18. *@see1)顺序表:用顺序存储结构存储的线性表称为顺序表。即内存地址中的元素是按照循序连续存放的
  19. *@see也可以说,将线性表中的数据元素依次存放在某个存储区域中,所形成的表称为顺序表
  20. *@see一维数组就是用顺序方式存储的线性表,所以ArrayList可以看作是一种顺序表
  21. *@see2)链表:用链式存储结构存储的线性表称为链表。即内存地址中的元素不是连续存放的
  22. *@see==================================================================================================
  23. *@see【stack】
  24. *@see栈(stack)也是一种特殊的线性表,是限定仅在表尾进行插入和删除运算的线性表
  25. *@see栈的物理存储可以用顺序存储结构,也可以用链式存储结构
  26. *@see栈是一种后进先出(LIFO)的结构,栈的表尾称为栈顶(top),栈的表头称为栈底(bottom)
  27. *@see==================================================================================================
  28. *@see【Queue】
  29. *@see队列(Queue)是限定所有的插入只能在表的一端进行,而所有的删除都在表的另一端进行的线性表
  30. *@see队列的物理存储可以用顺序存储结构,也可以用链式存储结构
  31. *@see队列是一种先进先出(FIFO)的结构,其中允许插入的一端称为队尾(Rear),允许删除的一端称为队头(Front)(有点像等公交车)
  32. *@see==================================================================================================
  33. */
  34. classNodeOneWay{
  35. Stringdata;//存放节点数据本身
  36. NodeOneWaynext;//存放指向后一个节点的引用
  37. publicNodeOneWay(){}
  38. publicNodeOneWay(Stringdata){
  39. this.data=data;
  40. }
  41. }
  42. /**
  43. *单向链表测试类
  44. *@author宏宇
  45. *@editorJan23,20127:56:51PM
  46. */
  47. publicclassNodeOneWayTest{
  48. publicstaticvoidmain(String[]args){
  49. NodeOneWaynode11=newNodeOneWay("node11_data");
  50. NodeOneWaynode22=newNodeOneWay("node22_data");
  51. NodeOneWaynode33=newNodeOneWay("node33_data");
  52. node11.next=node22;//生成后继关系
  53. node22.next=node33;
  54. System.out.println(node11.next.next.data);//通过node11获得node33的data属性值
  55. /**
  56. *生成node44对象,并将其插入到node11和node22中间
  57. */
  58. NodeOneWaynode44=newNodeOneWay("node44_data");
  59. node11.next=node44;//修改node11的后继关系指向node44
  60. node44.next=node22;//修改node44的后继关系指向node22
  61. System.out.println(node11.next.next.next.data);//通过node11获得node33的data属性值
  62. System.out.println(node11.next.next.data);//通过node11获得node22的data属性值
  63. /**
  64. *删除node44对象
  65. */
  66. node11.next=node22;//即node11的后继关系指向node22,node44的后继关系不再指向node22
  67. node44.next=null;
  68. System.out.println(node11.next.next.data);//通过node11获得node33的data属性值
  69. }
  70. }
下面演示的是Java模拟双向链表的实现
  1. packagecom.jadyer.sort;
  2. /**
  3. *模拟双向循环链表
  4. *@author hope
  5. *@editorJan23,20128:16:34PM
  6. *@seejava.util.ArrayList类的底层,是用数组实现的
  7. *@seejava.util.LinkedList类的底层,就是用双向循环链表实现的
  8. *@see双向链表内的每个对象除了数据本身外,还有两个引用,分别指向前一个元素和后一个元素
  9. *@see故add/remove操作时,LinkedList性能好一些,而get操作时,ArrayList性能好一些
  10. */
  11. classNodeTwoWay{
  12. NodeTwoWayprevious;//存放指向前一个节点的引用
  13. Stringdata;//存放节点数据本身
  14. NodeTwoWaynext;//存放指向后一个节点的引用
  15. publicNodeTwoWay(){}
  16. publicNodeTwoWay(Stringdata){
  17. this.data=data;
  18. }
  19. }
  20. /**
  21. *双向循环链表测试类
  22. *@author宏宇
  23. *@editorJan23,20128:21:33PM
  24. */
  25. publicclassNodeTwoWayTest{
  26. publicstaticvoidmain(String[]args){
  27. NodeTwoWaynode11=newNodeTwoWay("node11_data");
  28. NodeTwoWaynode22=newNodeTwoWay("node22_data");
  29. NodeTwoWaynode33=newNodeTwoWay("node33_data");
  30. node11.previous=node33;//生成前驱和后继关系
  31. node11.next=node22;
  32. node22.previous=node11;
  33. node22.next=node33;
  34. node33.previous=node22;
  35. node33.next=node11;
  36. /**
  37. *生成node44对象,并将其插入到node11和node22中间
  38. */
  39. NodeTwoWaynode44=newNodeTwoWay("node44_data");
  40. node44.previous=node11;
  41. node44.next=node22;
  42. node11.next=node44;
  43. node22.previous=node44;
  44. /**
  45. *删除node44对象
  46. */
  47. node44.previous=null;
  48. node44.next=null;
  49. node11.next=node22;
  50. node22.previous=node11;
  51. }
  52. }

分享到:
评论

相关推荐

    面向对象实现带头双向链表.zip

    双向链表与单向链表不同,它在每个节点中存储了两个指针,分别指向其前一个节点和后一个节点。这使得我们可以从链表的任一方向遍历元素,增加或删除节点时也更加灵活。 `DoubleList.c`文件通常包含链表操作的实现,...

    城市链表课程设计

    相邻城市可以通过双向链表或单向链表来表示,前者可以方便地进行前后查找,后者则更适合单向路径的搜索。 2. 操作设计:提供添加城市、删除城市、连接城市、查询城市关系等基本操作。例如,添加新城市时,需要创建新...

    数据结构代码 栈 链表 队列

    链表分为单向链表、双向链表和循环链表等类型。链表的主要操作有插入、删除和遍历。链表在处理动态数据集合时特别有用,因为它们不需要预先确定大小,且插入和删除操作通常比数组快。 然后是队列(Queue),它是...

    链表树-复合数据结构应用实例.zip

    链表有多种类型,如单向链表、双向链表和循环链表。在C/C++中,链表可以通过结构体和指针来实现;在Java中,可以使用LinkedList类;在Python中,可以使用内置的list或自定义类来模拟链表。学习链表的关键在于理解其...

    常见数据结构的实现

    链表可以分为单向链表和双向链表,其中双向链表允许向前和向后遍历。 循环链表是链表的一种变体,最后一个节点的指针指向链表的开头,形成一个环状结构。这使得遍历链表更加方便,例如实现无限循环的效果。 栈是一...

    java 数据结构和算法

    链表有单向链表、双向链表和循环链表等变种。 栈是一种特殊的线性表,遵循后进先出(LIFO)原则,即最后被插入的元素最先被取出。栈有入栈(push)和出栈(pop)操作,常用于实现函数调用栈、表达式求值、括号匹配...

    java数据结构.rar

    其次,链表是另一种常见数据结构,包括单向链表和双向链表。链表中的元素在内存中不是连续存放的,每个元素(节点)包含数据和指向下一个元素的引用。链表在插入和删除操作上通常比数组更高效,但随机访问性能较差。...

    数据结构例题源代码(Java)

    链表分为单向链表、双向链表和循环链表等类型。与数组不同,链表的元素在内存中不一定连续,这使得插入和删除操作更为灵活。 3. **栈**:栈是一种后进先出(LIFO)的数据结构,常用于实现函数调用、表达式求值等。...

    数据结构与算法.pdf

    链表分为单向链表和双向链表,其中双向链表可以支持双向遍历。 2. 树:树是一种非线性数据结构,模拟了自然界中的树状结构。二叉树是最简单的形式,每个节点最多有两个子节点。Java中的`TreeSet`和`TreeMap`利用...

    JAVA数据结构

    链表分为单向链表和双向链表,其中双向链表允许前后两个方向的遍历。链表的主要优点是插入和删除操作高效,但访问元素的速度慢于数组。 3. **栈**:栈是一种后进先出(LIFO)的数据结构,常用于表达式求值、函数...

    Java数据结构和算法中文第二版源码

    链表分为单向链表、双向链表和循环链表,各有优缺点。 - **栈和队列**:栈是后进先出(LIFO)的数据结构,常用于函数调用、表达式求值等;队列则是先进先出(FIFO)的结构,适用于任务调度、缓冲区管理等。 - **树**...

    java数据结构和算法解析

    链表分为单向链表、双向链表和循环链表。相比于数组,链表在插入和删除操作上具有优势。 3. **栈和队列**:栈是一种后进先出(LIFO)的数据结构,常用于表达式求值、函数调用等。队列是一种先进先出(FIFO)的数据...

    常用的一些数据结构Flsh动画模拟演示

    链表分为单向链表和双向链表,后者可以双向遍历。链表在插入和删除操作上优于数组,但在随机访问上较慢。 3. **栈**:栈是一种后进先出(LIFO)的数据结构,类似于一叠盘子。主要操作有压栈(入栈)、弹栈(出栈)...

    java linkedlist

    Java中的LinkedList是一个实现双向链表的数据结构,它继承自AbstractList接口,并实现了List、Deque以及Cloneable和Serializable接口。LinkedList通常用于需要频繁插入和删除元素的场景,因为这些操作在链表中的时间...

    java双连表

    在Java编程中,双连表(也称为双向链表)是一种数据结构,它允许在列表中的元素之间进行双向连接。...这些知识点是Java数据结构和算法学习中的重要组成部分,对于理解和实现复杂的算法有着至关重要的作用。

    约瑟夫-古罗马杀人游戏-数据结构

    链表可以分为单向链表、双向链表和循环链表等类型。在这个问题中,我们将使用循环链表,因为它更符合“围成一圈”的场景。 解决约瑟夫问题的关键在于模拟“每隔n个人淘汰一人”的过程。我们可以创建一个表示战俘的...

    数据结构(java)各种源码

    链表分为单向链表、双向链表和循环链表,其优点在于插入和删除操作快速,但访问速度较慢,因为需要遍历。 3. **栈**:栈是一种后进先出(LIFO)的数据结构,主要用于实现函数调用、表达式求值等。Java中的`java....

    高级开发人员面试宝典之假如你是面试官.docx

    * 单向链表和双向链表的完型填空 * 序列化和反序列化的具体用法 * HashCode Equals 的原理和算法 2. JAVA 垃圾回收机制 3. 设计模式 * 迭代器模式(Iterator) * 享元模式(Flyweight) 二、多线程 1. 多线程...

Global site tag (gtag.js) - Google Analytics