ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

基本数据结构的简单实现

2022-09-12 15:03:31  阅读:272  来源: 互联网

标签:基本 node index int next 简单 数据结构 data Node


基本数据结构的简单实现

顺序表

 1 /**
 2  * 顺序表
 3  */
 4 @SuppressWarnings("all")
 5 public class SequenceList<T> {
 6     private final Object[] data;
 7     
 8     public SequenceList(int length) {
 9         this.data = new Object[length];
10     }
11     
12     public int length() {
13         return data.length;
14     }
15     
16     public T get(int index) {
17         return (T) data[index];
18     }
19     
20     public void set(int index, T data) {
21         this.data[index] = data;
22     }
23     
24     public void delete(int index) {
25         this.data[index] = null;
26     }
27     
28     public int find(T item) {
29         for (int i = 0; i < data.length; i++) {
30             if (data[i].equals(item)) {
31                 return i;
32             }
33         }
34         return -1;
35     }
36     
37     public void print() {
38         System.out.print("[");
39         System.out.print(data[0]);
40         for (int i = 1; i < data.length; i++) {
41             if (data[i] == null) {
42                 System.out.print(", _");
43             } else {
44                 System.out.print(", " + data[i]);
45             }
46         }
47         System.out.print("]\n");
48     }
49 }

单向链表

 1 /**
 2  * 单向链表
 3  */
 4 @SuppressWarnings("all")
 5 public class SinglyLinkedList<T> {
 6     private Node<T> head;
 7     private int length;
 8     
 9     public SinglyLinkedList() {
10     }
11     
12     public int length() {
13         return length;
14     }
15     
16     public T get(int index) {
17         Node<T> node = head;
18         for (int i = 0; i < index; i++) {
19             node = node.next;
20         }
21         return node.data;
22     }
23     
24     public void set(int index, T data) {
25         Node<T> node = head;
26         for (int i = 0; i < index; i++) {
27             node = node.next;
28         }
29         node.data = data;
30     }
31     
32     public void insert(int index, T data) {
33         if (index == 0) {
34             if (length == 0) {
35                 this.head = new Node<>(null, data);
36             } else {
37                 this.head = new Node<>(this.head, data);
38             }
39         } else {
40             Node<T> p = head; // 插入节点的前驱
41             for (int i = 1; i < index; i++) {
42                 p = p.next;
43             }
44             if (index == length) {
45                 p.next = new Node<>(null, data);
46             } else {
47                 p.next = new Node<>(p.next, data);
48             }
49         }
50         this.length++;
51     }
52     
53     public void delete(int index) {
54         if (index == 0) {
55             head = head.next;
56         } else {
57             Node<T> p = head; // 删除节点的前驱
58             for (int i = 1; i < index; i++) {
59                 p = p.next;
60             }
61             p.next = p.next.next;
62         }
63         this.length--;
64     }
65     
66     public int find(T data) {
67         Node<T> node = head;
68         int index = 0;
69         while (node != null) {
70             if (node.data.equals(data)) {
71                 return index;
72             }
73             index++;
74             node = node.next;
75         }
76         return -1;
77     }
78     
79     public void print() {
80         Node<T> p = head;
81         while (p != null) {
82             System.out.print(p.data + " => ");
83             p = p.next;
84         }
85         System.out.print("null\n");
86     }
87     
88     private static class Node<T> {
89         Node<T> next;
90         T data;
91         
92         Node(Node<T> next, T data) {
93             this.next = next;
94             this.data = data;
95         }
96     }
97 }

双向链表

  1 /**
  2  * 双向链表
  3  */
  4 @SuppressWarnings("all")
  5 public class DoubleLinkedLis<T> {
  6     private Node<T> head;
  7     private int length;
  8     
  9     public DoubleLinkedLis() {
 10     }
 11     
 12     public int length() {
 13         return length;
 14     }
 15     
 16     public T get(int index) {
 17         Node<T> node = head;
 18         for (int i = 0; i < index; i++) {
 19             node = node.next;
 20         }
 21         return node.data;
 22     }
 23     
 24     public void set(int index, T data) {
 25         Node<T> node = head;
 26         for (int i = 0; i < index; i++) {
 27             node = node.next;
 28         }
 29         node.data = data;
 30     }
 31     
 32     public void insert(int index, T data) {
 33         if (index == 0) {
 34             if (length == 0) {
 35                 this.head = new Node(null, null, data);
 36             } else {
 37                 this.head = new Node(null, this.head, data);
 38             }
 39         } else {
 40             Node<T> p = head; // 插入节点的前驱
 41             for (int i = 1; i < index; i++) {
 42                 p = p.next;
 43             }
 44             if (index == length) {
 45                 p.next = new Node<>(p, null, data);
 46             } else {
 47                 Node<T> node = new Node<>(p, p.next, data);
 48                 node.next.prev = node;
 49                 node.prev.next = node;
 50             }
 51         }
 52         this.length++;
 53     }
 54     
 55     public void delete(int index) {
 56         if (index == 0) {
 57             head = head.next;
 58             head.prev = null;
 59         } else {
 60             Node<T> p = head; // 删除节点的前驱
 61             for (int i = 1; i < index; i++) {
 62                 p = p.next;
 63             }
 64             p.next = p.next.next;
 65             if (p.next != null) {
 66                 p.next.prev = p;
 67             }
 68         }
 69         this.length--;
 70     }
 71     
 72     public int find(T data) {
 73         Node<T> node = head;
 74         int index = 0;
 75         while (node != null) {
 76             if (node.data.equals(data)) {
 77                 return index;
 78             }
 79             index++;
 80             node = node.next;
 81         }
 82         return -1;
 83     }
 84     
 85     public T prev(T data) {
 86         Node<T> node = head;
 87         while (node != null) {
 88             if (node.data.equals(data)) {
 89                 if (node.prev == null) {
 90                     return null;
 91                 } else {
 92                     return node.prev.data;
 93                 }
 94             }
 95             node = node.next;
 96         }
 97         return null;
 98     }
 99     
100     public T next(T data) {
101         Node<T> node = head;
102         while (node != null) {
103             if (node.data.equals(data)) {
104                 if (node.next == null) {
105                     return null;
106                 } else {
107                     return node.next.data;
108                 }
109             }
110             node = node.next;
111         }
112         return null;
113     }
114     
115     public void print() {
116         Node<T> p = head;
117         System.out.print("null <=> ");
118         while (p != null) {
119             System.out.print(p.data + " <=> ");
120             p = p.next;
121         }
122         System.out.print("null\n");
123     }
124     
125     private static class Node<T> {
126         Node<T> prev;
127         Node<T> next;
128         T data;
129         
130         Node(Node<T> prev, Node<T> next, T data) {
131             this.prev = prev;
132             this.next = next;
133             this.data = data;
134         }
135     }
136 }

 

标签:基本,node,index,int,next,简单,数据结构,data,Node
来源: https://www.cnblogs.com/kkelin/p/16686200.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有