Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 14 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@

build/
.idea/
.gradle/
Expand Down Expand Up @@ -27,3 +26,17 @@ target
liuxin/.DS_Store
liuxin/src/.DS_Store

*.class
# Mobile Tools for Java (J2ME)
.mtj.tmp/

# Package Files #
*.jar
*.war
*.ear

#eclipse
RemoteSystemsTempFiles
.classpath
.settings
.project
14 changes: 14 additions & 0 deletions group27/514402862/dataStructure/pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.zzl</groupId>
<artifactId>dataStructure</artifactId>
<version>0.0.1-SNAPSHOT</version>

<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
</dependency>
</dependencies>
</project>
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
package com.zzl.util;

import java.util.Arrays;
import java.util.NoSuchElementException;

public class ArrayList implements List{

private static final int DEFAULT_SIZE = 4;

private int size = 0;
private Object[] elementData = new Object[DEFAULT_SIZE];

public void add(Object o){
ensureCapacity(size + 1);
elementData[size++] = o;
}

public void add(int index, Object o){
rangeCheck(index);

ensureCapacity(size + 1);
System.arraycopy(elementData, index, elementData, index+1, size - index);
elementData[index] = o;
size++;
}

public Object get(int index){
rangeCheck(index);

return elementData[index];
}

public Object remove(int index){
rangeCheck(index);

Object oldValue = elementData[index];

int moveNum = size - index - 1;
if(moveNum > 0)
System.arraycopy(elementData, index+1, elementData, index, moveNum);

elementData[--size] = null;
return oldValue;
}

public int size(){
return size;
}

public Iterator iterator(){
return new ArrayListIterator();
}

private void rangeCheck(int index){
if(index > size || index < 0)
throw new IndexOutOfBoundsException("Index:" + index + "size:" + size);
}

private void ensureCapacity(int minCapacity){
if(minCapacity <= DEFAULT_SIZE){
minCapacity = DEFAULT_SIZE;
}

if(minCapacity - elementData.length > 0)
grow(minCapacity);
}

private void grow(int minCapacity){
int oldSize = elementData.length;
int newSize = oldSize + DEFAULT_SIZE;
elementData = Arrays.copyOf(elementData, newSize);
}

private class ArrayListIterator implements Iterator{
int cursor;

@Override
public boolean hasNext() {
return cursor < size;
}

@Override
public Object next() {
if (hasNext()){
return elementData[cursor++];
}
throw new NoSuchElementException();
}

}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package com.zzl.util;

public class BinaryTreeNode {

private Object data;
private BinaryTreeNode left;
private BinaryTreeNode right;
private int size = 0;

public Object getData() {
return data;
}
public void setData(Object data) {
this.data = data;
}
public BinaryTreeNode getLeft() {
return left;
}
public void setLeft(BinaryTreeNode left) {
this.left = left;
}
public BinaryTreeNode getRight() {
return right;
}
public void setRight(BinaryTreeNode right) {
this.right = right;
}

public BinaryTreeNode insert(Object o){
data = o;

return this;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package com.zzl.util;

public interface Iterator {
public boolean hasNext();
public Object next();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,159 @@
package com.zzl.util;

import java.util.NoSuchElementException;

public class LinkedList implements List{

private int size = 0;
private Node head;
private Node last;

void linkFirst(Object o){
final Node h = head;
final Node newNode = new Node(o, h);
head = newNode;
if(h == null)
last = newNode;

size++;
}

void linkLast(Object o){
final Node l = last;
final Node newNode = new Node(o, null);
last = newNode;
if(l == null)
head = newNode;
else
l.next = newNode;

size++;
}

void linkBefore(Object o, Node succ){
final Node next = succ.next;
final Node newNode = new Node(o, next);
succ.next = newNode;
size++;
}

@Override
public void add(Object o) {
linkLast(o);
}

@Override
public void add(int index, Object o) {
rangeCheck(index);

if(index == 0)
linkFirst(o);
else if(index == size)
linkLast(o);
else
linkBefore(o, node(index - 1));
}

@Override
public Object get(int index) {
rangeCheck(index);

return node(index).data;
}

@Override
public Object remove(int index) {
rangeCheck(index);

return changeNode(node(index), index);
}

@Override
public int size() {
return size;
}

public void addFirst(Object o){
linkFirst(o);
}

public Object removeFirst(){
return remove(0);
}

public Object removeLast(){
return remove(size - 1);
}

public Iterator iterator(){
return new LinkedListIterator();
}

private Object changeNode(Node oldNode, int index){
Object oldNodeValue = oldNode.data;
if(index == 0){
head = oldNode.next;
}else {
Node oldNodePrev = node(index - 1);
oldNodePrev.next = oldNode.next;
if(null == oldNode.next){
last = oldNodePrev;
}
}
oldNode.data = null;
oldNode.next = null;

size--;
return oldNodeValue;
}

private void rangeCheck(int index){
if(index > size || index < 0)
throw new IndexOutOfBoundsException("Index:" + index + "size:" + size);
}

Node node(int index){
Node x = head;
for(int i = 0; i < index; i++)
x = x.next;
return x;
}

private static class Node{
Object data;
Node next;

private Node(Object o, Node l){
this.next = l;
this.data = o;
}
}

private class LinkedListIterator implements Iterator{
private Node lastReturned;
private Node next;
private int nextIndex;

LinkedListIterator(){
next = LinkedList.this.head;
nextIndex = 0;
}

@Override
public boolean hasNext() {
return nextIndex < size;
}

@Override
public Object next() {
if (!hasNext())
throw new NoSuchElementException();

lastReturned = next;
next = next.next;
nextIndex++;
return lastReturned.data;
}

}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package com.zzl.util;

public interface List {
public void add(Object o);

public void add(int index, Object o);

public Object get(int index);

public Object remove(int index);

public int size();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package com.zzl.util;

public class Queue {

private ArrayList elementData = new ArrayList();

public void enQueue(Object o){
elementData.add(o);
}

public Object deQueue(){
return elementData.remove(0);
}

public boolean isEmpty(){
int len = elementData.size();

return len == 0;
}

public int size(){
return elementData.size();
}
}
Loading