最近在回顧大學學的數據結構,這里給大家用java模擬順序表和單鏈表的新增
1順序表新增
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
|
/** * 順序表 * * @author cjd * */ public class ArrayList { private Object[] elementData; // 底層是一個數組,目前還沒有確定長度 private int size; // 不是數組分配了幾個空間,而是元素的個數 public ArrayList() { this ( 4 ); } public ArrayList( int initialCapacity) { elementData = new Object[initialCapacity]; } // 返回線性表的大小,即數據元素的個數。 public int size() { return size; } // 返回線性表中序號為 i 的數據元素@Override public Object get( int i) { return elementData[i]; } // 將數據元素 e 插入到線性表中 i 號位置 public void add( int i, Object e) { // 擴容 elementData = Arrays.copyOf(elementData, elementData.length*2); if (size == elementData.length) { //數組滿了,就擴容 Object[] elementDatanew = new Object[elementData.length * 2 ]; //新創建一個新的數組,長度是舊數組2倍 for ( int j = 0 ; j < elementData.length; j++) { elementDatanew[j] = elementData[j]; //將舊數組的數據拷貝到新數組 } elementData = elementDatanew; //讓elementData指向新數組 } //最后位后移 for ( int j=size;j>i;j--){ elementData[j]=elementData[j- 1 ]; } // 給數組賦值 elementData[i] = e; // 元素個數+1 size++; } // 將數據元素 e 插入到線性表末尾 public void add(Object e) { this .add(size,e); //最后位新增 } public String toString() { if (size == 0 ) { return "[]" ; } StringBuilder stringBuilder = new StringBuilder( "[" ); for ( int i = 0 ; i < size; i++) { if (i == 0 ) stringBuilder.append( "" + elementData[i]); else stringBuilder.append( "," + elementData[i]); } stringBuilder.append( "]" ); return stringBuilder.toString(); } } |
測試mian
1
2
3
4
5
6
7
8
9
10
11
12
13
|
public class test { public static void main(String[] args) { ArrayList list= new ArrayList(); list.add( 1 ); list.add( 2 ); list.add( 3 ); list.add( 4 ); list.add( 5 ); list.add( 6 ); list.add( 3 , 9 ); System.out.println( "實現順序表新增" +list.toString()); } } |
2單鏈表新增
實體類
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
public class Node { Object data; //要存儲的數據 Node next; public Node(Object data, Node next) { super (); this .data = data; } public Node() { super (); } public Object getData() { return data; } public void setData(Object data) { this .data = data; } public Node getNext() { return next; } public void setNext(Node next) { this .next = next; } } |
方法
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
|
/** * 單鏈表表 * * @author cjd * */ public class SingleLinkedList { private Node head = new Node(); //頭結點,不存儲數據,為了編程方便 private int size; //一共有幾個結點 // 表的大小,即數據元素的個數。 public int size() { return size; } // 返回單鏈表中序號為 i 的數據元素 public Object get( int i) { //遍歷結點 Node p=head; //找到前一個結點,從head結點開始 for ( int j= 0 ;j<i;j++){ p=p.next; } return p.data; } // 將數據元素 e 插入到單鏈表中 i 號位置 public void add( int i, Object e) { //遍歷結點 Node p=head; //找到前一個結點,從head結點開始 for ( int j= 0 ;j<i;j++){ p=p.next; //移動指針到下一個結點 } //新創建一個結點 Node newNode = new Node(); newNode.data=e; newNode.next=p.next; p.next=newNode; //指明新結點的直接后繼結點 // 個數+1 size++; } // 將數據元素 e 插入到單鏈表末尾 public void add(Object e) { this .add(size,e); //最后位新增 } public String toString() { if (size == 0 ) { return "[]" ; } Node p=head.next; //找到前一個結點,從head結點開始 StringBuilder stringBuilder= new StringBuilder( "[" ); for ( int i = 0 ; i < size; i++) { if (i == 0 ) stringBuilder.append( "" + p.data); else stringBuilder.append( "," + p.data); //移動指針到下一個結點 p=p.next; } stringBuilder.append( "]" ); return stringBuilder.toString(); } } |
測試類
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
public class test { public static void main(String[] args) { SingleLinkedList singlist= new SingleLinkedList(); singlist.add( 1 ); singlist.add( 2 ); singlist.add( 3 ); singlist.add( 4 ); singlist.add( 5 ); singlist.add( 6 ); singlist.add( 3 , 9 ); System.out.println( "實現單鏈表新增" +singlist.toString()); } } |
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。
原文鏈接:https://www.cnblogs.com/hzcjd/p/12169156.html