Skip to content

Commit c27c036

Browse files
committed
implementation of basic data structures
1 parent d4a25d6 commit c27c036

File tree

7 files changed

+282
-0
lines changed

7 files changed

+282
-0
lines changed
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
package com.github.fei9009.coding2017.basic;
2+
3+
public class ArrayList implements List {
4+
5+
private int size = 0;
6+
private int capacity;
7+
8+
private Object[] elementData = new Object[100];
9+
10+
public ArrayList() {
11+
this.capacity = 20;
12+
}
13+
14+
private void extend() {
15+
Object[] updatedElementData = new Object[this.elementData.length + this.capacity];
16+
System.arraycopy(this.elementData, 0, updatedElementData, 0, this.elementData.length);
17+
this.elementData = updatedElementData;
18+
}
19+
20+
public void add(Object o){
21+
if (this.size == elementData.length) {
22+
extend();
23+
}
24+
elementData[size] = o;
25+
this.size++;
26+
}
27+
28+
public void add(int index, Object o){
29+
if (this.size == elementData.length) {
30+
extend();
31+
}
32+
int i;
33+
for (i = this.size - 1; i >= index; i--) {
34+
this.elementData[i + 1] = this.elementData[i];
35+
}
36+
this.elementData[i + 1] = o;
37+
this.size++;
38+
}
39+
40+
public Object get(int index){
41+
if (index >= 0 && index < this.size) {
42+
return this.elementData[index];
43+
}else {
44+
return null;
45+
}
46+
}
47+
48+
public Object remove(int index){
49+
if (index >= 0 && index < this.size) {
50+
int i = 0;
51+
Object deletedElement = this.elementData[index];
52+
for (i = index + 1; i < this.size; i++) {
53+
this.elementData[i - 1] = this.elementData[i];
54+
}
55+
this.elementData[i] = null;
56+
this.size--;
57+
return deletedElement;
58+
}else {
59+
return null;
60+
}
61+
}
62+
63+
public int size(){
64+
return this.size;
65+
}
66+
67+
public Iterator iterator(){
68+
return null;
69+
}
70+
71+
}
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
package com.github.fei9009.coding2017.basic;
2+
3+
public class BinaryTreeNode <Object extends Comparable<Object>> {
4+
5+
private Object data;
6+
private BinaryTreeNode left;
7+
private BinaryTreeNode right;
8+
9+
public BinaryTreeNode(Object o) {
10+
data = o;
11+
left = null;
12+
right = null;
13+
}
14+
15+
public Object getData() {
16+
return data;
17+
}
18+
public void setData(Object data) {
19+
this.data = data;
20+
}
21+
public BinaryTreeNode getLeft() {
22+
return left;
23+
}
24+
public void setLeft(BinaryTreeNode left) {
25+
this.left = left;
26+
}
27+
public BinaryTreeNode getRight() {
28+
return right;
29+
}
30+
public void setRight(BinaryTreeNode right) {
31+
this.right = right;
32+
}
33+
34+
public BinaryTreeNode insert(Object o){
35+
BinaryTreeNode node = new BinaryTreeNode(o);
36+
boolean left = true;
37+
BinaryTreeNode cur = this;
38+
BinaryTreeNode pre = null;
39+
while (cur != null) {
40+
pre = cur;
41+
if (node.getData().compareTo(cur.getData()) <= 0) {
42+
cur = cur.left;
43+
left = true;
44+
} else {
45+
cur = cur.right;
46+
left = false;
47+
}
48+
}
49+
if(left) {
50+
pre.left = node;
51+
} else {
52+
pre.right = node;
53+
}
54+
return node;
55+
}
56+
57+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package com.github.fei9009.coding2017.basic;
2+
3+
public interface Iterator {
4+
public boolean hasNext();
5+
public Object next();
6+
7+
}
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
package com.github.fei9009.coding2017.basic;
2+
3+
public class LinkedList implements List {
4+
5+
private Node head;
6+
private int size;
7+
8+
public void add(Object o){
9+
add(size, o);
10+
}
11+
12+
public void add(int index , Object o){
13+
if (index > this.size || index < 0) {
14+
throw new IndexOutOfBoundsException("index " + index + "beyond the size " + size );
15+
}
16+
Node dummy = node(index);
17+
Node newNode = new Node(o);
18+
newNode.next = dummy;
19+
if (index == 0) {
20+
head = newNode;
21+
}
22+
else {
23+
Node before = node(index-1);
24+
before.next = newNode;
25+
}
26+
this.size++;
27+
28+
}
29+
30+
public Object get(int index){
31+
if (index >= this.size || index < 0) {
32+
throw new IndexOutOfBoundsException("index " + index + "beyond the size " + size );
33+
}
34+
Node node = node(index);
35+
return node.data;
36+
37+
}
38+
public Object remove(int index){
39+
if (index >= this.size || index < 0) {
40+
throw new IndexOutOfBoundsException("index " + index + "beyond the size " + size );
41+
}
42+
Node delNode = node(index);
43+
if (index == 0)
44+
head = delNode.next;
45+
else {
46+
Node before = node(index-1);
47+
before.next = delNode.next;
48+
}
49+
size--;
50+
return delNode.data;
51+
}
52+
53+
public int size(){
54+
return this.size;
55+
}
56+
57+
public void addFirst(Object o){
58+
add(0, o);
59+
}
60+
public void addLast(Object o){
61+
add(o);
62+
}
63+
public Object removeFirst(){
64+
return remove(0);
65+
}
66+
67+
public Object removeLast(){
68+
return remove(this.size -1);
69+
}
70+
public Iterator iterator(){
71+
return null;
72+
}
73+
74+
Node node(int index) {
75+
Node x = head;
76+
for (int i=0; i<index; i++) {
77+
x = x.next;
78+
}
79+
return x;
80+
}
81+
82+
private static class Node{
83+
Object data;
84+
Node next;
85+
Node(Object o) {
86+
this.data = o;
87+
this.next = null;
88+
}
89+
90+
}
91+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package com.github.fei9009.coding2017.basic;
2+
3+
public interface List {
4+
public void add(Object o);
5+
public void add(int index, Object o);
6+
public Object get(int index);
7+
public Object remove(int index);
8+
public int size();
9+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package com.github.fei9009.coding2017.basic;
2+
3+
public class Queue {
4+
private ArrayList elementData = new ArrayList();
5+
6+
public void enQueue(Object o){
7+
elementData.add(o);
8+
}
9+
10+
public Object deQueue(){
11+
return elementData.remove(0);
12+
}
13+
14+
public boolean isEmpty(){
15+
return elementData.size() == 0 ? true : false;
16+
}
17+
18+
public int size(){
19+
return elementData.size();
20+
}
21+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package com.github.fei9009.coding2017.basic;
2+
3+
4+
public class Stack {
5+
private ArrayList elementData = new ArrayList();
6+
7+
public void push(Object o){
8+
elementData.add(o);
9+
}
10+
11+
public Object pop(){
12+
Object o = elementData.remove(elementData.size() - 1);
13+
return o;
14+
}
15+
16+
public Object peek(){
17+
Object o = elementData.get(elementData.size() - 1);
18+
return o;
19+
}
20+
public boolean isEmpty(){
21+
return elementData.size() == 0 ? true : false;
22+
}
23+
public int size(){
24+
return elementData.size();
25+
}
26+
}

0 commit comments

Comments
 (0)