当前位置:   article > 正文

Java数据结构:链表_链表 java

链表 java

目录

一、单链表

二、双向链表

一、单链表

(1)链表是以节点的方式存储

(2)每个节点包含date域,next域:指向下一个结点

(3)链表的结点不一定是连续存储

(4)链表分带头结点的的链表和没有带头节点的链表,根据实际需求来确定

使用带头的单

  1. package LinkList;
  2. class HeroNode1 {
  3. private int no;
  4. private String name;
  5. private String nickName;
  6. public HeroNode1 next;//指向下一个节点
  7. public HeroNode1 prior;//指向前一个节点
  8. public HeroNode1(int no, String name, String nickName) {
  9. this.no = no;
  10. this.name = name;
  11. this.nickName = nickName;
  12. }
  13. @Override
  14. public String toString() {
  15. return "HeroNode1{" +
  16. "no=" + no +
  17. ", name='" + name + '\'' +
  18. ", nickName='" + nickName + '\'' +
  19. '}';
  20. }
  21. public int getNo() {
  22. return no;
  23. }
  24. public void setNo(int no) {
  25. this.no = no;
  26. }
  27. public String getName() {
  28. return name;
  29. }
  30. public void setName(String name) {
  31. this.name = name;
  32. }
  33. public String getNickName() {
  34. return nickName;
  35. }
  36. public void setNickName(String nickName) {
  37. this.nickName = nickName;
  38. }
  39. public HeroNode1 getNext() {
  40. return next;
  41. }
  42. public void setNext(HeroNode1 next) {
  43. this.next = next;
  44. }
  45. public HeroNode1 getPrior() {
  46. return prior;
  47. }
  48. public void setPrior(HeroNode1 prior) {
  49. this.prior = prior;
  50. }
  51. }
  52. class DoubleLinkedList{
  53. private HeroNode1 head=new HeroNode1 (0,"","");
  54. public DoubleLinkedList() {
  55. }
  56. //添加
  57. public void add(HeroNode1 hero){
  58. HeroNode1 temp=head;
  59. while(temp.next!=null){
  60. temp=temp.next;
  61. }
  62. temp.next=hero;
  63. hero.prior=temp;
  64. }
  65. //删除
  66. public void delete(int no){
  67. if(head.next==null){
  68. System.out.println ("该链表为空,删除失败!" );
  69. return;
  70. }
  71. HeroNode1 temp=head.next;
  72. while(temp.getNo ()!=no){
  73. temp=temp.next;
  74. }
  75. temp.prior.next=temp.next;
  76. if (temp!=null){
  77. temp.next.prior=temp.prior;
  78. }
  79. }
  80. //修改
  81. public void update(HeroNode1 newHero){
  82. HeroNode1 temp=head;
  83. while(true){
  84. if(temp.next==null){
  85. System.out.println ("未找到要修改的节点" );
  86. return;
  87. }
  88. if(temp.getNo ()==newHero.getNo ()){
  89. break;
  90. }
  91. temp=temp.next;
  92. }
  93. temp.setNo (newHero.getNo ());
  94. temp.setName (newHero.getName ());
  95. temp.setNickName (newHero.getNickName ());
  96. System.out.println ("修改成功!" );
  97. }
  98. //遍历
  99. public void list(){
  100. if(head.next==null){
  101. System.out.println ("此链表为空!" );
  102. return;
  103. }
  104. HeroNode1 temp=head.next;
  105. while(temp!=null){
  106. System.out.println (temp );
  107. temp=temp.next;
  108. }
  109. }
  110. }
  111. public class DoubleLinkedListDemo {
  112. public static void main(String[] args) {
  113. DoubleLinkedList doubleList = new DoubleLinkedList ( );
  114. HeroNode1 hero1 = new HeroNode1 (1, "宋江", "及时雨");
  115. HeroNode1 hero2 = new HeroNode1 (2, "卢俊义", "玉麒麟");
  116. HeroNode1 hero3 = new HeroNode1 (3, "吴用", "智多星");
  117. HeroNode1 hero4 = new HeroNode1 (4, "林冲", "豹子头");
  118. doubleList.add (hero1);
  119. doubleList.add (hero2);
  120. doubleList.add (hero3);
  121. doubleList.add (hero4);
  122. doubleList.list ();
  123. doubleList.delete (2);
  124. HeroNode1 newHero = new HeroNode1 (3, "凌不疑", "081");
  125. doubleList.update (newHero);
  126. doubleList.list ();
  127. }
  128. }

链表实现水浒英雄排行榜管理,要求如下:

(1)完成对英雄人物的增删改查操作

(2)第一种方法在添加英雄时,直接添加到链表的尾部

