Java数据结构的实现
2021-07-12 04:05
标签:ddl builder tac copy als illegal code remove obj 1.基于数组的链表 2.双向链表 3.双向队列 4.堆 Java数据结构的实现 标签:ddl builder tac copy als illegal code remove obj 原文地址:https://www.cnblogs.com/AmosWong/p/9549573.html 1 package array;
2
3 import java.util.Arrays;
4
5 /**
6 * 基于数组的链表
7 *
8 * @author 王彪
9 *
10 */
11 public class MyArrayList {
12 private static Object[] elements = null;
13 private static int size = 0;
14 private static final int DEFUAT_INITIAL_CAPACITY = 10;
15
16 public MyArrayList() {
17 this(10);
18 }
19
20 public MyArrayList(int initialCapacity) {
21 if (initialCapacity ) {
22 throw new IllegalArgumentException("输入容量有误");
23 }
24 elements = new Object[initialCapacity];
25 }
26
27 //初始化数组
28 // 保存新元素
29 public void add(Object ele) {
30 // 数组的扩容问题
31 if (size == elements.length) {
32 Object[] temp = Arrays.copyOf(elements, elements.length * 2);
33 elements = temp;
34 }
35 elements[size] = ele;
36 size++;
37 }
38
39 public Object get(int index) {
40 if (index = size) {
41 throw new IllegalArgumentException("输入索引有误");
42 }
43 return elements[index];
44 }
45
46 public void set(int index, Object newPlayerNum) {
47 if (index = size) {
48 throw new IllegalArgumentException("输入索引有误");
49 }
50 elements[index] = newPlayerNum;
51 }
52
53 public void remove(int index) {
54 if (index = size) {
55 throw new IllegalArgumentException("输入索引有误");
56 }
57 for (int i = index; i ) {
58 elements[i] = elements[i + 1];
59 }
60 elements[size - 1] = null;
61 size--;
62 }
63
64 public String toString() {
65 if (elements == null) {
66 return null;
67 }
68 if (size == 0) {
69 return "[]";
70 }
71 StringBuilder sb = new StringBuilder(size * 3 + 1);
72 sb.append("[");
73 for (int i = 0; i ) {
74 sb.append(elements[i]);
75 if (i ) {
76 sb.append(",");
77 }
78 if (i == size - 1) {
79 sb.append("]");
80 }
81 }
82 return sb.toString();
83 }
84
85 public int size() {
86 return size;
87 }
88
89 public boolean isEmpty() {
90 return size == 0;
91 }
92
93 public void clear() {
94 this.elements = new Object[DEFUAT_INITIAL_CAPACITY];
95 size = 0;
96 }
97
98 }
1 package linked;
2
3 public class MyLinkedArrayList {
4 protected Node first;
5 protected Node last;
6 protected int size;
7
8 public void addFirst(Object ele) {// 在头部增加
9 Node node = new Node(ele);
10 if (size == 0) {
11 this.first = node;
12 this.last = node;
13 } else {
14 node.next = this.first;
15 this.first.prev = node;
16 this.first = node;
17 }
18 size++;
19 }
20
21 public void addLast(Object ele) {// 在尾部增加
22 Node node = new Node(ele);
23 if (size == 0) {
24 this.first = node;
25 this.last = node;
26 } else {
27 this.last.next = node;
28 node.prev = this.last;
29 this.last = node;
30 }
31 size++;
32 }
33
34 public void remove(Object ele) {
35 Node current = this.first;
36 for (int i = 0; i ) {
37 if (!current.ele.equals(ele)) {
38 if (current.next == null) {
39 return;
40 }
41 current = current.next;
42 }
43 }
44 if (current == this.first) {
45 this.first = current.next;
46 this.first.prev = null;
47 } else if (current == this.last) {
48 this.last = current.prev;
49 this.last.next = null;
50 } else {
51 current.prev.next = current.next;
52 current.next.prev = current.prev;
53 }
54 size--;
55 }
56
57 @Override
58 public String toString() {
59 if (size == 0) {
60 return "[]";
61 } else {
62 StringBuilder sb = new StringBuilder(size * 3 + 1);
63 Node current = this.first;// 第一个节点
64 sb.append("[");
65 for (int i = 0; i ) {
66 sb.append(current.ele);
67 if (i != size - 1) {
68 sb.append(",");
69 } else {
70 sb.append("]");
71 }
72 current = current.next;
73 }
74 return sb.toString();
75 }
76 }
77
78 public class Node {
79 public Node(Object ele) {
80 this.ele = ele;
81 }
82
83 Node prev;
84 Node next;
85 public Object ele;
86 }
87 }
1 package deque;
2
3 import linked.MyLinkedArrayList;
4
5 public class MyDeque extends MyLinkedArrayList {
6 public Object getFirst() {
7 return this.first.ele;
8 }
9
10 public Object getLast() {
11 return this.last.ele;
12 }
13
14 public void removeFirst(Object ele) {
15 super.remove(this.first);
16 }
17
18 public void removeLast(Object ele) {
19 super.remove(this.last);
20 }
21
22 public void addFirst(Object ele) {
23 super.addFirst(ele);
24 }
25
26 public void addLast(Object ele) {
27 super.addLast(ele);
28 }
29
30 }
1 package stack;
2
3 import array.MyArrayList;
4
5 //栈
6 public class MyStack extends MyArrayList {
7 // 入栈
8 public void push(Object ele) {
9 super.add(ele);
10 }
11
12 // 删除栈顶元素
13 public void pop() {
14 int index = super.size() - 1;
15 super.remove(index);
16 }
17
18 // 查询栈顶元素
19 public Object peek() {
20 int index = super.size() - 1;
21 return super.get(index);
22 }
23
24 }