forked from yangyiRunning/DataStructureAlgorithmsJava
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathLinkCreate.java
More file actions
127 lines (111 loc) · 3.51 KB
/
LinkCreate.java
File metadata and controls
127 lines (111 loc) · 3.51 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
package ds;
/**
* 线性表的创建(基于链式存储的物理结构)头插法和尾插法
*
* @author yangyi 2018年05月06日15:07:45
*/
public class LinkCreate {
/**
* 这是节点
*/
static class Node {
public Object object;
public Node next;
}
/**
* 这是线性表
*/
static class LinkTable {
public Node node;
/**
* 创建一个带头结点的链表
*/
public LinkTable() {
node = new Node();
node.object = "我是一个头结点";
node.next = null;
}
}
/**
* 头插法插入数据元素
*
* @param data 即将被插的线性表
* @param objects 插入的一排数据
* @return
*/
public LinkTable headCreate(LinkTable data, Object[] objects) {
Node p = data.node;
for (int i = 0; i < objects.length; i++) {
Node node = new Node();
node.object = objects[i];
node.next = p.next;
p.next = node;
}
//返回加入新节点的线性表
return data;
}
/**
* 尾插法插入数据元素
*
* @param data 即将被插的线性表
* @param objects 插入的一排数据
* @return
*/
private LinkTable tailCreate(LinkTable data, Object[] objects) {
//p指向线性表的头节点
Node p = data.node;
for (int i = 0; i < objects.length; i++) {
Node node = new Node();
node.object = objects[i];
p.next = node;
p = node;
}
p.next = null;
//被插完后返回
return data;
}
/**
* 整表清空
*
* @param data 要清空的线性表
* @return
*/
private LinkTable clearLink(LinkTable data) {
for (Node p = data.node; p != null; p = p.next) {
Node q = p.next;
//释放p
p.object = null;
p.next = null;
//这个干掉了再接着去干下一个
p = q;
}
return data;
}
public static void main(String[] args) {
LinkCreate linkCreate = new LinkCreate();
System.out.println("头插法插入数据后打印出来看看:");
LinkTable linkTable = new LinkTable();
LinkTable linkTable2 = linkCreate.headCreate(linkTable, new String[]{"我", "上", "楼", "复", "习"});
for (Node node = linkTable2.node.next; node != null; node = node.next) {
System.out.println(node.object);
}
System.out.println();
System.out.println("尾插法插入数据后打印出来看看:");
LinkTable linkTableTail = new LinkTable();
LinkTable linkTableTail2 = linkCreate.tailCreate(linkTableTail, new String[]{"我", "上", "楼", "复", "习"});
for (Node node = linkTableTail2.node.next; node != null; node = node.next) {
System.out.println(node.object);
}
System.out.println();
System.out.println("清除头插法构造的线性表将其输出:");
linkCreate.clearLink(linkTable2);
for (Node node = linkTable2.node.next; node != null; node = node.next) {
System.out.println(node.object);
}
System.out.println("清除尾插法构造的线性表将其输出:");
linkCreate.clearLink(linkTableTail2);
for (Node node = linkTableTail2.node.next; node != null; node = node.next) {
System.out.println(node.object);
}
}
}