(3)第二种方式在添加英雄时,根据排名蒋英雄插入到指定位置(如果有这个排名,则添加失败,并给出提示)

示意图:

二、双向链表

双向链表相比单链表存在以下优点:

(1)单链表查找的方向只能是一个方向,而双向链表可以向前或向后进行查找

(2)单链表不能自我删除,需要辅助节点,而双向链表可以进行自我删除

示意图为:

使用双向链表实现水浒英雄排行榜进行增删改查操作:

  1. package LinkList;
  2. class HeroNode1 {
  3. private int no;
  4. private String name;
  5. private String nickName;
  6. public HeroNode1 next;//指向下一个节点
  7. public HeroNode1 prior;//指向前一个节点
  8. public HeroNode1(int no, String name, String nickName) {
  9. this.no = no;
  10. this.name = name;
  11. this.nickName = nickName;
  12. }
  13. @Override
  14. public String toString() {
  15. return "HeroNode1{" +
  16. "no=" + no +
  17. ", name='" + name + '\'' +
  18. ", nickName='" + nickName + '\'' +
  19. '}';
  20. }
  21. public int getNo() {
  22. return no;
  23. }
  24. public void setNo(int no) {
  25. this.no = no;
  26. }
  27. public String getName() {
  28. return name;
  29. }
  30. public void setName(String name) {
  31. this.name = name;
  32. }
  33. public String getNickName() {
  34. return nickName;
  35. }
  36. public void setNickName(String nickName) {
  37. this.nickName = nickName;
  38. }
  39. public HeroNode1 getNext() {
  40. return next;
  41. }
  42. public void setNext(HeroNode1 next) {
  43. this.next = next;
  44. }
  45. public HeroNode1 getPrior() {
  46. return prior;
  47. }
  48. public void setPrior(HeroNode1 prior) {
  49. this.prior = prior;
  50. }
  51. }
  52. class DoubleLinkedList{
  53. private HeroNode1 head=new HeroNode1 (0,"","");
  54. public DoubleLinkedList() {
  55. }
  56. //添加
  57. public void add(HeroNode1 hero){
  58. HeroNode1 temp=head;
  59. while(temp.next!=null){
  60. temp=temp.next;
  61. }
  62. temp.next=hero;
  63. hero.prior=temp;
  64. }
  65. //删除
  66. public void delete(int no){
  67. if(head.next==null){
  68. System.out.println ("该链表为空,删除失败!" );
  69. return;
  70. }
  71. HeroNode1 temp=head.next;
  72. while(temp.getNo ()!=no){
  73. temp=temp.next;
  74. }
  75. temp.prior.next=temp.next;
  76. if (temp!=null){
  77. temp.next.prior=temp.prior;
  78. }
  79. }
  80. //修改
  81. public void update(HeroNode1 newHero){
  82. HeroNode1 temp=head;
  83. while(true){
  84. if(temp.next==null){
  85. System.out.println ("未找到要修改的节点" );
  86. return;
  87. }
  88. if(temp.getNo ()==newHero.getNo ()){
  89. break;
  90. }
  91. temp=temp.next;
  92. }
  93. temp.setNo (newHero.getNo ());
  94. temp.setName (newHero.getName ());
  95. temp.setNickName (newHero.getNickName ());
  96. System.out.println ("修改成功!" );
  97. }
  98. //遍历
  99. public void list(){
  100. if(head.next==null){
  101. System.out.println ("此链表为空!" );
  102. return;
  103. }
  104. HeroNode1 temp=head.next;
  105. while(temp!=null){
  106. System.out.println (temp );
  107. temp=temp.next;
  108. }
  109. }
  110. }
  111. public class DoubleLinkedListDemo {
  112. public static void main(String[] args) {
  113. DoubleLinkedList doubleList = new DoubleLinkedList ( );
  114. HeroNode1 hero1 = new HeroNode1 (1, "宋江", "及时雨");
  115. HeroNode1 hero2 = new HeroNode1 (2, "卢俊义", "玉麒麟");
  116. HeroNode1 hero3 = new HeroNode1 (3, "吴用", "智多星");
  117. HeroNode1 hero4 = new HeroNode1 (4, "林冲", "豹子头");
  118. doubleList.add (hero1);
  119. doubleList.add (hero2);
  120. doubleList.add (hero3);
  121. doubleList.add (hero4);
  122. doubleList.list ();
  123. doubleList.delete (2);
  124. HeroNode1 newHero = new HeroNode1 (3, "凌不疑", "081");
  125. doubleList.update (newHero);
  126. doubleList.list ();
  127. }
  128. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/正经夜光杯/article/detail/823014
推荐阅读
相关标签
  

闽ICP备14008679号