From 12c971e71672f1b36040675005cd6a71b80a0755 Mon Sep 17 00:00:00 2001 From: tanghaojie Date: Thu, 23 Feb 2017 13:11:38 +0800 Subject: [PATCH 001/216] create --- group12/495473393/Coding/.gitignore | 1 + .../495473393/Coding/src/Base/ArrayList.java | 32 +++++++++++++ .../Coding/src/Base/BinaryTreeNode.java | 32 +++++++++++++ .../495473393/Coding/src/Base/Iterator.java | 7 +++ .../495473393/Coding/src/Base/LinkedList.java | 46 +++++++++++++++++++ group12/495473393/Coding/src/Base/List.java | 9 ++++ group12/495473393/Coding/src/Base/Queue.java | 19 ++++++++ group12/495473393/Coding/src/Base/Stack.java | 22 +++++++++ 8 files changed, 168 insertions(+) create mode 100644 group12/495473393/Coding/.gitignore create mode 100644 group12/495473393/Coding/src/Base/ArrayList.java create mode 100644 group12/495473393/Coding/src/Base/BinaryTreeNode.java create mode 100644 group12/495473393/Coding/src/Base/Iterator.java create mode 100644 group12/495473393/Coding/src/Base/LinkedList.java create mode 100644 group12/495473393/Coding/src/Base/List.java create mode 100644 group12/495473393/Coding/src/Base/Queue.java create mode 100644 group12/495473393/Coding/src/Base/Stack.java diff --git a/group12/495473393/Coding/.gitignore b/group12/495473393/Coding/.gitignore new file mode 100644 index 0000000000..ae3c172604 --- /dev/null +++ b/group12/495473393/Coding/.gitignore @@ -0,0 +1 @@ +/bin/ diff --git a/group12/495473393/Coding/src/Base/ArrayList.java b/group12/495473393/Coding/src/Base/ArrayList.java new file mode 100644 index 0000000000..0b99f87873 --- /dev/null +++ b/group12/495473393/Coding/src/Base/ArrayList.java @@ -0,0 +1,32 @@ +package Base; + +public class ArrayList implements List { + + private int size = 0; + + private Object[] elementData = new Object[100]; + + public void add(Object o){ + + } + public void add(int index, Object o){ + + } + + public Object get(int index){ + return null; + } + + public Object remove(int index){ + return null; + } + + public int size(){ + return -1; + } + + public Iterator iterator(){ + return null; + } + +} diff --git a/group12/495473393/Coding/src/Base/BinaryTreeNode.java b/group12/495473393/Coding/src/Base/BinaryTreeNode.java new file mode 100644 index 0000000000..875abe8c80 --- /dev/null +++ b/group12/495473393/Coding/src/Base/BinaryTreeNode.java @@ -0,0 +1,32 @@ +package Base; + +public class BinaryTreeNode { + + private Object data; + private BinaryTreeNode left; + private BinaryTreeNode right; + + 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){ + return null; + } + +} diff --git a/group12/495473393/Coding/src/Base/Iterator.java b/group12/495473393/Coding/src/Base/Iterator.java new file mode 100644 index 0000000000..19b65c3637 --- /dev/null +++ b/group12/495473393/Coding/src/Base/Iterator.java @@ -0,0 +1,7 @@ +package Base; + +public interface Iterator { + public boolean hasNext(); + public Object next(); + +} diff --git a/group12/495473393/Coding/src/Base/LinkedList.java b/group12/495473393/Coding/src/Base/LinkedList.java new file mode 100644 index 0000000000..0d4ce20167 --- /dev/null +++ b/group12/495473393/Coding/src/Base/LinkedList.java @@ -0,0 +1,46 @@ +package Base; + +public class LinkedList implements List { + + private Node head; + + public void add(Object o){ + + } + public void add(int index , Object o){ + + } + public Object get(int index){ + return null; + } + public Object remove(int index){ + return null; + } + + public int size(){ + return -1; + } + + public void addFirst(Object o){ + + } + public void addLast(Object o){ + + } + public Object removeFirst(){ + return null; + } + public Object removeLast(){ + return null; + } + public Iterator iterator(){ + return null; + } + + + private static class Node{ + Object data; + Node next; + + } +} diff --git a/group12/495473393/Coding/src/Base/List.java b/group12/495473393/Coding/src/Base/List.java new file mode 100644 index 0000000000..6c910af600 --- /dev/null +++ b/group12/495473393/Coding/src/Base/List.java @@ -0,0 +1,9 @@ +package Base; + +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(); +} diff --git a/group12/495473393/Coding/src/Base/Queue.java b/group12/495473393/Coding/src/Base/Queue.java new file mode 100644 index 0000000000..9c2948d7e3 --- /dev/null +++ b/group12/495473393/Coding/src/Base/Queue.java @@ -0,0 +1,19 @@ +package Base; + +public class Queue { + + public void enQueue(Object o){ + } + + public Object deQueue(){ + return null; + } + + public boolean isEmpty(){ + return false; + } + + public int size(){ + return -1; + } +} diff --git a/group12/495473393/Coding/src/Base/Stack.java b/group12/495473393/Coding/src/Base/Stack.java new file mode 100644 index 0000000000..8f59343d4b --- /dev/null +++ b/group12/495473393/Coding/src/Base/Stack.java @@ -0,0 +1,22 @@ +package Base; + +public class Stack { + private ArrayList elementData = new ArrayList(); + + public void push(Object o){ + } + + public Object pop(){ + return null; + } + + public Object peek(){ + return null; + } + public boolean isEmpty(){ + return false; + } + public int size(){ + return -1; + } +} From ccf95b4f73d4edee62204968c9e763201cacea19 Mon Sep 17 00:00:00 2001 From: guodongym Date: Thu, 23 Feb 2017 13:28:16 +0800 Subject: [PATCH 002/216] =?UTF-8?q?list=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- group12/377401843/learning_1/.gitignore | 3 + .../com/guodong/datastructure/ArrayList.java | 171 ++++++++++++++++++ .../guodong/datastructure/BinaryTreeNode.java | 32 ++++ .../com/guodong/datastructure/Iterator.java | 7 + .../com/guodong/datastructure/LinkedList.java | 45 +++++ .../src/com/guodong/datastructure/List.java | 14 ++ .../src/com/guodong/datastructure/Queue.java | 19 ++ .../src/com/guodong/datastructure/Stack.java | 22 +++ .../datastructure/test/ArrayListTest.java | 53 ++++++ 9 files changed, 366 insertions(+) create mode 100644 group12/377401843/learning_1/.gitignore create mode 100644 group12/377401843/learning_1/src/com/guodong/datastructure/ArrayList.java create mode 100644 group12/377401843/learning_1/src/com/guodong/datastructure/BinaryTreeNode.java create mode 100644 group12/377401843/learning_1/src/com/guodong/datastructure/Iterator.java create mode 100644 group12/377401843/learning_1/src/com/guodong/datastructure/LinkedList.java create mode 100644 group12/377401843/learning_1/src/com/guodong/datastructure/List.java create mode 100644 group12/377401843/learning_1/src/com/guodong/datastructure/Queue.java create mode 100644 group12/377401843/learning_1/src/com/guodong/datastructure/Stack.java create mode 100644 group12/377401843/learning_1/src/com/guodong/datastructure/test/ArrayListTest.java diff --git a/group12/377401843/learning_1/.gitignore b/group12/377401843/learning_1/.gitignore new file mode 100644 index 0000000000..9c47ca7e58 --- /dev/null +++ b/group12/377401843/learning_1/.gitignore @@ -0,0 +1,3 @@ +/bin/ +/.project +/.classpath diff --git a/group12/377401843/learning_1/src/com/guodong/datastructure/ArrayList.java b/group12/377401843/learning_1/src/com/guodong/datastructure/ArrayList.java new file mode 100644 index 0000000000..a1ee0ee339 --- /dev/null +++ b/group12/377401843/learning_1/src/com/guodong/datastructure/ArrayList.java @@ -0,0 +1,171 @@ +package com.guodong.datastructure; + +import java.util.Arrays; + +public class ArrayList implements List { + + private int size = 0; + + private Object[] elementData = new Object[100]; + + /** + * 按下标顺序新增元素 + * + * @Method add + * @param o + * @see com.guodong.datastructure.List#add(java.lang.Object) + */ + public void add(Object o) { + ensureCapacityInternal(size + 1); + elementData[size] = o; + size++; + } + + /** + * 在指定下标位置插入元素 + * + * @Method add + * @param index + * @param o + * @see com.guodong.datastructure.List#add(int, java.lang.Object) + */ + public void add(int index, Object o) { + checkRangeForAdd(index); + + ensureCapacityInternal(size + 1); + + System.arraycopy(elementData, index, elementData, index + 1, size - index); + + elementData[index] = o; + size++; + } + + /** + * 根据下标获取列表数据 + * + * @Method get + * @param index + * @return + * @see com.guodong.datastructure.List#get(int) + */ + public Object get(int index) { + checkRangeForGetOrRemove(index); + + return elementData[index]; + } + + /** + * 根据下标移除元素,并返回移除的元素值 + * + * @Method remove + * @param index + * @return + * @see com.guodong.datastructure.List#remove(int) + */ + public Object remove(int index) { + checkRangeForGetOrRemove(index); + + Object oldValue = elementData[index]; + + System.arraycopy(elementData, index + 1, elementData, index, size - index -1); + + size--; + elementData[size] = null; + + return oldValue; + } + + /** + * 获得列表长度 + * + * @Method size + * @return + * @see com.guodong.datastructure.List#size() + */ + public int size() { + return size; + } + + /** + * 获取ArrayList的迭代器 + * + * @MethodName iterator + * @author zhaogd + * @date 2017年2月21日 下午8:19:28 + * @return + */ + public Iterator iterator() { + return new ArrayListIterator(); + } + + /** + * 确保数组容量足够,如果不够则扩充数组 + * + * @MethodName ensureCapacityInternal + * @author zhaogd + * @date 2017年2月21日 下午5:06:46 + * @param minCapacity + */ + private void ensureCapacityInternal(int minCapacity) { + if(minCapacity > elementData.length){ + grow(minCapacity); + } + } + + /** + * 数组扩充,每次扩充原数组一半的长度,然后把原数组拷贝到新数组 + * + * @MethodName grow + * @author zhaogd + * @date 2017年2月21日 下午5:20:55 + * @param minCapacity + */ + private void grow(int minCapacity) { + minCapacity = elementData.length + elementData.length / 2; + elementData = Arrays.copyOf(elementData, minCapacity); + } + + /** + * 检查Add方法的下标范围是否合法 + * + * @MethodName checkRangeForAdd + * @author zhaogd + * @date 2017年2月21日 下午7:32:55 + * @param index + */ + private void checkRangeForAdd(int index) { + if(index > size || index < 0){ + throw new IndexOutOfBoundsException("Index:" + index + ",Size:" + size); + } + } + + /** + * 检查Get或者Remove方法的下标范围是否合法 + * + * @MethodName checkRangeForGetOrRemove + * @author zhaogd + * @date 2017年2月21日 下午7:33:21 + * @param index + */ + private void checkRangeForGetOrRemove(int index) { + if(index >= size || index < 0){ + throw new IndexOutOfBoundsException("Index:" + index + ",Size:" + size); + } + } + + + private class ArrayListIterator implements Iterator{ + + private int lastIndex = 0; + + @Override + public boolean hasNext() { + return lastIndex < size; + } + + @Override + public Object next() { + return elementData[lastIndex++]; + } + } +} diff --git a/group12/377401843/learning_1/src/com/guodong/datastructure/BinaryTreeNode.java b/group12/377401843/learning_1/src/com/guodong/datastructure/BinaryTreeNode.java new file mode 100644 index 0000000000..933e72acda --- /dev/null +++ b/group12/377401843/learning_1/src/com/guodong/datastructure/BinaryTreeNode.java @@ -0,0 +1,32 @@ +package com.guodong.datastructure; + +public class BinaryTreeNode { + + private Object data; + private BinaryTreeNode left; + private BinaryTreeNode right; + + 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){ + return null; + } + +} diff --git a/group12/377401843/learning_1/src/com/guodong/datastructure/Iterator.java b/group12/377401843/learning_1/src/com/guodong/datastructure/Iterator.java new file mode 100644 index 0000000000..1a9bc5ad8a --- /dev/null +++ b/group12/377401843/learning_1/src/com/guodong/datastructure/Iterator.java @@ -0,0 +1,7 @@ +package com.guodong.datastructure; + +public interface Iterator { + public boolean hasNext(); + public Object next(); + +} diff --git a/group12/377401843/learning_1/src/com/guodong/datastructure/LinkedList.java b/group12/377401843/learning_1/src/com/guodong/datastructure/LinkedList.java new file mode 100644 index 0000000000..fc801505f1 --- /dev/null +++ b/group12/377401843/learning_1/src/com/guodong/datastructure/LinkedList.java @@ -0,0 +1,45 @@ +package com.guodong.datastructure; + +public class LinkedList implements List { + + private Node head; + + public void add(Object o){ + + } + public void add(int index , Object o){ + + } + public Object get(int index){ + return null; + } + public Object remove(int index){ + return null; + } + + public int size(){ + return -1; + } + + public void addFirst(Object o){ + + } + public void addLast(Object o){ + + } + public Object removeFirst(){ + return null; + } + public Object removeLast(){ + return null; + } + public Iterator iterator(){ + return null; + } + + + private static class Node{ + Object data; + Node next; + } +} diff --git a/group12/377401843/learning_1/src/com/guodong/datastructure/List.java b/group12/377401843/learning_1/src/com/guodong/datastructure/List.java new file mode 100644 index 0000000000..2471c15d21 --- /dev/null +++ b/group12/377401843/learning_1/src/com/guodong/datastructure/List.java @@ -0,0 +1,14 @@ +package com.guodong.datastructure; + +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(); +} diff --git a/group12/377401843/learning_1/src/com/guodong/datastructure/Queue.java b/group12/377401843/learning_1/src/com/guodong/datastructure/Queue.java new file mode 100644 index 0000000000..d016046bc5 --- /dev/null +++ b/group12/377401843/learning_1/src/com/guodong/datastructure/Queue.java @@ -0,0 +1,19 @@ +package com.guodong.datastructure; + +public class Queue { + + public void enQueue(Object o){ + } + + public Object deQueue(){ + return null; + } + + public boolean isEmpty(){ + return false; + } + + public int size(){ + return -1; + } +} diff --git a/group12/377401843/learning_1/src/com/guodong/datastructure/Stack.java b/group12/377401843/learning_1/src/com/guodong/datastructure/Stack.java new file mode 100644 index 0000000000..a61c7424aa --- /dev/null +++ b/group12/377401843/learning_1/src/com/guodong/datastructure/Stack.java @@ -0,0 +1,22 @@ +package com.guodong.datastructure; + +public class Stack { + private ArrayList elementData = new ArrayList(); + + public void push(Object o){ + } + + public Object pop(){ + return null; + } + + public Object peek(){ + return null; + } + public boolean isEmpty(){ + return false; + } + public int size(){ + return -1; + } +} diff --git a/group12/377401843/learning_1/src/com/guodong/datastructure/test/ArrayListTest.java b/group12/377401843/learning_1/src/com/guodong/datastructure/test/ArrayListTest.java new file mode 100644 index 0000000000..e22d84f72c --- /dev/null +++ b/group12/377401843/learning_1/src/com/guodong/datastructure/test/ArrayListTest.java @@ -0,0 +1,53 @@ +package com.guodong.datastructure.test; + +import static org.junit.Assert.*; + + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +import com.guodong.datastructure.ArrayList; + +public class ArrayListTest { + + @Before + public void setUp() throws Exception { + } + + @After + public void tearDown() throws Exception { + } + + @Test + public void testAddObject() { + ArrayList arrayList = new ArrayList(); + arrayList.add(1); + assertEquals(1, arrayList.get(0)); + } + + @Test + public void testAddIntObject() { + fail("Not yet implemented"); + } + + @Test + public void testGet() { + fail("Not yet implemented"); + } + + @Test + public void testRemove() { + fail("Not yet implemented"); + } + + @Test + public void testSize() { + fail("Not yet implemented"); + } + + @Test + public void testIterator() { + fail("Not yet implemented"); + } +} From d7b3f1e246068bbfe6f33d51029767ff74783729 Mon Sep 17 00:00:00 2001 From: livenQiang Date: Thu, 23 Feb 2017 13:36:20 +0800 Subject: [PATCH 003/216] =?UTF-8?q?=E5=AE=8C=E6=88=90=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- group20/286166752/.gitignore | 4 + .../liven/code/dataStructures/ArrayList.java | 86 +++++++++++++++++++ .../liven/code/dataStructures/LinkedList.java | 40 +++++++++ .../wiki/liven/code/dataStructures/List.java | 14 +++ .../wiki/liven/code/dataStructures/Queue.java | 7 ++ .../wiki/liven/code/dataStructures/Stack.java | 7 ++ .../src/wiki/liven/code/test/SomeDemos.java | 15 ++++ 7 files changed, 173 insertions(+) create mode 100644 group20/286166752/.gitignore create mode 100644 group20/286166752/src/wiki/liven/code/dataStructures/ArrayList.java create mode 100644 group20/286166752/src/wiki/liven/code/dataStructures/LinkedList.java create mode 100644 group20/286166752/src/wiki/liven/code/dataStructures/List.java create mode 100644 group20/286166752/src/wiki/liven/code/dataStructures/Queue.java create mode 100644 group20/286166752/src/wiki/liven/code/dataStructures/Stack.java create mode 100644 group20/286166752/src/wiki/liven/code/test/SomeDemos.java diff --git a/group20/286166752/.gitignore b/group20/286166752/.gitignore new file mode 100644 index 0000000000..d120d1749d --- /dev/null +++ b/group20/286166752/.gitignore @@ -0,0 +1,4 @@ +.idea/ +286166752.iml +out/ + diff --git a/group20/286166752/src/wiki/liven/code/dataStructures/ArrayList.java b/group20/286166752/src/wiki/liven/code/dataStructures/ArrayList.java new file mode 100644 index 0000000000..68444b87a9 --- /dev/null +++ b/group20/286166752/src/wiki/liven/code/dataStructures/ArrayList.java @@ -0,0 +1,86 @@ +package wiki.liven.code.dataStructures; + +/** + * Created by leven on 2017/2/21. + */ +public class ArrayList implements List{ + + /** + * 列表中元素的个数 + */ + private int size = 0; + private int maxSize = 100; + /** + * 初始数组 + */ + private Object[] elementData = new Object[maxSize]; + + /** + * 在指定的位置i插入元素O + * 插入元素,判断当前列表中元素的个数, + * 当size==100,则需要扩张数组 + * 当size<100,则使用初始数组完成插入操作 + * 插入操作: + * 从最后一个元素开始,往后移动一位,直到到index为止. + * @param index + * @param o + */ + @Override + public void add(int index, Object o) { + if (size>=maxSize){ + Object[] targt = new Object[++maxSize]; + System.arraycopy(elementData,0,targt,0,maxSize); + for (int j = targt.length;j>=index;j--){ + targt[j-1] = targt[j-2]; + } + targt[index] = o; + size++; + }else if(size=index;j--){ + elementData[j-1] = elementData[j-2]; + } + elementData[index] = o; + size++; + } + } + + /** + * 追加元素 + * @param o + */ + @Override + public void add(Object o) { + if (size>=maxSize){ + Object[] targt = new Object[++maxSize]; + System.arraycopy(elementData,0,targt,0,maxSize); + targt[maxSize-1] = o; + size++; + }else if(sizesize-1;i++){ + elementData[i] = elementData[i+1]; + } + return temp; + } + + @Override + public int size() { + return size; + } + + + + +} diff --git a/group20/286166752/src/wiki/liven/code/dataStructures/LinkedList.java b/group20/286166752/src/wiki/liven/code/dataStructures/LinkedList.java new file mode 100644 index 0000000000..b2cc5f8668 --- /dev/null +++ b/group20/286166752/src/wiki/liven/code/dataStructures/LinkedList.java @@ -0,0 +1,40 @@ +package wiki.liven.code.dataStructures; + +/** + * Created by leven on 2017/2/21. + */ +public class LinkedList implements List{ + + private Node head; + + private static class Node{ + Object data; + Node next; + } + + + @Override + public void add(int index, Object o) { + + } + + @Override + public void add(Object o) { + + } + + @Override + public Object get(int index) { + return null; + } + + @Override + public Object remove(int index) { + return null; + } + + @Override + public int size() { + return 0; + } +} diff --git a/group20/286166752/src/wiki/liven/code/dataStructures/List.java b/group20/286166752/src/wiki/liven/code/dataStructures/List.java new file mode 100644 index 0000000000..2d1840ef0f --- /dev/null +++ b/group20/286166752/src/wiki/liven/code/dataStructures/List.java @@ -0,0 +1,14 @@ +package wiki.liven.code.dataStructures; + +/** + * Created by leven on 2017/2/21. + */ +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(); + +} diff --git a/group20/286166752/src/wiki/liven/code/dataStructures/Queue.java b/group20/286166752/src/wiki/liven/code/dataStructures/Queue.java new file mode 100644 index 0000000000..b8c8430daa --- /dev/null +++ b/group20/286166752/src/wiki/liven/code/dataStructures/Queue.java @@ -0,0 +1,7 @@ +package wiki.liven.code.dataStructures; + +/** + * Created by leven on 2017/2/21. + */ +public class Queue { +} diff --git a/group20/286166752/src/wiki/liven/code/dataStructures/Stack.java b/group20/286166752/src/wiki/liven/code/dataStructures/Stack.java new file mode 100644 index 0000000000..59cb18c416 --- /dev/null +++ b/group20/286166752/src/wiki/liven/code/dataStructures/Stack.java @@ -0,0 +1,7 @@ +package wiki.liven.code.dataStructures; + +/** + * Created by leven on 2017/2/21. + */ +public class Stack { +} diff --git a/group20/286166752/src/wiki/liven/code/test/SomeDemos.java b/group20/286166752/src/wiki/liven/code/test/SomeDemos.java new file mode 100644 index 0000000000..90a74edc35 --- /dev/null +++ b/group20/286166752/src/wiki/liven/code/test/SomeDemos.java @@ -0,0 +1,15 @@ +package wiki.liven.code.test; + +/** + * Created by leven on 2017/2/21. + */ +public class SomeDemos { + + public static void main(String[] args){ + int[] a = new int[10]; + a[0] = 4; + System.out.println(a.length); + + } + +} From bddcf6e28a648405325343e52a3c4eb5b79cfdeb Mon Sep 17 00:00:00 2001 From: zj <2258659044@qq.com> Date: Thu, 23 Feb 2017 13:40:27 +0800 Subject: [PATCH 004/216] my project --- group12/2258659044/readme.txt | 1 + .../src/com/coding/basic/ArrayList.java | 100 +++++++++++++ .../src/com/coding/basic/BinaryTreeNode.java | 81 +++++++++++ .../src/com/coding/basic/Iterator.java | 8 + .../src/com/coding/basic/LinkedList.java | 137 ++++++++++++++++++ .../zj-2017/src/com/coding/basic/List.java | 10 ++ .../zj-2017/src/com/coding/basic/Queue.java | 26 ++++ .../zj-2017/src/com/coding/basic/Stack.java | 28 ++++ .../test/com/coding/basic/ArrayListTest.java | 109 ++++++++++++++ .../test/com/coding/basic/LinkedListTest.java | 109 ++++++++++++++ 10 files changed, 609 insertions(+) create mode 100644 group12/2258659044/readme.txt create mode 100644 group12/2258659044/zj-2017/src/com/coding/basic/ArrayList.java create mode 100644 group12/2258659044/zj-2017/src/com/coding/basic/BinaryTreeNode.java create mode 100644 group12/2258659044/zj-2017/src/com/coding/basic/Iterator.java create mode 100644 group12/2258659044/zj-2017/src/com/coding/basic/LinkedList.java create mode 100644 group12/2258659044/zj-2017/src/com/coding/basic/List.java create mode 100644 group12/2258659044/zj-2017/src/com/coding/basic/Queue.java create mode 100644 group12/2258659044/zj-2017/src/com/coding/basic/Stack.java create mode 100644 group12/2258659044/zj-2017/src/test/com/coding/basic/ArrayListTest.java create mode 100644 group12/2258659044/zj-2017/src/test/com/coding/basic/LinkedListTest.java diff --git a/group12/2258659044/readme.txt b/group12/2258659044/readme.txt new file mode 100644 index 0000000000..59c627dd7e --- /dev/null +++ b/group12/2258659044/readme.txt @@ -0,0 +1 @@ +this is my projectWorkcpace! \ No newline at end of file diff --git a/group12/2258659044/zj-2017/src/com/coding/basic/ArrayList.java b/group12/2258659044/zj-2017/src/com/coding/basic/ArrayList.java new file mode 100644 index 0000000000..16cd3a0fc1 --- /dev/null +++ b/group12/2258659044/zj-2017/src/com/coding/basic/ArrayList.java @@ -0,0 +1,100 @@ +package com.coding.basic; + +import java.util.NoSuchElementException; + +public class ArrayList implements List { + + private int size = 0; + /*扩容因子*/ + private static final int GENE = 10; + + private Object[] elementData = new Object[10]; + /*扩容引用*/ + private Object[] newElementData; + + public void add(Object o){ + if(size>=elementData.length){//扩容 + grow(); + } + elementData[size] = o; + size ++; + } + public void add(int index, Object o){ + + if(index>size){ + throw new IndexOutOfBoundsException("Index: "+index+",Size:"+size); + } + if(size>=elementData.length||index>=elementData.length-1){//长度不够需要扩容 + grow(); + } + if(indexsize){ + size = index+1; + }else{ + size ++; + } + } + + public Object get(int index){ + + if(index>=size){ + throw new IndexOutOfBoundsException("Index: "+index+",Size:"+size); + } + return elementData[index]; + } + + public Object remove(int index){ + + Object o = elementData[index]; + System.arraycopy(elementData, index+1, elementData, index, size-(index+1)); + size --; + return o; + } + + public int size(){ + return size; + } + + /** + * 扩容,扩容因子为10 + */ + private void grow(){ + + newElementData = new Object[size+GENE]; + System.arraycopy(elementData, 0, newElementData, 0, elementData.length); + elementData = newElementData; + } + + + public Iterator iterator(){ + + return new Itr(); + } + + private class Itr implements Iterator{ + + int cursor; + @Override + public boolean hasNext() { + return cursor != ArrayList.this.size; + } + + @Override + public Object next() { + + int i = this.cursor; + if (i >= ArrayList.this.size){ + throw new NoSuchElementException(); + } + this.cursor = (i + 1); + return ArrayList.this.elementData[i]; + } + + } +} diff --git a/group12/2258659044/zj-2017/src/com/coding/basic/BinaryTreeNode.java b/group12/2258659044/zj-2017/src/com/coding/basic/BinaryTreeNode.java new file mode 100644 index 0000000000..c167c877c3 --- /dev/null +++ b/group12/2258659044/zj-2017/src/com/coding/basic/BinaryTreeNode.java @@ -0,0 +1,81 @@ +package com.coding.basic; +public class BinaryTreeNode { + + private Object data; + //根节点 + private BinaryTreeNode root; + //父节点 + private BinaryTreeNode parent; + private BinaryTreeNode left; + private BinaryTreeNode right; + //所有数据集合 + private final List datas = new ArrayList(); + 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; + } + + @SuppressWarnings({ "rawtypes", "unchecked" }) + public > BinaryTreeNode insert(T o){ + + BinaryTreeNode treeNode = new BinaryTreeNode(); + treeNode.data = o; + if(root == null){ + root = treeNode; + root.root = treeNode; + }else{ + BinaryTreeNode currentNode = root; + while(true){ + parent = currentNode; + if(((Comparable)currentNode.data).compareTo(o)>0){//向左放 + currentNode = currentNode.getLeft(); + if(currentNode == null){ + parent.left = treeNode; + treeNode.parent = parent; + treeNode.root = root; + break; + } + }else{//向右放 + currentNode = currentNode.getRight(); + if(currentNode == null){ + parent.right = treeNode; + treeNode.parent = parent; + treeNode.root = root; + break; + } + } + } + } + return treeNode; + } + + /** + * 先序遍历 + * @param node + * @return + */ + public List traversal(BinaryTreeNode node){ + + if(node !=null){ + datas.add(node.data); + traversal(node.left); + traversal(node.right); + } + return datas; + } + +} diff --git a/group12/2258659044/zj-2017/src/com/coding/basic/Iterator.java b/group12/2258659044/zj-2017/src/com/coding/basic/Iterator.java new file mode 100644 index 0000000000..c854120212 --- /dev/null +++ b/group12/2258659044/zj-2017/src/com/coding/basic/Iterator.java @@ -0,0 +1,8 @@ +package com.coding.basic; + +public interface Iterator { + + public boolean hasNext(); + public Object next(); + +} diff --git a/group12/2258659044/zj-2017/src/com/coding/basic/LinkedList.java b/group12/2258659044/zj-2017/src/com/coding/basic/LinkedList.java new file mode 100644 index 0000000000..460298ff56 --- /dev/null +++ b/group12/2258659044/zj-2017/src/com/coding/basic/LinkedList.java @@ -0,0 +1,137 @@ +package com.coding.basic; + +import java.util.NoSuchElementException; + +public class LinkedList implements List { + + private Node head; + + private int size = 0; + + public void add(Object o){ + + Node addNode = new Node(); + addNode.data = o; + if(size==0){ + head = addNode; + }else{ + //获取最后一个节点 + Node lastNode = getPointNode(size-1); + lastNode.next = addNode; + } + size++; + } + public void add(int index , Object o){ + + Node addNode = new Node(); + addNode.data = o; + if(index == 0){ + addFirst(o); + return; + } + if(index == size){ + Node lastNode = getPointNode(size-1); + lastNode.next = addNode; + }else{ + Node pointNode = getPointNode(index); + Node prePointNode = getPointNode(index-1); + prePointNode.next = addNode; + addNode.next = pointNode; + } + size ++; + } + public Object get(int index){ + + Node node = getPointNode(index); + return node.data; + } + + public Object remove(int index){ + + Node pointNode = getPointNode(index); + Node nextPointNode = getPointNode(index+1); + if(index ==0){ + head = nextPointNode; + }else{ + Node prePointNode = getPointNode(index-1); + prePointNode.next = nextPointNode; + } + size --; + return pointNode.data; + } + + public int size(){ + return size; + } + + public void addFirst(Object o){ + + Node secondNode = head; + head = new Node(); + head.data = o; + if(size>0){ + head.next = secondNode; + } + size ++; + } + + public void addLast(Object o){ + add(o); + } + + public Object removeFirst(){ + + return remove(0); + } + + public Object removeLast(){ + + return remove(size-1); + } + public Iterator iterator(){ + return new Itr(); + } + + private class Itr implements Iterator{ + + int cursor; + @Override + public boolean hasNext() { + return cursor != LinkedList.this.size; + } + + @Override + public Object next() { + + int i = this.cursor; + if (i >= LinkedList.this.size){ + throw new NoSuchElementException(); + } + this.cursor = (i + 1); + return LinkedList.this.get(i); + } + + } + + /** + * 获取指定的节点 + * @return + */ + private Node getPointNode(int index){ + + if(index>size){ + throw new IndexOutOfBoundsException("Index: "+index+",Size:"+size+""); + } + Node node = head; + for (int i = 0; i < index; i++) { + node = node.next; + } + return node; + } + + private static class Node{ + Object data; + Node next; + + } +} \ No newline at end of file diff --git a/group12/2258659044/zj-2017/src/com/coding/basic/List.java b/group12/2258659044/zj-2017/src/com/coding/basic/List.java new file mode 100644 index 0000000000..a5a3688eb6 --- /dev/null +++ b/group12/2258659044/zj-2017/src/com/coding/basic/List.java @@ -0,0 +1,10 @@ +package com.coding.basic; + +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(); +} \ No newline at end of file diff --git a/group12/2258659044/zj-2017/src/com/coding/basic/Queue.java b/group12/2258659044/zj-2017/src/com/coding/basic/Queue.java new file mode 100644 index 0000000000..e29ff65ddf --- /dev/null +++ b/group12/2258659044/zj-2017/src/com/coding/basic/Queue.java @@ -0,0 +1,26 @@ +package com.coding.basic; + +public class Queue { + + private LinkedList element = new LinkedList(); + + public void enQueue(Object o){ + + element.add(o); + } + + public Object deQueue(){ + + return element.removeFirst(); + } + + public boolean isEmpty(){ + + return element.size()==0; + } + + public int size(){ + + return element.size(); + } +} diff --git a/group12/2258659044/zj-2017/src/com/coding/basic/Stack.java b/group12/2258659044/zj-2017/src/com/coding/basic/Stack.java new file mode 100644 index 0000000000..03709097e5 --- /dev/null +++ b/group12/2258659044/zj-2017/src/com/coding/basic/Stack.java @@ -0,0 +1,28 @@ +package com.coding.basic; + +public class Stack { + + private ArrayList elementData = new ArrayList(); + + public void push(Object o){ + + elementData.add(o); + } + + public Object pop(){ + + return elementData.remove(size()-1); + } + + public Object peek(){ + + return elementData.get(size()-1); + } + public boolean isEmpty(){ + + return size()==0; + } + public int size(){ + return elementData.size(); + } +} diff --git a/group12/2258659044/zj-2017/src/test/com/coding/basic/ArrayListTest.java b/group12/2258659044/zj-2017/src/test/com/coding/basic/ArrayListTest.java new file mode 100644 index 0000000000..e7613ee689 --- /dev/null +++ b/group12/2258659044/zj-2017/src/test/com/coding/basic/ArrayListTest.java @@ -0,0 +1,109 @@ +package test.com.coding.basic; + +import java.util.NoSuchElementException; + +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; + +import com.coding.basic.ArrayList; +import com.coding.basic.Iterator; + +public class ArrayListTest { + + ArrayList ls ; + @Before + public void setup() { + ls = new ArrayList(); + } + + /** + * 测试一个参数的add方法 + * ArrayList当数据超过10时进行第一次扩容 + */ + @Test + public void add(){ + + ls.add(3); + ls.add("a"); + for (int i = 0; i < 10; i++) { + ls.add(i); + } + Assert.assertEquals(ls.size(), 12); + Assert.assertEquals(ls.get(1), "a"); + } + + /** + * 两个参数的add方法 + */ + @Test(expected = IndexOutOfBoundsException.class) + public void add4ToPramter(){ + + ls.add(0, 0); + ls.add(1,1); + ls.add(2, 2); + ls.add(3,3); + for (int i = 0; i < 10; i++) { + ls.add(3,i); + } + Assert.assertEquals(ls.size(), 14); + Assert.assertEquals(ls.get(3), 9); + Assert.assertEquals(ls.get(13), 3); + ls.add(15, "a"); + } + + /** + * get(i) + */ + @Test(expected = IndexOutOfBoundsException.class) + public void get(){ + + for (int i = 0; i < 10; i++) { + ls.add(i); + } + ls.add(11,11); + Assert.assertEquals(ls.get(9), 9); + Assert.assertEquals(ls.get(10),null); + ls.get(12); + } + + @Test + public void remove(){ + + for (int i = 0; i < 10; i++) { + ls.add(i); + } + Assert.assertEquals(ls.remove(5),5); + Assert.assertEquals(ls.size(),9); + Assert.assertEquals(ls.remove(8),9); + Assert.assertEquals(ls.size(),8); + } + + @Test + public void size(){ + + Assert.assertEquals(ls.size(),0); + ls.add("a"); + Assert.assertEquals(ls.size(),1); + ls.add(0,0); + Assert.assertEquals(ls.size(),2); + ls.remove(0); + Assert.assertEquals(ls.size(),1); + + } + + @Test(expected = NoSuchElementException.class) + public void iterator(){ + + for (int i = 0; i < 10; i++) { + ls.add(i); + } + Iterator it = ls.iterator(); + Assert.assertEquals(it.hasNext(),true); + for (int i = 0; i < 10; i++) { + it.next(); + } + Assert.assertEquals(it.hasNext(),false); + it.next(); + } +} diff --git a/group12/2258659044/zj-2017/src/test/com/coding/basic/LinkedListTest.java b/group12/2258659044/zj-2017/src/test/com/coding/basic/LinkedListTest.java new file mode 100644 index 0000000000..e7b56eccff --- /dev/null +++ b/group12/2258659044/zj-2017/src/test/com/coding/basic/LinkedListTest.java @@ -0,0 +1,109 @@ +package test.com.coding.basic; + +import java.util.NoSuchElementException; + +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; + +import com.coding.basic.Iterator; +import com.coding.basic.LinkedList; + +public class LinkedListTest { + + LinkedList ls ; + @Before + public void setup() { + ls = new LinkedList(); + } + + /** + * 测试一个参数的add方法 + * ArrayList当数据超过10时进行第一次扩容 + */ + @Test + public void add(){ + + ls.add(3); + ls.add("a"); + for (int i = 0; i < 10; i++) { + ls.add(i); + } + Assert.assertEquals(ls.size(), 12); + Assert.assertEquals(ls.get(1), "a"); + } + + /** + * 两个参数的add方法 + */ + @Test(expected = IndexOutOfBoundsException.class) + public void add4ToPramter(){ + + ls.add(0, 0); + ls.add(1,1); + ls.add(2, 2); + ls.add(3,3); + for (int i = 0; i < 10; i++) { + ls.add(3,i); + } + Assert.assertEquals(ls.size(), 14); + Assert.assertEquals(ls.get(3), 9); + Assert.assertEquals(ls.get(13), 3); + ls.add(15, "a"); + } + + /** + * get(i) + */ + @Test(expected = IndexOutOfBoundsException.class) + public void get(){ + + for (int i = 0; i < 10; i++) { + ls.add(i); + } + ls.add(11,11); + Assert.assertEquals(ls.get(9), 9); + Assert.assertEquals(ls.get(10),null); + ls.get(12); + } + + @Test + public void remove(){ + + for (int i = 0; i < 10; i++) { + ls.add(i); + } + Assert.assertEquals(ls.remove(5),5); + Assert.assertEquals(ls.size(),9); + Assert.assertEquals(ls.remove(8),9); + Assert.assertEquals(ls.size(),8); + } + + @Test + public void size(){ + + Assert.assertEquals(ls.size(),0); + ls.add("a"); + Assert.assertEquals(ls.size(),1); + ls.add(0,0); + Assert.assertEquals(ls.size(),2); + ls.remove(0); + Assert.assertEquals(ls.size(),1); + + } + + @Test(expected = NoSuchElementException.class) + public void iterator(){ + + for (int i = 0; i < 10; i++) { + ls.add(i); + } + Iterator it = ls.iterator(); + Assert.assertEquals(it.hasNext(),true); + for (int i = 0; i < 10; i++) { + it.next(); + } + Assert.assertEquals(it.hasNext(),false); + it.next(); + } +} From c4891ca32ede14c01c5f685a9b522ea2966da43b Mon Sep 17 00:00:00 2001 From: Korben_CHY Date: Thu, 23 Feb 2017 13:41:11 +0800 Subject: [PATCH 005/216] add .gitignore --- group20/.gitignore | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 group20/.gitignore diff --git a/group20/.gitignore b/group20/.gitignore new file mode 100644 index 0000000000..0979db8ba4 --- /dev/null +++ b/group20/.gitignore @@ -0,0 +1,41 @@ +# Java class files +*.class + +# Generated files +bin/ +gen/ +out/ +target/ + +# Gradle files +.gradle/ +build/ + +# Local configuration file (sdk path, etc) +local.properties + +# Proguard folder generated by Eclipse +proguard/ + +# Log Files +*.log + +# Intellij +*.iml +.idea/workspace.xml +.idea/tasks.xml +.idea/gradle.xml +.idea/dictionaries +.idea/libraries +.idea + +# Project generated files +.project +.settings +.classpath +.com +.metadata + +# Mac file +.DS_Store + From 8758eda26ca7b986290d889ecc9ca7364554b830 Mon Sep 17 00:00:00 2001 From: Korben_CHY Date: Thu, 23 Feb 2017 13:54:12 +0800 Subject: [PATCH 006/216] do not ignore .jar files in Group20 --- group20/.gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/group20/.gitignore b/group20/.gitignore index 0979db8ba4..389e717ef0 100644 --- a/group20/.gitignore +++ b/group20/.gitignore @@ -39,3 +39,5 @@ proguard/ # Mac file .DS_Store +# Do not ignore .jar file +!*.jar From f1c0709fb21a2d1adc1cb9801ac868c4d5dce347 Mon Sep 17 00:00:00 2001 From: honokaBiu Date: Thu, 23 Feb 2017 00:50:46 -0500 Subject: [PATCH 007/216] LinkedList --- .../src/SinglyLinkedList/LinkedList0.java | 75 ++++++ .../src/SinglyLinkedList2/LinkedList1.java | 242 ++++++++++++++++++ 2 files changed, 317 insertions(+) create mode 100644 group20/1040154728/1040154728Learning/src/SinglyLinkedList/LinkedList0.java create mode 100644 group20/1040154728/1040154728Learning/src/SinglyLinkedList2/LinkedList1.java diff --git a/group20/1040154728/1040154728Learning/src/SinglyLinkedList/LinkedList0.java b/group20/1040154728/1040154728Learning/src/SinglyLinkedList/LinkedList0.java new file mode 100644 index 0000000000..7cdf1e7f26 --- /dev/null +++ b/group20/1040154728/1040154728Learning/src/SinglyLinkedList/LinkedList0.java @@ -0,0 +1,75 @@ +package SinglyLinkedList; + +/** + * Created by Honoka on 2/16/2017. + */ +public class LinkedList0 { + //Node class represents a list node + private class Node + { + String value; + Node next; + /** + * Constructor + * @param val The element to store in this node. + * @param n The reference to the next node. + */ + Node (String val, Node n) + { + value = val; + next = n; + } + + /** + * Constructor + * @param val The element to store in this node. + */ + Node(String val) + { + value = val; + next = null; + } + } + //Reference to the first node in the list + private Node first = null; + /** + * Constructor + * Builds a linked list + */ + public LinkedList0() + { + //test + first = new Node("Apple"); + first.next = new Node("Peach"); + first.next.next = new Node("Kiwi"); + first = new Node("Blueberry",first); + + //Using an array to add elements into list + String[] fruits = {"Banana", "Cherry"}; + for (String f : fruits) + { + first = new Node(f, first); + } + } + /** + * print method + * traverses the list and prints all elements + */ + public void print() + { + Node reference = first; + while(reference != null) + { + System.out.println(reference.value + " "); + reference = reference.next; + } + } + + //Main test method + public static void main(String [] args) + { + LinkedList0 list = new LinkedList0(); + System.out.println("The elements inside this list are "); + list.print(); + } +} diff --git a/group20/1040154728/1040154728Learning/src/SinglyLinkedList2/LinkedList1.java b/group20/1040154728/1040154728Learning/src/SinglyLinkedList2/LinkedList1.java new file mode 100644 index 0000000000..8c93bbc640 --- /dev/null +++ b/group20/1040154728/1040154728Learning/src/SinglyLinkedList2/LinkedList1.java @@ -0,0 +1,242 @@ +package SinglyLinkedList2; +/** + * Created by Honoka on 2/16/2017. + */ +public class LinkedList1 { + private class Node + { + String value; + Node next; + + Node(String val, Node n) + { + value = val; + next = n; + } + Node(String val) + { + //Call the other(daddy(or sister(whatever))) constructor. + this(val, null); + } + } + + private Node first; // head + private Node last; //the last element in list + + public LinkedList1() + { + first = null; + last = null; + } + + /**This method checks to see + * if the list is empty + * @return true if list is empty + */ + public boolean isEmpty() + { + return first == null; + } + + /** + * size method returns the length of the list + * @return The number of the elements in the list + */ + public int size() + { + int counter = 0; + Node p = first; + while (p != null) + { + counter ++; + p = p.next; + } + return counter; + } + + /** + * add method add an element to the end of the list + * @param element the value to add + */ + public void add(String element) + { + if (isEmpty()) + { + //Obviously, add the element to the first position in the list + first = new Node(element); + last = first; + } + else + { + //add to the end of existing list + last.next = new Node(element); + last = last.next; + } + } + + /** + * add method, or you might call it insert method since it can + * add element to a specific position + * @param index The position at which to add the element + * @param element you should know what is this + */ + public void add (int index, String element) + { + if (index < 0 || index > size()) + { + String message = String.valueOf(index); + throw new IndexOutOfBoundsException(message); + } + + //index is at least 0 + if(index == 0) + { + //new element add to the head + first = new Node(element, first); + if (last == null) + { + last = first; + } + return; + } + //set a reference predecessor to point to the node that + //will be the predecessor of the new node + Node predecessor = first; + for (int k = 1; k <= index - 1; k++) + { + predecessor = predecessor.next; + } + //Splice in a node containing the new element + predecessor.next = new Node(element, predecessor.next); + + //if there is a new last element + if(predecessor.next.next == null) + last = predecessor.next; + } + + /** + * toString method, like print method, hopefully it will display the contents of the list + * @return say something I'm giving up on you( + */ + public String toString() + { + StringBuffer strBuilder = new StringBuffer(); + //Use p to walk down the list + Node p = first; + while (p != null) + { + strBuilder.append(p.value + "\n"); + p = p.next; + } + return strBuilder.toString(); + } + + /** + * remove method removes the element with the position you want + * @param index the position of the element that you want to remove + * @return the removed element + */ + public String remove (int index) + { + /* Index out of bounds */ + if (index < 0 || index >= size()) + { + String message = String.valueOf(index); + throw new IndexOutOfBoundsException(message); + } + String element = null; + if(index == 0) + { + //Removal of first item in the list + element = first.value; + first = first.next; + if (first == null) + { + last = null; + } + } + else + { + /* find the predecessor of the element to be removed */ + Node predecessor = first; + + /* Move predecessor forward index - 1 times */ + for (int k = 1; k <= index - 1; k++) + { + predecessor = predecessor.next; + /* Store the value to return */ + element = predecessor.next.value; + /* Route link around the node to be removed */ + predecessor.next = predecessor.next.next; + /* Check if predecessor is now last */ + if(predecessor.next == null) + { + last = predecessor; + } + } + } + return element; + } + + /** + * The remove method removes an element + * @param element the element to remove + * @return true if the remove succeeded + */ + public boolean remove(String element) + { + if (isEmpty()) + { + return false; + } + + if (element.equals(first.value)) + { + //Removal of first element in the list + first = first.next; + if(first == null) + { + last = null; + } + return true; + } + + /* Find the predecessor of the element to remove */ + Node predecessor = first; + while (predecessor.next != null && + !predecessor.next.value.equals(element)) + { + predecessor = predecessor.next; + } + /* predecessor.next == null OR predecessor.next.value is element */ + if(predecessor.next == null) + { + return false; + } + /* predecessor.next.value is element */ + predecessor.next = predecessor.next.next; + + /* check if predecessor is now last */ + if (predecessor.next == null) + { + last = predecessor; + } + return true; + } + + public static void main (String [] args) + { + LinkedList1 testList = new LinkedList1(); + testList.add("Apple"); + testList.add("Banana"); + testList.add(0,"Blueberry"); + testList.add(2,"Cherry"); + testList.add(4,"Peach"); + System.out.println("The list has : "); + System.out.println(testList); + testList.remove("Cherry"); + testList.remove(2); + System.out.println("The list has : "); + System.out.println(testList); + } +} From af1bebe261e13c594d40b821d5d4c776ecf5e147 Mon Sep 17 00:00:00 2001 From: Administrator Date: Thu, 23 Feb 2017 14:16:18 +0800 Subject: [PATCH 008/216] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E8=87=AA=E5=B7=B1?= =?UTF-8?q?=E7=9A=84=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/com/coding/basic/ArrayList.java | 32 +++++++++++++ .../src/com/coding/basic/BinaryTreeNode.java | 32 +++++++++++++ .../src/com/coding/basic/Iterator.java | 7 +++ .../src/com/coding/basic/LinkedList.java | 46 +++++++++++++++++++ .../423184723/src/com/coding/basic/List.java | 9 ++++ .../423184723/src/com/coding/basic/Queue.java | 19 ++++++++ .../423184723/src/com/coding/basic/Stack.java | 22 +++++++++ 7 files changed, 167 insertions(+) create mode 100644 group20/423184723/src/com/coding/basic/ArrayList.java create mode 100644 group20/423184723/src/com/coding/basic/BinaryTreeNode.java create mode 100644 group20/423184723/src/com/coding/basic/Iterator.java create mode 100644 group20/423184723/src/com/coding/basic/LinkedList.java create mode 100644 group20/423184723/src/com/coding/basic/List.java create mode 100644 group20/423184723/src/com/coding/basic/Queue.java create mode 100644 group20/423184723/src/com/coding/basic/Stack.java diff --git a/group20/423184723/src/com/coding/basic/ArrayList.java b/group20/423184723/src/com/coding/basic/ArrayList.java new file mode 100644 index 0000000000..1f185736f9 --- /dev/null +++ b/group20/423184723/src/com/coding/basic/ArrayList.java @@ -0,0 +1,32 @@ +package com.coding.basic; + +public class ArrayList implements List { + + private int size = 0; + + private Object[] elementData = new Object[100]; + + public void add(Object o){ + + } + public void add(int index, Object o){ + + } + + public Object get(int index){ + return null; + } + + public Object remove(int index){ + return null; + } + + public int size(){ + return -1; + } + + public Iterator iterator(){ + return null; + } + +} diff --git a/group20/423184723/src/com/coding/basic/BinaryTreeNode.java b/group20/423184723/src/com/coding/basic/BinaryTreeNode.java new file mode 100644 index 0000000000..d7ac820192 --- /dev/null +++ b/group20/423184723/src/com/coding/basic/BinaryTreeNode.java @@ -0,0 +1,32 @@ +package com.coding.basic; + +public class BinaryTreeNode { + + private Object data; + private BinaryTreeNode left; + private BinaryTreeNode right; + + 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){ + return null; + } + +} diff --git a/group20/423184723/src/com/coding/basic/Iterator.java b/group20/423184723/src/com/coding/basic/Iterator.java new file mode 100644 index 0000000000..06ef6311b2 --- /dev/null +++ b/group20/423184723/src/com/coding/basic/Iterator.java @@ -0,0 +1,7 @@ +package com.coding.basic; + +public interface Iterator { + public boolean hasNext(); + public Object next(); + +} diff --git a/group20/423184723/src/com/coding/basic/LinkedList.java b/group20/423184723/src/com/coding/basic/LinkedList.java new file mode 100644 index 0000000000..e2c4e5e795 --- /dev/null +++ b/group20/423184723/src/com/coding/basic/LinkedList.java @@ -0,0 +1,46 @@ +package com.coding.basic; + +public class LinkedList implements List { + + private Node head; + + public void add(Object o){ + + } + public void add(int index , Object o){ + + } + public Object get(int index){ + return null; + } + public Object remove(int index){ + return null; + } + + public int size(){ + return -1; + } + + public void addFirst(Object o){ + + } + public void addLast(Object o){ + + } + public Object removeFirst(){ + return null; + } + public Object removeLast(){ + return null; + } + public Iterator iterator(){ + return null; + } + + + private static class Node{ + Object data; + Node next; + + } +} diff --git a/group20/423184723/src/com/coding/basic/List.java b/group20/423184723/src/com/coding/basic/List.java new file mode 100644 index 0000000000..10d13b5832 --- /dev/null +++ b/group20/423184723/src/com/coding/basic/List.java @@ -0,0 +1,9 @@ +package com.coding.basic; + +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(); +} diff --git a/group20/423184723/src/com/coding/basic/Queue.java b/group20/423184723/src/com/coding/basic/Queue.java new file mode 100644 index 0000000000..36e516e266 --- /dev/null +++ b/group20/423184723/src/com/coding/basic/Queue.java @@ -0,0 +1,19 @@ +package com.coding.basic; + +public class Queue { + + public void enQueue(Object o){ + } + + public Object deQueue(){ + return null; + } + + public boolean isEmpty(){ + return false; + } + + public int size(){ + return -1; + } +} diff --git a/group20/423184723/src/com/coding/basic/Stack.java b/group20/423184723/src/com/coding/basic/Stack.java new file mode 100644 index 0000000000..a5a04de76d --- /dev/null +++ b/group20/423184723/src/com/coding/basic/Stack.java @@ -0,0 +1,22 @@ +package com.coding.basic; + +public class Stack { + private ArrayList elementData = new ArrayList(); + + public void push(Object o){ + } + + public Object pop(){ + return null; + } + + public Object peek(){ + return null; + } + public boolean isEmpty(){ + return false; + } + public int size(){ + return -1; + } +} From f79d519ce32fa46321510755469a88d6f49d3938 Mon Sep 17 00:00:00 2001 From: mengxz <82427129@qq.com> Date: Thu, 23 Feb 2017 14:23:14 +0800 Subject: [PATCH 009/216] first commit by Walker --- group17/82427129/.gitignore | 7 ++ group17/82427129/JavaUtil/pom.xml | 27 +++++ .../main/java/com/coding/basic/ArrayList.java | 100 ++++++++++++++++++ .../java/com/coding/basic/BinaryTreeNode.java | 32 ++++++ .../main/java/com/coding/basic/Iterator.java | 7 ++ .../java/com/coding/basic/LinkedList.java | 97 +++++++++++++++++ .../src/main/java/com/coding/basic/List.java | 9 ++ .../src/main/java/com/coding/basic/Queue.java | 19 ++++ .../src/main/java/com/coding/basic/Stack.java | 22 ++++ 9 files changed, 320 insertions(+) create mode 100644 group17/82427129/.gitignore create mode 100644 group17/82427129/JavaUtil/pom.xml create mode 100644 group17/82427129/JavaUtil/src/main/java/com/coding/basic/ArrayList.java create mode 100644 group17/82427129/JavaUtil/src/main/java/com/coding/basic/BinaryTreeNode.java create mode 100644 group17/82427129/JavaUtil/src/main/java/com/coding/basic/Iterator.java create mode 100644 group17/82427129/JavaUtil/src/main/java/com/coding/basic/LinkedList.java create mode 100644 group17/82427129/JavaUtil/src/main/java/com/coding/basic/List.java create mode 100644 group17/82427129/JavaUtil/src/main/java/com/coding/basic/Queue.java create mode 100644 group17/82427129/JavaUtil/src/main/java/com/coding/basic/Stack.java diff --git a/group17/82427129/.gitignore b/group17/82427129/.gitignore new file mode 100644 index 0000000000..e0db6fed9c --- /dev/null +++ b/group17/82427129/.gitignore @@ -0,0 +1,7 @@ +/.metadata/ +/RemoteSystemsTempFiles/ + +/JavaUtil/.settings/ + +.classpath +.project diff --git a/group17/82427129/JavaUtil/pom.xml b/group17/82427129/JavaUtil/pom.xml new file mode 100644 index 0000000000..6c95dbb077 --- /dev/null +++ b/group17/82427129/JavaUtil/pom.xml @@ -0,0 +1,27 @@ + + 4.0.0 + com.coding.basic + JavaUtil + 0.0.1-SNAPSHOT + + + + org.apache.maven.plugins + maven-compiler-plugin + + 1.7 + 1.7 + + + + + + + junit + junit + 4.7 + test + + + \ No newline at end of file diff --git a/group17/82427129/JavaUtil/src/main/java/com/coding/basic/ArrayList.java b/group17/82427129/JavaUtil/src/main/java/com/coding/basic/ArrayList.java new file mode 100644 index 0000000000..07f92770c9 --- /dev/null +++ b/group17/82427129/JavaUtil/src/main/java/com/coding/basic/ArrayList.java @@ -0,0 +1,100 @@ +package com.coding.basic; + +import java.util.Arrays; + +public class ArrayList implements List { + + private int size = 0; + + private Object[] elementData; + + private static Object[] EMPTY_ELEMENTDATA = {}; + + private static int INITIALCAPACITY = 10; + + public ArrayList(){ + elementData = EMPTY_ELEMENTDATA; + } + + public ArrayList(int initialCapacity){ + elementData = new Object[INITIALCAPACITY]; + } + + public void add(Object o){ + ensureCapacity(size+1); + elementData[size++] = o; + } + + public void add(int index, Object o){ + rangeCheckForAdd(index); + + ensureCapacity(size+1); + System.arraycopy(elementData, index, elementData, index+1, size-index); + elementData[index] = o; + size++; + } + + public Object set(int index, Object o){ + rangeCheck(index); + + Object oldValue = elementData[index]; + elementData[index] = o; + return oldValue; + } + + public Object get(int index){ + rangeCheck(index); + return elementData[index]; + } + + public Object remove(int index){ + rangeCheck(index); + Object oldValue = elementData[index]; + int movedLength = size - index - 1; + if(movedLength > 0)//ҪɾһԪʱҪƶ飬ֻҪһԪnull + System.arraycopy(elementData, index+1, elementData, index, size-index-1); + elementData[--size] = null; + return oldValue; + } + + private void rangeCheckForAdd(int index){ + if( index > size || index<0 ){ + throw new IndexOutOfBoundsException(outofIndex(index)); + } + } + private void rangeCheck(int index){ + if( index >= size || index < 0){ + throw new IndexOutOfBoundsException(outofIndex(index)); + } + } + + public int size(){ + return size; + } + + public Iterator iterator(){ + return null; + } + + private void ensureCapacity(int minCapacity){ + if(elementData == EMPTY_ELEMENTDATA){ + minCapacity = Math.max(minCapacity, INITIALCAPACITY);//addall״ӵͱINITIALCAPACITY + } + if(minCapacity - elementData.length > 0){ + grow(minCapacity); + } + } + + private void grow(int minCapcity){ + int oldCapacity = elementData.length; + int newCapcity = oldCapacity + (oldCapacity>>1); + if(newCapcity - minCapcity < 0){ + newCapcity = minCapcity; + } + elementData = Arrays.copyOf(elementData, newCapcity); + } + + private String outofIndex(int index){ + return "Index: "+index+", Size: "+size; + } +} diff --git a/group17/82427129/JavaUtil/src/main/java/com/coding/basic/BinaryTreeNode.java b/group17/82427129/JavaUtil/src/main/java/com/coding/basic/BinaryTreeNode.java new file mode 100644 index 0000000000..d7ac820192 --- /dev/null +++ b/group17/82427129/JavaUtil/src/main/java/com/coding/basic/BinaryTreeNode.java @@ -0,0 +1,32 @@ +package com.coding.basic; + +public class BinaryTreeNode { + + private Object data; + private BinaryTreeNode left; + private BinaryTreeNode right; + + 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){ + return null; + } + +} diff --git a/group17/82427129/JavaUtil/src/main/java/com/coding/basic/Iterator.java b/group17/82427129/JavaUtil/src/main/java/com/coding/basic/Iterator.java new file mode 100644 index 0000000000..06ef6311b2 --- /dev/null +++ b/group17/82427129/JavaUtil/src/main/java/com/coding/basic/Iterator.java @@ -0,0 +1,7 @@ +package com.coding.basic; + +public interface Iterator { + public boolean hasNext(); + public Object next(); + +} diff --git a/group17/82427129/JavaUtil/src/main/java/com/coding/basic/LinkedList.java b/group17/82427129/JavaUtil/src/main/java/com/coding/basic/LinkedList.java new file mode 100644 index 0000000000..f651ddabe0 --- /dev/null +++ b/group17/82427129/JavaUtil/src/main/java/com/coding/basic/LinkedList.java @@ -0,0 +1,97 @@ +package com.coding.basic; + +public class LinkedList implements List { + private int size = 0; + + private Node first; + + private Node last; + + public static int getFirst(LinkedList l){ + return l.size; + } + + public void add(Object o){ + + } + public void add(int index , Object o){ + rangeCheck(index); + + final Node succ = indexOf(index); + Node newNode = new Node(succ.prev, o, succ); + succ.prev = newNode; + if(index == size){ + last = newNode; + }else{ + newNode.next = indexOf(index); + indexOf(index).prev = newNode; + } + size++; + } + private void rangeCheck(int index) { + if(index > size|| index < 0 ) + throw new IndexOutOfBoundsException("Size"+size+":index"+index); + } + /** + * ѭȡindex± + * @param index + * @return + */ + private Node indexOf(int index){ + if(index < (this.size>>1) ){ + Node x = first; + for (int i = 0; i < index; i++) { + x = x.next; + } + return x; + }else{ + Node x = last; + for (int i = this.size-1; i > index; i--) { + x = x.prev; + } + return x; + } + } + + public Object get(int index){ + return null; + } + public Object remove(int index){ + return null; + } + + public int size(){ + return size; + } + + public void addFirst(Object o){ + + } + + public void addLast(Object o){ + + } + + public Object removeFirst(){ + return null; + } + + public Object removeLast(){ + return null; + } + + public Iterator iterator(){ + return null; + } + + private class Node{ + Object data; + Node next; + Node prev; + Node(Node prev,Object data,Node next){ + this.data = data; + this.next = next; + this.prev = prev; + } + } +} \ No newline at end of file diff --git a/group17/82427129/JavaUtil/src/main/java/com/coding/basic/List.java b/group17/82427129/JavaUtil/src/main/java/com/coding/basic/List.java new file mode 100644 index 0000000000..10d13b5832 --- /dev/null +++ b/group17/82427129/JavaUtil/src/main/java/com/coding/basic/List.java @@ -0,0 +1,9 @@ +package com.coding.basic; + +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(); +} diff --git a/group17/82427129/JavaUtil/src/main/java/com/coding/basic/Queue.java b/group17/82427129/JavaUtil/src/main/java/com/coding/basic/Queue.java new file mode 100644 index 0000000000..36e516e266 --- /dev/null +++ b/group17/82427129/JavaUtil/src/main/java/com/coding/basic/Queue.java @@ -0,0 +1,19 @@ +package com.coding.basic; + +public class Queue { + + public void enQueue(Object o){ + } + + public Object deQueue(){ + return null; + } + + public boolean isEmpty(){ + return false; + } + + public int size(){ + return -1; + } +} diff --git a/group17/82427129/JavaUtil/src/main/java/com/coding/basic/Stack.java b/group17/82427129/JavaUtil/src/main/java/com/coding/basic/Stack.java new file mode 100644 index 0000000000..a5a04de76d --- /dev/null +++ b/group17/82427129/JavaUtil/src/main/java/com/coding/basic/Stack.java @@ -0,0 +1,22 @@ +package com.coding.basic; + +public class Stack { + private ArrayList elementData = new ArrayList(); + + public void push(Object o){ + } + + public Object pop(){ + return null; + } + + public Object peek(){ + return null; + } + public boolean isEmpty(){ + return false; + } + public int size(){ + return -1; + } +} From 954c7778e8f16531df2c0379180426e44f20db5a Mon Sep 17 00:00:00 2001 From: shaofriend <452472201@qq.com> Date: Thu, 23 Feb 2017 14:27:25 +0800 Subject: [PATCH 010/216] =?UTF-8?q?=E9=87=8D=E6=96=B0=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- group20/452472201/.gitignore | 1 + .../src/com/coding/basic/ArrayList.java | 98 +++++++++++++++++++ .../src/com/coding/basic/BinaryTreeNode.java | 32 ++++++ .../src/com/coding/basic/Iterator.java | 9 ++ .../src/com/coding/basic/LinkedList.java | 46 +++++++++ .../452472201/src/com/coding/basic/List.java | 9 ++ .../452472201/src/com/coding/basic/Queue.java | 19 ++++ .../452472201/src/com/coding/basic/Stack.java | 22 +++++ 8 files changed, 236 insertions(+) create mode 100644 group20/452472201/.gitignore create mode 100644 group20/452472201/src/com/coding/basic/ArrayList.java create mode 100644 group20/452472201/src/com/coding/basic/BinaryTreeNode.java create mode 100644 group20/452472201/src/com/coding/basic/Iterator.java create mode 100644 group20/452472201/src/com/coding/basic/LinkedList.java create mode 100644 group20/452472201/src/com/coding/basic/List.java create mode 100644 group20/452472201/src/com/coding/basic/Queue.java create mode 100644 group20/452472201/src/com/coding/basic/Stack.java diff --git a/group20/452472201/.gitignore b/group20/452472201/.gitignore new file mode 100644 index 0000000000..ae3c172604 --- /dev/null +++ b/group20/452472201/.gitignore @@ -0,0 +1 @@ +/bin/ diff --git a/group20/452472201/src/com/coding/basic/ArrayList.java b/group20/452472201/src/com/coding/basic/ArrayList.java new file mode 100644 index 0000000000..1af26ce934 --- /dev/null +++ b/group20/452472201/src/com/coding/basic/ArrayList.java @@ -0,0 +1,98 @@ +package com.coding.basic; + +public class ArrayList implements List { + + private int size=0; + + private Object[] elementData =new Object[10]; + + + //数组扩容 + private void ensureCapacityInternal(){ + if(size==elementData.length){ + Object[] newArray = new Object[size*2]; + System.arraycopy(elementData, 0, newArray, 0, elementData.length); + elementData=newArray; + } + } + + public void add(Object o){ + ensureCapacityInternal(); + elementData[size]=o; + size++; + } + + public void add(int index, Object o){ + ensureCapacityInternal(); + if(index<0){ + try { + throw new Exception(); + } catch (Exception e) { + e.printStackTrace(); + } + } + + System.arraycopy(elementData, index, elementData, index+1,size-index ); + elementData[index]=o; + size++; + } + + public Object get(int index){ + if(index<0||index>=size){ + try { + throw new Exception(); + } catch (Exception e) { + e.printStackTrace(); + } + } + return elementData[index]; + } + + public Object remove(int index){ + if(index>=size){ + try { + throw new Exception(); + } catch (Exception e) { + e.printStackTrace(); + } + }else{ + + int numMoved=size-index-1; + if(numMoved>0){ + System.arraycopy(elementData, index+1, elementData, index, numMoved); + } + + elementData[size--] = null; + } + return index; + + } + + + public int size(){ + return size; + } + + + private class Iter implements Iterator { + //计数器 + private int coursor=-1; + //判断是否存在下一个 + public boolean hasNext(){ + return coursor+1 Date: Thu, 23 Feb 2017 14:40:34 +0800 Subject: [PATCH 011/216] --- group17/102228177/.classpath | 6 + group17/102228177/.project | 17 +++ .../102228177/bin/data2_19/ArrayList.class | Bin 0 -> 2476 bytes .../bin/data2_19/BinaryTreeNode.class | Bin 0 -> 2283 bytes group17/102228177/bin/data2_19/Iterator.class | Bin 0 -> 168 bytes .../bin/data2_19/LinkedList$Node.class | Bin 0 -> 589 bytes .../102228177/bin/data2_19/LinkedList.class | Bin 0 -> 2573 bytes group17/102228177/bin/data2_19/List.class | Bin 0 -> 245 bytes group17/102228177/bin/data2_19/Queue.class | Bin 0 -> 1390 bytes group17/102228177/bin/data2_19/Stack.class | Bin 0 -> 1520 bytes group17/102228177/src/data2_19/ArrayList.java | 116 ++++++++++++++ .../src/data2_19/BinaryTreeNode.java | 74 +++++++++ group17/102228177/src/data2_19/Iterator.java | 8 + .../102228177/src/data2_19/LinkedList.java | 142 ++++++++++++++++++ group17/102228177/src/data2_19/List.java | 9 ++ group17/102228177/src/data2_19/Queue.java | 38 +++++ group17/102228177/src/data2_19/Stack.java | 44 ++++++ 17 files changed, 454 insertions(+) create mode 100644 group17/102228177/.classpath create mode 100644 group17/102228177/.project create mode 100644 group17/102228177/bin/data2_19/ArrayList.class create mode 100644 group17/102228177/bin/data2_19/BinaryTreeNode.class create mode 100644 group17/102228177/bin/data2_19/Iterator.class create mode 100644 group17/102228177/bin/data2_19/LinkedList$Node.class create mode 100644 group17/102228177/bin/data2_19/LinkedList.class create mode 100644 group17/102228177/bin/data2_19/List.class create mode 100644 group17/102228177/bin/data2_19/Queue.class create mode 100644 group17/102228177/bin/data2_19/Stack.class create mode 100644 group17/102228177/src/data2_19/ArrayList.java create mode 100644 group17/102228177/src/data2_19/BinaryTreeNode.java create mode 100644 group17/102228177/src/data2_19/Iterator.java create mode 100644 group17/102228177/src/data2_19/LinkedList.java create mode 100644 group17/102228177/src/data2_19/List.java create mode 100644 group17/102228177/src/data2_19/Queue.java create mode 100644 group17/102228177/src/data2_19/Stack.java diff --git a/group17/102228177/.classpath b/group17/102228177/.classpath new file mode 100644 index 0000000000..d171cd4c12 --- /dev/null +++ b/group17/102228177/.classpath @@ -0,0 +1,6 @@ + + + + + + diff --git a/group17/102228177/.project b/group17/102228177/.project new file mode 100644 index 0000000000..350a2aab85 --- /dev/null +++ b/group17/102228177/.project @@ -0,0 +1,17 @@ + + + 102228177 + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git a/group17/102228177/bin/data2_19/ArrayList.class b/group17/102228177/bin/data2_19/ArrayList.class new file mode 100644 index 0000000000000000000000000000000000000000..160f55d10fa8674cee37a60ff17a26ee731d2486 GIT binary patch literal 2476 zcmZuzTXz#x7~Q8yGijL8(v~zeEq8620F@L)2vpnBVkA%?rBG2}nhaq|G82*swRXU^r@``h0o`SagjegiOts)jCs zfui9W>6^z+PR`V7#-p57cQphB`qzy6#$?&BOOuPMYi5C~A%Wi3X?ai}R5WkrOj|%? zxjE<9b=R=nWux3M0|bc(gw3*9F>SXlFnA-k*=R-}ShpUVv{W%3Dodf$mTkGy0)fQD zGPmcPq8UK|gF5=q-vfc&I(iY7vtb=Oz1fJ49nb~(a+YmgY*bdw+LEzars08{Q!vWQ zM$MAn{$kL*W0BENuH{e5dr}G*#Uf!6Tj@?LM+m!L#{u+{TdC$epzn@E*~YcrylWKh zUNEW(HG*+WXh>|(Hvg#ZniU;Mqy%~l8G?dSeI$_F20gnKB%75Yg>3Ty9T12nwmBnD z2#e1eT`QRk+wMemVyi6;Qv!*$A4-y}T{IsqHr&PAvrfY<*5@A<%&KcSb_8h*3UpiY z04dbWigTZOGi=O-V8yVQ7STj!%=2!|vP&6H#K8zoV_L%*fn9CPtnHd5v!>%id?cXV zmzlJ9TRGOr*guw$(U{e-2Yco0tehQ@vjrXR<5&+B|5!&BpOBW*kdAv^Th8PqQgKPh zG%6VlIp$KEgvWEXVU>$!ErN@f7E`d&tG9(kFwOPf-ur9v1oFsJ0f z>pE8ODOEJ8Rnunj9qA1J|2H~9wt=FO;WHiY;+Qn{g*0|^lMSzkGo2!Cws9VYj#U&` zw65cAvP2SFuMp2fNdx0Ds8rjir;a<)X{{M4=D z)2J291xr@%&Q@I>l}Ol6V*x(h2x0^p!kqW8({v%ihb=(O*&fu$=D<;&Ve8;~7r*j6 zCpeBIpJN~yc!r^5f8-gWeE$l5#(q*)-{Lz;7|?u>#(QYIkLF`^B+gacGlEf!@k_`Q z^a1XXU>Da8C7;svQ$*LH5o;f(F}ak=Cs#NGZxLEz1<=MCBFb*!4AZ$74)QIrqMkh; zi_F?E2Y>ex%v0yQs z|0*EH;@`e`B^Tm{x78@gIDn{O;`QPv6`CZQDQaT5=qH4NXWXSxdf8U-F#%F&mG6jUCFbb?kVF^vZJ_|2=SK zRC@OfB8qqViFm@Jogtl}NV62{EM=M}%sEAEpJ%c~Z5;0@YEeorNp>kh-3aKKWW#3W zv-yDvOE&Y{v5BAYWtF62qrqF0wM!_5!Q%RxzrDmOdLfC$(`~MMSWCcVa=k*XOO)j* zo97aRy@qLA@8CS&;ymBtyhn-Xab~&b+H3xWki1#+KJQ76Qu%Hv*N>cZsk9HNMMK&5 zN~+tp-@_oD^e?|+Af?mwmk^ZwR4x^GflL!Ksh~f0`(wx-HGk|6^?OTmsZbO1*8)^% z{AZkdiSsL?FL2>Gt_)ml;#z97i5pFP-o&jYic+*x6W02hzuFa=rZ`}03&Ucutug!V zvP#NGpu%jik%7bPt6~B7P~uoay+gJ-PnUT=%(23rAuvbL+M#Cq`UeXdggD4OTM6X+ E2NA{D7XSbN literal 0 HcmV?d00001 diff --git a/group17/102228177/bin/data2_19/BinaryTreeNode.class b/group17/102228177/bin/data2_19/BinaryTreeNode.class new file mode 100644 index 0000000000000000000000000000000000000000..9088822d4f510ff17ba4e41b87e6b2ce5d786435 GIT binary patch literal 2283 zcmaKs%TF6u6vn@68ylM;fO!Q12{>)>D>#Iv36Iba9to|%Z9qg(7u8@UW>Pao!&Kqc0?*3E3rArj-zFPPI&8CaK%4NQX_?NF!eH{lNU2@MS|MHxLG)_S(5Dbg zrgo!H=+_WIr$SHOw2ZCl;htgdcxdr_rKp#8b=#D8e>3D9n8ymLq7W$=&Zulp8`7Mlh7{8DKhTd4q+@QMHWa$I9liM7rheqNA#7U5hRw#`YSr(yz%erBC*CQew8@oGXZmn+{J`;#%;!=kW0Xj0X-W1CiKL6XL(W5aSh^3b7f zS_(tSZyLlbN1PYWGovu&0v-KpBNSZS!okJ7MH zpXSB37qqm1NwNp|>)?MtMvkA8fN0%)Qnh?)Jf}AJe}!-BJP+_0OP`}Boq3D+8`pM# z|5q3V^bXN4O3e@QZOF6cQ)1B%!_2~2#Z`>>F>~%a(2@QX@n2{ZfP@QkTY^d$fuMmO zh9ar~E%`vGC;1d(92o5(<(7lO#v?jcJ-NY)I`!UzryJQM;>lTYxBu|!sV z@1UM%&N022PG`??J6msymu8BZOQMJ0N=Y-}In~ni`MQfzeV;O+sF>e5KgmCSl0qhX zhP$EH7-OO1e<7O5zQy>Pw7f~uQ{-HWfM=2LEfTIp!n5dphkMWCbLUw2LwfIZV&3iM zG!b*?#cd+a5N#GW2$SG9Era{Snd54nt3@p10ameuEj(-}r%)@Wz%%I@Q1Hu<{zcF+ z)HT=@Wtz|F=w0EDM39M{l?HbHhGq6JpXuP@43D2>dWUPP$i*t;FY4ME<=p@)oWoV} ztdV=2jebn#CoZ2i=Cjzq7qrtbg)fD#cbQts`yeS_OVM=ZPbl_Tgwi$cOhBtx8Q2&=RkJTmY$pC1d~q literal 0 HcmV?d00001 diff --git a/group17/102228177/bin/data2_19/LinkedList$Node.class b/group17/102228177/bin/data2_19/LinkedList$Node.class new file mode 100644 index 0000000000000000000000000000000000000000..d788f96bca992ae620f269646337c51396c36dc3 GIT binary patch literal 589 zcmZ`$%Syvg5Ixhz#>Uvz)@rSd**< zp?DOQC;VHh+Z)P$OwiN?Lec(PI^~)#pO{j$=ZP{WbLRSPd`>9W|4TF+7HM;L18FRq z$RbBb*Bee2Y{tX_GU`+`p<|JdXV0=Tdg#gUTJ$`rYz2McIU;mbJWXoxof{D-AXqb+ z&Uf2z4DPm}d>91dDj0=*dEu%?s`YeT2Wk@p^V0Wa*!Dye$wA(j}6&={W?U-;T9a(KfkXVwzw xJj#hE3vea_Du7w*Q}KP~C=;1xYl6zJCi42ooGQMyZ<;GMtGX+A}-~Eo+N&>ari% zf8o`ZCEV=7EgF)UY*&M1cl$S%ExXvo=Av`Y`<+AW2HY%Jnx5}FU%&T#pXYgh^oPH` z`4+$ljQinHIFL0|)6eLm_g*yk#br&D>J*!r~1p!_z8-+KTJN zl7eyFGP4RzsfzP$H(lv`)*9iRqJ76wP}2%kXY8C^8dLE0^v?5_bG#9N7vT_s2-QGg ze+V@Q$nHQ0epD-j3Cv2btt?uFIdgHDp6XKhjJZ5-7HoNU4~^1wyQt8x8xn%>npxs( z=t=#X)=2NXAI%B}_hJx06Iun|A%)~F_PYgisQ1p-(6%jvcHv>pChK%bqT^j_Hr_vzqFRQKDlhISh-RKh#`a(0**h&xv{Kc1TN**3K?t4 zmO7Bia7*^6_*4i@=WC|a4`pf3yx6Gflk5;a0ql!4G*pBafCZB?KR1# zi2Bj=6n;L9KN(Xfz3fu@jsB{5@1h{zgyxg>4jAhQerhO9qrqr4vY#X1(D^yBiB{ns z7yiS(s87zxFcJ0b!E-?8qm9{Wr??%Iwu@|!kWV*@vkSfaBoM<8`Y_I#Jx^uc#4*ix z%t2S?dl5Z4&qS=5d+2e}vIM8nvzLQ z2b=FB*i027pCR}d@r4Z>{Z2%g^^S=cUKJTzj8@FpsAD1ZaS7x9KuOv zV1RiWWZs6DkJIEmOe90hr4whLBx~!tSExGg1vPE-ovRDgW$o~vAnu8>;zl{G6 zhW9b>mA&w9Vq!NMM)r$sBEJZqVIv+joJ=~knq{rZN%DbuL2{T~0-Pnuagsbon6ILZ z3FyESfuARh*O!3Op`d-DBB$eH z46&VtbvvbEeY(nARi(;!P|-(Cy5mMrHJN5mgc?z@!vLxTB;Qh&_0_@qManKFYxUHXder*!FiXi-m#?HL|| a5#Db82-%M^st03ug{%DMHSv2EfxiLg>#O$w literal 0 HcmV?d00001 diff --git a/group17/102228177/bin/data2_19/List.class b/group17/102228177/bin/data2_19/List.class new file mode 100644 index 0000000000000000000000000000000000000000..a8d53da1d256bb79a3144df15a71a38b20709614 GIT binary patch literal 245 zcmZvX%L;-}5QhKBTiSJF&v4u%)hgNtg3uyp8z()8VhL(4dbAcjKo1p-(yH3b2lLM` z-#lOU2Y?kO7J7tHENi(uF4lgSR<#A4FwJBm{ajuWe|O4MR1-8A#{^e|-_gc95N0Cy zA83i>} z!c~EenA4;vLtHvDaMVE2`V91=SD>jP%kH*(Xjc?5?uOdxc6GYEc31_m$r!u4ZT@`0vQ>!N~qVa(NG}U(uG0ensk&@7BR@J2ZazqBvTJNfXh@9V2kY z37q6gD3L?(9KjLprLtepmaC&XyZi+y?bScnq@SZfU^7D`ePn0g79t5i56%)Qlt3YT zK7^+gypHo`051}r`^caXsH6jW8|m#FsYCR1NN->P7eYGw8qz2IXh0L`sSk*0yU|_Z zqCQl~2f80r-xR_!zKu{1oLvrC`H&S;EJX=Y3n<-(D6x>zh#W45&hKfhG#vc_!MOgSljDGh=Ii7oWp^0TWy?1x-^PF>@^E@~I{QL4R0GDy!#*{#=?MCjU?=N1d zHzT+8#D*m>``F!c>s{CH)VFsZt5zhCRbACnesrDD0`ra6S=YkQ-EVk|3f63VDlm8G!w+#f`$CvhE{6c!Arx)|&6g8Chbi6}|A zJ%jU=#Az%!*uqU4-v|_ps>wi!hVG%=*STFfBXC>d9F|zI8+JGvg*Ox|kRIq;AmB8E zVc1ePJUwBKG4O(>!4i>DygyU?<7k>E4kmY-C!A@nS-#z5l;B>hzJRPAAouVEW}joO zntG1H?8*O8E@fjz6oty0=!M&DSj(dpJA>x!aLQ6&rq;_ zn1Ib0jXCPdlVa9DF2rdGBmwX)P7zdSHxuxk1iYld`CqWwBP=&!iZ&@~zma+hT6)Y; z;66{0#W9Xj!jWScXA=%upKv@#oLQ`nQ2qtk1DvNf7ycfntZSOo7|jXVTVgRM$J|*= zXfBypktaUyO~SIyUHhNaRs4#y^)&VLHRiNAIyHusoy5|=IG6DOSKZ4xca4?SSQ;fZ zAVygpLrEtn8GMM3lH?(yb-z{*AXw+ejhgi*J{e)XmX7y7@CDm=V}!5cr(1kF9FUTk nu@!dmEc= maxLen){ + grow(); + } + elements[size] = o; + size++; + } + + /** + * 数组扩容 + */ + private void grow(){ + maxLen = maxLen + (maxLen >> 1); + Object[] newArr = new Object[maxLen]; + System.arraycopy(elements, 0, newArr, 0, size); + elements = newArr; + } + + /** + * 在指定索引处添加元素 + * @param i 指定索引 + * @param o 添加元素 + */ + public void add(int i,Object o){ + //判断插入位置大于数组实际长度 + if(i > size){ + size = i; + if(size >= maxLen){//数组大小大于数组最大容量则需要扩容 + grow(); + } + } + //插入位置不大于数组实际长度时,将插入位置的元素向后移。 + for (int j = size; j > i ; j++) { + elements[j] = elements[j-1]; + } + elements[i] = o; + size++; + } + + /** + * 获取传入索引的元素 + * @param index 索引 + * @return 返回传入索引的元素 + */ + public Object get(int index){ + //索引不在实际范围内 + if(index < 0||index >= size){ + throw new ArrayIndexOutOfBoundsException(); + } + for (int i = 0; i < size; i++) { + return elements[index]; + } + return null; + } + + /** + * 删除指定索引元素并返回 + * @param index + * @return 该索引处元素 + */ + public Object remove(int index){ + //索引不在实际范围内 + if(index < 0||index >= size){ + throw new ArrayIndexOutOfBoundsException(); + }else{ + for (int j = index; j < size-1; j++) { + elements[j]=elements[j+1]; + } + size--; + return elements[index]; + } + } + + /** + * 获取大小 + * @return + */ + public int size(){ + return size; + } + +// public Iterator iterator(){ +// return null; +// } + public static void main(String[] args) { + ArrayList list = new ArrayList(); + list.add(0); + list.add(1); + list.add(2); + list.add(3); + list.add(4); + list.add(6, 6); + list.remove(3); + for (int i = 0; i < list.size(); i++) { + System.out.println(i+":"+list.get(i)); + } + } +} diff --git a/group17/102228177/src/data2_19/BinaryTreeNode.java b/group17/102228177/src/data2_19/BinaryTreeNode.java new file mode 100644 index 0000000000..6b091c87b3 --- /dev/null +++ b/group17/102228177/src/data2_19/BinaryTreeNode.java @@ -0,0 +1,74 @@ +package data2_19; + +public class BinaryTreeNode implements Comparable{ + + private Object data; + private BinaryTreeNode left; + private BinaryTreeNode right; + + public BinaryTreeNode(Object o) { + this.data = o; + } + + 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; + } + + @Override + public int compareTo(BinaryTreeNode o) { + return (this.data.hashCode() < o.data.hashCode()) ? -1 : + ((this.data.hashCode() == o.data.hashCode()) ? 0 : 1); + } + + public BinaryTreeNode insert(Object o){ + BinaryTreeNode node = new BinaryTreeNode(o); + insertNode(this,node); + return node; + } + + private void insertNode(BinaryTreeNode parentNode, BinaryTreeNode node) { + //父节点大于添加元素 + if(parentNode.compareTo(node) == 1){ + if(parentNode.left == null){ + parentNode.left = node; + return; + } + insertNode(parentNode.left, node); + } + //父节点小于添加元素 + else + if(parentNode.compareTo(node) == -1){ + if(parentNode.right == null){ + parentNode.right = node; + return; + } + insertNode(parentNode.right, node); + }else{ + throw new RuntimeException("No duplicate vertex allowed!"); + } + } + + public static void main(String[] args) { + BinaryTreeNode tree = new BinaryTreeNode(5); + tree.insert(2); + tree.insert(23); + tree.insert(7); + tree.insert(1); + } + +} \ No newline at end of file diff --git a/group17/102228177/src/data2_19/Iterator.java b/group17/102228177/src/data2_19/Iterator.java new file mode 100644 index 0000000000..6d1fd8a2e3 --- /dev/null +++ b/group17/102228177/src/data2_19/Iterator.java @@ -0,0 +1,8 @@ +package data2_19; + +public interface Iterator { + + public boolean hasNext(); + public Object next(); + +} \ No newline at end of file diff --git a/group17/102228177/src/data2_19/LinkedList.java b/group17/102228177/src/data2_19/LinkedList.java new file mode 100644 index 0000000000..87613d0704 --- /dev/null +++ b/group17/102228177/src/data2_19/LinkedList.java @@ -0,0 +1,142 @@ +package data2_19; + +import java.util.NoSuchElementException; + +public class LinkedList implements List { + + private Node head; + private int size; + + public LinkedList(){ + size = 0; + head = null; + } + + public void add(Object o){ + Node node = new Node(o); + if(head == null){ + head = node; + }else{ + //p为游标 从头遍历到尾 + Node p = head; + while(p.next != null){ + p = p.next; + } + p.next = node; + } + size++; + } + + public void add(int index , Object o){ + //判断不为空链表 + if(head != null){ + Node p = head; + int k = 0; + //扫描单链表查找第index-1个节点 + while(k < index-1 && p.next != null){ + k++; + p = p.next; + } + //判断是否找到第index-1个节点 + if(p != null){ + Node node = new Node(o); + node.next = p.next; + p.next = node; + } + size++; + } + } + + public Object get(int index){ + if(index <0 || index >= size){ + throw new IndexOutOfBoundsException(); + }else{ + Node p = head; + int k = 0; + while(k < index && p.next != null){ + k++; + p = p.next; + } + return p.data; + } + } + public Object remove(int index){ + if(index <0 || index >= size){ + throw new IndexOutOfBoundsException(); + }else{ + if(head != null){ + Node p = head; + int k = 0; + while(k > index-1 && p.next != null){ + k++; + p = p.next; + } + Node next = p.next; + p.next = next.next; + size--; + return next.data; + } + } + return null; + } + + public int size(){ + return size; + } + + public void addFirst(Object o){ + Node node = new Node(o); + node.next = head; + head = node; + size++; + } + + public void addLast(Object o){ + Node node = new Node(o); + if(head == null){ + head = node; + }else{ + Node p = head; + while(p.next != null){ + p = p.next; + } + p.next = node; + } + size++; + } + + public Object removeFirst(){ + if(head == null){ + throw new NoSuchElementException(); + } + Node node = head; + head = node.next; + size--; + return node.data; + } + public Object removeLast(){ + if(head == null){ + throw new NoSuchElementException(); + }else{ + Node p = head; + int k = 0; + while(k < size-1 && p.next != null){ + k++; + p = p.next; + } + Node last = p.next; + p.next = null; + size--; + return last.data; + } + } + + private static class Node{ + Object data; + Node next; + private Node(Object o){ + this.data = o; + this.next = null; + } + } +} \ No newline at end of file diff --git a/group17/102228177/src/data2_19/List.java b/group17/102228177/src/data2_19/List.java new file mode 100644 index 0000000000..95c32f3b27 --- /dev/null +++ b/group17/102228177/src/data2_19/List.java @@ -0,0 +1,9 @@ +package data2_19; + +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(); +} \ No newline at end of file diff --git a/group17/102228177/src/data2_19/Queue.java b/group17/102228177/src/data2_19/Queue.java new file mode 100644 index 0000000000..e945f4a67a --- /dev/null +++ b/group17/102228177/src/data2_19/Queue.java @@ -0,0 +1,38 @@ +package data2_19; +public class Queue { + + private LinkedList linkedList = new LinkedList(); + private int elementCount; + + public Queue() { + this.elementCount = 0; + } + + public void enQueue(Object o){ + linkedList.addLast(o); + elementCount++; + } + + public Object deQueue(){ + Object object = linkedList.removeFirst(); + elementCount--; + return object; + } + + public boolean isEmpty(){ + return elementCount == 0; + } + + public int size(){ + return elementCount; + } + + public static void main(String[] args) { + Queue queue = new Queue(); + queue.enQueue(2); + queue.enQueue(3); + System.out.println(queue.isEmpty()); + System.out.println(queue.size()); + System.out.println(queue.deQueue()); + } +} \ No newline at end of file diff --git a/group17/102228177/src/data2_19/Stack.java b/group17/102228177/src/data2_19/Stack.java new file mode 100644 index 0000000000..2b17605631 --- /dev/null +++ b/group17/102228177/src/data2_19/Stack.java @@ -0,0 +1,44 @@ +package data2_19; + +import java.util.EmptyStackException; + +public class Stack { + private ArrayList elementData; + private int elementCount; + + public Stack() { + this.elementData = new ArrayList(); + this.elementCount = 0; + } + public void push(Object o){ + elementData.add(o); + elementCount++; + } + + public Object pop(){ + Object object = elementData.remove(elementCount-1); + elementCount--; + return object; + } + + public Object peek(){ + if(isEmpty()){ + throw new EmptyStackException(); + } + return elementData.get(elementCount-1); + } + public boolean isEmpty(){ + return elementCount==0; + } + public int size(){ + return elementCount; + } + public static void main(String[] args) { + Stack stack = new Stack(); + stack.push(1); + stack.push(2); + System.out.println(stack.pop()); + System.out.println(stack.peek()); + + } +} \ No newline at end of file From 0ef1bac0f1b8cf72f13c5e4d14bdfdd9f4197f09 Mon Sep 17 00:00:00 2001 From: leijing Date: Thu, 23 Feb 2017 14:59:10 +0800 Subject: [PATCH 012/216] =?UTF-8?q?=E5=88=9B=E5=BB=BA764189149=E7=9A=84?= =?UTF-8?q?=E7=9B=AE=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 创建764189149的目录 --- group07/764189149/.classpath | 6 + group07/764189149/.gitignore | 23 ++ group07/764189149/.project | 17 ++ .../src/firstHomeWork/util/ArrayList.java | 197 ++++++++++++++++++ .../src/firstHomeWork/util/Iterator.java | 30 +++ .../src/firstHomeWork/util/List.java | 87 ++++++++ 6 files changed, 360 insertions(+) create mode 100644 group07/764189149/.classpath create mode 100644 group07/764189149/.gitignore create mode 100644 group07/764189149/.project create mode 100644 group07/764189149/src/firstHomeWork/util/ArrayList.java create mode 100644 group07/764189149/src/firstHomeWork/util/Iterator.java create mode 100644 group07/764189149/src/firstHomeWork/util/List.java diff --git a/group07/764189149/.classpath b/group07/764189149/.classpath new file mode 100644 index 0000000000..fb5011632c --- /dev/null +++ b/group07/764189149/.classpath @@ -0,0 +1,6 @@ + + + + + + diff --git a/group07/764189149/.gitignore b/group07/764189149/.gitignore new file mode 100644 index 0000000000..8d9372e204 --- /dev/null +++ b/group07/764189149/.gitignore @@ -0,0 +1,23 @@ +# Compiled class file +*.class + +# Log file +*.log + +# BlueJ files +*.ctxt + +# Mobile Tools for Java (J2ME) +.mtj.tmp/ + +# Package Files # +*.jar +*.war +*.ear +*.zip +*.tar.gz +*.rar + +# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml +hs_err_pid* +/bin/ diff --git a/group07/764189149/.project b/group07/764189149/.project new file mode 100644 index 0000000000..2076c6b51c --- /dev/null +++ b/group07/764189149/.project @@ -0,0 +1,17 @@ + + + 764189149Learning + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git a/group07/764189149/src/firstHomeWork/util/ArrayList.java b/group07/764189149/src/firstHomeWork/util/ArrayList.java new file mode 100644 index 0000000000..88b97d828f --- /dev/null +++ b/group07/764189149/src/firstHomeWork/util/ArrayList.java @@ -0,0 +1,197 @@ +package firstHomeWork.util; + +import java.util.NoSuchElementException; + +/** + * @Description: 基于数组的列表 + * @author: leijing + * @date: 2017年2月21日 下午9:03:17 + * @param + */ +public class ArrayList implements List { + private static int initialCapacity = 10 ;//数组默认初始容量 + Object[] elements;//元素的数组 + private int size;//元素的个数 + + public ArrayList(){ + this(initialCapacity); + } + public ArrayList(int capacity){ + elements = new Object[capacity]; + } + private void ensureCapacity(int minCapacity){ + if(minCapacity > 0){ + + } + } + @Override + public boolean add(E e) { + ensureCapacity(size + 1); + elements[size++] = e; + return true; + } + + @Override + public E remove(int index) { + rangeCheck(index); + E oldElement = (E) elements[index]; + //将其后的元素前移 + int needMovedNum = size - index - 1; + move(elements, index+1, elements,index, needMovedNum); + size--; + return oldElement; + } + + /** + * @Description: 移动数组中的元素 + * @param src 原数组 + * @param from 复制元素起始下标 + * @param dest 目标元素数组 + * @param num 要复制的元素个数 + * @return: void + * @author: leijing + * @date: 2017年2月22日 下午7:54:08 + */ + private void move(Object[] src , int srcPosition , Object[] dest , int destPosition, int num){ + for(int i = 0 ; i < num ; i ++){ + dest[destPosition++] = src[srcPosition++]; + } + } + + /** + * @Description: 检查下标是否正确,如果越界抛出异常 + * @param index + * @return: void + * @author: leijing + * @date: 2017年2月22日 下午7:52:59 + */ + private void rangeCheck(int index){ + if(index < 0 || index > size){ + throw new IndexOutOfBoundsException(); + } + } + + @Override + public boolean remove(Object o) { + if(o == null){ + for (int index = 0; index < size; index++) { + if(elements[index] == null){ + remove(index); + return true; + } + } + }else{ + for (int index = 0; index < size; index++) { + if(o.equals(elements[index])){ + remove(index); + return true; + } + } + } + return false; + } + + @Override + public int size() { + return size; + } + + @Override + public boolean isEmpty() { + return size == 0; + } + + @Override + public E get(int index) { + rangeCheck(index); + return (E) elements[index]; + } + + @Override + public E set(int index, E e) { + rangeCheck(index); + E oldElement = (E) elements[index]; + elements[index] = e; + return oldElement; + } + + @Override + public boolean contains(Object o) { + return indexOf(o) >= 0; + } + + private int indexOf(Object o){ + if(o == null){ + for (int index = 0; index < size; index++) { + if(elements[index] == null){ + return index; + } + } + }else{ + for (int index = 0; index < size; index++) { + if(o.equals(elements[index])){ + return index; + } + } + } + return -1; + } + + @Override + public void clear() { + for (int index = 0; index < size; index++) { + elements[index] = null; + } + size = 0; + } + + @Override + public Iterator iterator() { + return new ArraylistIterator(); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + for (int index = 0; index < size; index++) { + if(index == size -1){ + sb.append(elements[index]); + }else{ + sb.append(elements[index]).append(","); + } + + } + return sb.toString(); + } + private class ArraylistIterator implements Iterator{ + private int position; + + @Override + public boolean hasNext() { + return position != size; + } + + @Override + public E next() { + Object[] elements = ArrayList.this.elements; + int i = position; + if(i >= size){ + throw new NoSuchElementException(); + } + position = i + 1; + return (E) elements[i+1]; + } + + @Override + public void remove() { + if(position > size){ + throw new NoSuchElementException(); + } + ArrayList.this.remove(position); + } + + } + + + +} diff --git a/group07/764189149/src/firstHomeWork/util/Iterator.java b/group07/764189149/src/firstHomeWork/util/Iterator.java new file mode 100644 index 0000000000..ecbf3015e0 --- /dev/null +++ b/group07/764189149/src/firstHomeWork/util/Iterator.java @@ -0,0 +1,30 @@ +package firstHomeWork.util; + +/** + * @Description: 迭代器 + * @author: leijing + * @date: 2017年2月21日 下午8:49:10 + * @param + */ +public interface Iterator { + /** + * @Description: 返回迭代器中是否有下一个元素 + * @return: boolean + * @author: leijing + * @date: 2017年2月21日 下午8:49:52 + */ + boolean hasNext(); + /** + * @Description: 返回迭代器中的下一个元素 + * @return: E + * @author: leijing + * @date: 2017年2月21日 下午8:50:35 + */ + E next(); + /** + * @Description: 删除迭代器中的当前元素 + * @author: leijing + * @date: 2017年2月21日 下午8:51:07 + */ + void remove(); +} diff --git a/group07/764189149/src/firstHomeWork/util/List.java b/group07/764189149/src/firstHomeWork/util/List.java new file mode 100644 index 0000000000..fac6efa0cc --- /dev/null +++ b/group07/764189149/src/firstHomeWork/util/List.java @@ -0,0 +1,87 @@ +package firstHomeWork.util; + +/** + * @Description: 定义一组操作有序列表的接口 + * @author: leijing + * @date: 2017年2月21日 下午8:53:52 + * @param + */ +public interface List { + /** + * @Description: 添加元素 + * @param e + * @return: boolean + * @author: leijing + * @date: 2017年2月21日 下午8:55:32 + */ + boolean add(E e); + /** + * @Description: 删除指定索引的元素 + * @param index + * @return: E + * @author: leijing + * @date: 2017年2月21日 下午8:56:08 + */ + E remove(int index); + /** + * @Description: 删除元素 + * @param o + * @return: boolean + * @author: leijing + * @date: 2017年2月21日 下午8:56:28 + */ + boolean remove(Object o); + /** + * @Description: 返回元素个数 + * @return: int + * @author: leijing + * @date: 2017年2月21日 下午8:57:25 + */ + int size(); + /** + * @Description: 判断集合是否为空 + * @return: boolean + * @author: leijing + * @date: 2017年2月21日 下午8:57:51 + */ + boolean isEmpty(); + /** + * @Description: 获取指定位置的元素 + * @param index + * @return: E + * @author: leijing + * @date: 2017年2月21日 下午8:58:27 + */ + E get(int index); + /** + * @Description: 设置指定位置的元素 + * @param index + * @param e + * @return: E + * @author: leijing + * @date: 2017年2月21日 下午8:58:58 + */ + E set(int index , E e); + /** + * @Description: 判断集合是否包含某个元素 + * @param o + * @return: boolean + * @author: leijing + * @date: 2017年2月21日 下午8:59:32 + */ + boolean contains(Object o); + /** + * @Description: 清空集合 + * @return: void + * @author: leijing + * @date: 2017年2月21日 下午9:00:12 + */ + void clear(); + /** + * @Description: 获取集合的迭代器 + * @return: Iterator + * @author: leijing + * @date: 2017年2月21日 下午9:00:47 + */ + Iterator iterator(); +} From 418ba9019dd9cda3409f9b7474018de2cb8106f7 Mon Sep 17 00:00:00 2001 From: leijing Date: Thu, 23 Feb 2017 15:04:30 +0800 Subject: [PATCH 013/216] =?UTF-8?q?=E5=88=9B=E5=BB=BA=E5=90=84=E4=B8=AA?= =?UTF-8?q?=E7=BB=84=E5=91=98=E7=9A=84=E7=9B=AE=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 创建各个组员的目录 --- "group07/1046545622/git\345\221\275\344\273\244.txt" | 11 +++++++++++ "group07/1058267830/git\345\221\275\344\273\244.txt" | 11 +++++++++++ "group07/1070440331/git\345\221\275\344\273\244.txt" | 11 +++++++++++ "group07/1280157271/git\345\221\275\344\273\244.txt" | 11 +++++++++++ "group07/1448276993/git\345\221\275\344\273\244.txt" | 11 +++++++++++ "group07/1519504320/git\345\221\275\344\273\244.txt" | 11 +++++++++++ "group07/1520332119/git\345\221\275\344\273\244.txt" | 11 +++++++++++ "group07/1536161030/git\345\221\275\344\273\244.txt" | 11 +++++++++++ "group07/178007127/git\345\221\275\344\273\244.txt" | 11 +++++++++++ "group07/20409287/git\345\221\275\344\273\244.txt" | 11 +++++++++++ "group07/2306826375/git\345\221\275\344\273\244.txt" | 11 +++++++++++ "group07/2708094737/git\345\221\275\344\273\244.txt" | 11 +++++++++++ "group07/2915553181/git\345\221\275\344\273\244.txt" | 11 +++++++++++ "group07/328536398/git\345\221\275\344\273\244.txt" | 11 +++++++++++ "group07/396868934/git\345\221\275\344\273\244.txt" | 11 +++++++++++ "group07/43819473/git\345\221\275\344\273\244.txt" | 11 +++++++++++ "group07/466199956/git\345\221\275\344\273\244.txt" | 11 +++++++++++ "group07/476770768/git\345\221\275\344\273\244.txt" | 11 +++++++++++ "group07/515372252/git\345\221\275\344\273\244.txt" | 11 +++++++++++ "group07/562247675/git\345\221\275\344\273\244.txt" | 11 +++++++++++ "group07/598812995/git\345\221\275\344\273\244.txt" | 11 +++++++++++ "group07/603622009/git\345\221\275\344\273\244.txt" | 11 +++++++++++ "group07/724319952/git\345\221\275\344\273\244.txt" | 11 +++++++++++ "group07/752262774/git\345\221\275\344\273\244.txt" | 11 +++++++++++ "group07/770164810/git\345\221\275\344\273\244.txt" | 11 +++++++++++ 25 files changed, 275 insertions(+) create mode 100644 "group07/1046545622/git\345\221\275\344\273\244.txt" create mode 100644 "group07/1058267830/git\345\221\275\344\273\244.txt" create mode 100644 "group07/1070440331/git\345\221\275\344\273\244.txt" create mode 100644 "group07/1280157271/git\345\221\275\344\273\244.txt" create mode 100644 "group07/1448276993/git\345\221\275\344\273\244.txt" create mode 100644 "group07/1519504320/git\345\221\275\344\273\244.txt" create mode 100644 "group07/1520332119/git\345\221\275\344\273\244.txt" create mode 100644 "group07/1536161030/git\345\221\275\344\273\244.txt" create mode 100644 "group07/178007127/git\345\221\275\344\273\244.txt" create mode 100644 "group07/20409287/git\345\221\275\344\273\244.txt" create mode 100644 "group07/2306826375/git\345\221\275\344\273\244.txt" create mode 100644 "group07/2708094737/git\345\221\275\344\273\244.txt" create mode 100644 "group07/2915553181/git\345\221\275\344\273\244.txt" create mode 100644 "group07/328536398/git\345\221\275\344\273\244.txt" create mode 100644 "group07/396868934/git\345\221\275\344\273\244.txt" create mode 100644 "group07/43819473/git\345\221\275\344\273\244.txt" create mode 100644 "group07/466199956/git\345\221\275\344\273\244.txt" create mode 100644 "group07/476770768/git\345\221\275\344\273\244.txt" create mode 100644 "group07/515372252/git\345\221\275\344\273\244.txt" create mode 100644 "group07/562247675/git\345\221\275\344\273\244.txt" create mode 100644 "group07/598812995/git\345\221\275\344\273\244.txt" create mode 100644 "group07/603622009/git\345\221\275\344\273\244.txt" create mode 100644 "group07/724319952/git\345\221\275\344\273\244.txt" create mode 100644 "group07/752262774/git\345\221\275\344\273\244.txt" create mode 100644 "group07/770164810/git\345\221\275\344\273\244.txt" diff --git "a/group07/1046545622/git\345\221\275\344\273\244.txt" "b/group07/1046545622/git\345\221\275\344\273\244.txt" new file mode 100644 index 0000000000..6b9ddc2f28 --- /dev/null +++ "b/group07/1046545622/git\345\221\275\344\273\244.txt" @@ -0,0 +1,11 @@ +װgit guigit bash +1.¡ +git clone git@github.com:michaelliao/gitskills.git +2.޸ĵļ +git add -A +3.ύݴ +git commit -m "ύ***" +4.master +git pull origin master +5.ύmaster +git push origin master \ No newline at end of file diff --git "a/group07/1058267830/git\345\221\275\344\273\244.txt" "b/group07/1058267830/git\345\221\275\344\273\244.txt" new file mode 100644 index 0000000000..6b9ddc2f28 --- /dev/null +++ "b/group07/1058267830/git\345\221\275\344\273\244.txt" @@ -0,0 +1,11 @@ +װgit guigit bash +1.¡ +git clone git@github.com:michaelliao/gitskills.git +2.޸ĵļ +git add -A +3.ύݴ +git commit -m "ύ***" +4.master +git pull origin master +5.ύmaster +git push origin master \ No newline at end of file diff --git "a/group07/1070440331/git\345\221\275\344\273\244.txt" "b/group07/1070440331/git\345\221\275\344\273\244.txt" new file mode 100644 index 0000000000..6b9ddc2f28 --- /dev/null +++ "b/group07/1070440331/git\345\221\275\344\273\244.txt" @@ -0,0 +1,11 @@ +װgit guigit bash +1.¡ +git clone git@github.com:michaelliao/gitskills.git +2.޸ĵļ +git add -A +3.ύݴ +git commit -m "ύ***" +4.master +git pull origin master +5.ύmaster +git push origin master \ No newline at end of file diff --git "a/group07/1280157271/git\345\221\275\344\273\244.txt" "b/group07/1280157271/git\345\221\275\344\273\244.txt" new file mode 100644 index 0000000000..6b9ddc2f28 --- /dev/null +++ "b/group07/1280157271/git\345\221\275\344\273\244.txt" @@ -0,0 +1,11 @@ +װgit guigit bash +1.¡ +git clone git@github.com:michaelliao/gitskills.git +2.޸ĵļ +git add -A +3.ύݴ +git commit -m "ύ***" +4.master +git pull origin master +5.ύmaster +git push origin master \ No newline at end of file diff --git "a/group07/1448276993/git\345\221\275\344\273\244.txt" "b/group07/1448276993/git\345\221\275\344\273\244.txt" new file mode 100644 index 0000000000..6b9ddc2f28 --- /dev/null +++ "b/group07/1448276993/git\345\221\275\344\273\244.txt" @@ -0,0 +1,11 @@ +װgit guigit bash +1.¡ +git clone git@github.com:michaelliao/gitskills.git +2.޸ĵļ +git add -A +3.ύݴ +git commit -m "ύ***" +4.master +git pull origin master +5.ύmaster +git push origin master \ No newline at end of file diff --git "a/group07/1519504320/git\345\221\275\344\273\244.txt" "b/group07/1519504320/git\345\221\275\344\273\244.txt" new file mode 100644 index 0000000000..6b9ddc2f28 --- /dev/null +++ "b/group07/1519504320/git\345\221\275\344\273\244.txt" @@ -0,0 +1,11 @@ +װgit guigit bash +1.¡ +git clone git@github.com:michaelliao/gitskills.git +2.޸ĵļ +git add -A +3.ύݴ +git commit -m "ύ***" +4.master +git pull origin master +5.ύmaster +git push origin master \ No newline at end of file diff --git "a/group07/1520332119/git\345\221\275\344\273\244.txt" "b/group07/1520332119/git\345\221\275\344\273\244.txt" new file mode 100644 index 0000000000..6b9ddc2f28 --- /dev/null +++ "b/group07/1520332119/git\345\221\275\344\273\244.txt" @@ -0,0 +1,11 @@ +װgit guigit bash +1.¡ +git clone git@github.com:michaelliao/gitskills.git +2.޸ĵļ +git add -A +3.ύݴ +git commit -m "ύ***" +4.master +git pull origin master +5.ύmaster +git push origin master \ No newline at end of file diff --git "a/group07/1536161030/git\345\221\275\344\273\244.txt" "b/group07/1536161030/git\345\221\275\344\273\244.txt" new file mode 100644 index 0000000000..6b9ddc2f28 --- /dev/null +++ "b/group07/1536161030/git\345\221\275\344\273\244.txt" @@ -0,0 +1,11 @@ +װgit guigit bash +1.¡ +git clone git@github.com:michaelliao/gitskills.git +2.޸ĵļ +git add -A +3.ύݴ +git commit -m "ύ***" +4.master +git pull origin master +5.ύmaster +git push origin master \ No newline at end of file diff --git "a/group07/178007127/git\345\221\275\344\273\244.txt" "b/group07/178007127/git\345\221\275\344\273\244.txt" new file mode 100644 index 0000000000..6b9ddc2f28 --- /dev/null +++ "b/group07/178007127/git\345\221\275\344\273\244.txt" @@ -0,0 +1,11 @@ +װgit guigit bash +1.¡ +git clone git@github.com:michaelliao/gitskills.git +2.޸ĵļ +git add -A +3.ύݴ +git commit -m "ύ***" +4.master +git pull origin master +5.ύmaster +git push origin master \ No newline at end of file diff --git "a/group07/20409287/git\345\221\275\344\273\244.txt" "b/group07/20409287/git\345\221\275\344\273\244.txt" new file mode 100644 index 0000000000..6b9ddc2f28 --- /dev/null +++ "b/group07/20409287/git\345\221\275\344\273\244.txt" @@ -0,0 +1,11 @@ +װgit guigit bash +1.¡ +git clone git@github.com:michaelliao/gitskills.git +2.޸ĵļ +git add -A +3.ύݴ +git commit -m "ύ***" +4.master +git pull origin master +5.ύmaster +git push origin master \ No newline at end of file diff --git "a/group07/2306826375/git\345\221\275\344\273\244.txt" "b/group07/2306826375/git\345\221\275\344\273\244.txt" new file mode 100644 index 0000000000..6b9ddc2f28 --- /dev/null +++ "b/group07/2306826375/git\345\221\275\344\273\244.txt" @@ -0,0 +1,11 @@ +װgit guigit bash +1.¡ +git clone git@github.com:michaelliao/gitskills.git +2.޸ĵļ +git add -A +3.ύݴ +git commit -m "ύ***" +4.master +git pull origin master +5.ύmaster +git push origin master \ No newline at end of file diff --git "a/group07/2708094737/git\345\221\275\344\273\244.txt" "b/group07/2708094737/git\345\221\275\344\273\244.txt" new file mode 100644 index 0000000000..6b9ddc2f28 --- /dev/null +++ "b/group07/2708094737/git\345\221\275\344\273\244.txt" @@ -0,0 +1,11 @@ +װgit guigit bash +1.¡ +git clone git@github.com:michaelliao/gitskills.git +2.޸ĵļ +git add -A +3.ύݴ +git commit -m "ύ***" +4.master +git pull origin master +5.ύmaster +git push origin master \ No newline at end of file diff --git "a/group07/2915553181/git\345\221\275\344\273\244.txt" "b/group07/2915553181/git\345\221\275\344\273\244.txt" new file mode 100644 index 0000000000..6b9ddc2f28 --- /dev/null +++ "b/group07/2915553181/git\345\221\275\344\273\244.txt" @@ -0,0 +1,11 @@ +װgit guigit bash +1.¡ +git clone git@github.com:michaelliao/gitskills.git +2.޸ĵļ +git add -A +3.ύݴ +git commit -m "ύ***" +4.master +git pull origin master +5.ύmaster +git push origin master \ No newline at end of file diff --git "a/group07/328536398/git\345\221\275\344\273\244.txt" "b/group07/328536398/git\345\221\275\344\273\244.txt" new file mode 100644 index 0000000000..6b9ddc2f28 --- /dev/null +++ "b/group07/328536398/git\345\221\275\344\273\244.txt" @@ -0,0 +1,11 @@ +װgit guigit bash +1.¡ +git clone git@github.com:michaelliao/gitskills.git +2.޸ĵļ +git add -A +3.ύݴ +git commit -m "ύ***" +4.master +git pull origin master +5.ύmaster +git push origin master \ No newline at end of file diff --git "a/group07/396868934/git\345\221\275\344\273\244.txt" "b/group07/396868934/git\345\221\275\344\273\244.txt" new file mode 100644 index 0000000000..6b9ddc2f28 --- /dev/null +++ "b/group07/396868934/git\345\221\275\344\273\244.txt" @@ -0,0 +1,11 @@ +װgit guigit bash +1.¡ +git clone git@github.com:michaelliao/gitskills.git +2.޸ĵļ +git add -A +3.ύݴ +git commit -m "ύ***" +4.master +git pull origin master +5.ύmaster +git push origin master \ No newline at end of file diff --git "a/group07/43819473/git\345\221\275\344\273\244.txt" "b/group07/43819473/git\345\221\275\344\273\244.txt" new file mode 100644 index 0000000000..6b9ddc2f28 --- /dev/null +++ "b/group07/43819473/git\345\221\275\344\273\244.txt" @@ -0,0 +1,11 @@ +װgit guigit bash +1.¡ +git clone git@github.com:michaelliao/gitskills.git +2.޸ĵļ +git add -A +3.ύݴ +git commit -m "ύ***" +4.master +git pull origin master +5.ύmaster +git push origin master \ No newline at end of file diff --git "a/group07/466199956/git\345\221\275\344\273\244.txt" "b/group07/466199956/git\345\221\275\344\273\244.txt" new file mode 100644 index 0000000000..6b9ddc2f28 --- /dev/null +++ "b/group07/466199956/git\345\221\275\344\273\244.txt" @@ -0,0 +1,11 @@ +װgit guigit bash +1.¡ +git clone git@github.com:michaelliao/gitskills.git +2.޸ĵļ +git add -A +3.ύݴ +git commit -m "ύ***" +4.master +git pull origin master +5.ύmaster +git push origin master \ No newline at end of file diff --git "a/group07/476770768/git\345\221\275\344\273\244.txt" "b/group07/476770768/git\345\221\275\344\273\244.txt" new file mode 100644 index 0000000000..6b9ddc2f28 --- /dev/null +++ "b/group07/476770768/git\345\221\275\344\273\244.txt" @@ -0,0 +1,11 @@ +װgit guigit bash +1.¡ +git clone git@github.com:michaelliao/gitskills.git +2.޸ĵļ +git add -A +3.ύݴ +git commit -m "ύ***" +4.master +git pull origin master +5.ύmaster +git push origin master \ No newline at end of file diff --git "a/group07/515372252/git\345\221\275\344\273\244.txt" "b/group07/515372252/git\345\221\275\344\273\244.txt" new file mode 100644 index 0000000000..6b9ddc2f28 --- /dev/null +++ "b/group07/515372252/git\345\221\275\344\273\244.txt" @@ -0,0 +1,11 @@ +װgit guigit bash +1.¡ +git clone git@github.com:michaelliao/gitskills.git +2.޸ĵļ +git add -A +3.ύݴ +git commit -m "ύ***" +4.master +git pull origin master +5.ύmaster +git push origin master \ No newline at end of file diff --git "a/group07/562247675/git\345\221\275\344\273\244.txt" "b/group07/562247675/git\345\221\275\344\273\244.txt" new file mode 100644 index 0000000000..6b9ddc2f28 --- /dev/null +++ "b/group07/562247675/git\345\221\275\344\273\244.txt" @@ -0,0 +1,11 @@ +װgit guigit bash +1.¡ +git clone git@github.com:michaelliao/gitskills.git +2.޸ĵļ +git add -A +3.ύݴ +git commit -m "ύ***" +4.master +git pull origin master +5.ύmaster +git push origin master \ No newline at end of file diff --git "a/group07/598812995/git\345\221\275\344\273\244.txt" "b/group07/598812995/git\345\221\275\344\273\244.txt" new file mode 100644 index 0000000000..6b9ddc2f28 --- /dev/null +++ "b/group07/598812995/git\345\221\275\344\273\244.txt" @@ -0,0 +1,11 @@ +װgit guigit bash +1.¡ +git clone git@github.com:michaelliao/gitskills.git +2.޸ĵļ +git add -A +3.ύݴ +git commit -m "ύ***" +4.master +git pull origin master +5.ύmaster +git push origin master \ No newline at end of file diff --git "a/group07/603622009/git\345\221\275\344\273\244.txt" "b/group07/603622009/git\345\221\275\344\273\244.txt" new file mode 100644 index 0000000000..6b9ddc2f28 --- /dev/null +++ "b/group07/603622009/git\345\221\275\344\273\244.txt" @@ -0,0 +1,11 @@ +װgit guigit bash +1.¡ +git clone git@github.com:michaelliao/gitskills.git +2.޸ĵļ +git add -A +3.ύݴ +git commit -m "ύ***" +4.master +git pull origin master +5.ύmaster +git push origin master \ No newline at end of file diff --git "a/group07/724319952/git\345\221\275\344\273\244.txt" "b/group07/724319952/git\345\221\275\344\273\244.txt" new file mode 100644 index 0000000000..6b9ddc2f28 --- /dev/null +++ "b/group07/724319952/git\345\221\275\344\273\244.txt" @@ -0,0 +1,11 @@ +װgit guigit bash +1.¡ +git clone git@github.com:michaelliao/gitskills.git +2.޸ĵļ +git add -A +3.ύݴ +git commit -m "ύ***" +4.master +git pull origin master +5.ύmaster +git push origin master \ No newline at end of file diff --git "a/group07/752262774/git\345\221\275\344\273\244.txt" "b/group07/752262774/git\345\221\275\344\273\244.txt" new file mode 100644 index 0000000000..6b9ddc2f28 --- /dev/null +++ "b/group07/752262774/git\345\221\275\344\273\244.txt" @@ -0,0 +1,11 @@ +װgit guigit bash +1.¡ +git clone git@github.com:michaelliao/gitskills.git +2.޸ĵļ +git add -A +3.ύݴ +git commit -m "ύ***" +4.master +git pull origin master +5.ύmaster +git push origin master \ No newline at end of file diff --git "a/group07/770164810/git\345\221\275\344\273\244.txt" "b/group07/770164810/git\345\221\275\344\273\244.txt" new file mode 100644 index 0000000000..6b9ddc2f28 --- /dev/null +++ "b/group07/770164810/git\345\221\275\344\273\244.txt" @@ -0,0 +1,11 @@ +װgit guigit bash +1.¡ +git clone git@github.com:michaelliao/gitskills.git +2.޸ĵļ +git add -A +3.ύݴ +git commit -m "ύ***" +4.master +git pull origin master +5.ύmaster +git push origin master \ No newline at end of file From 2d5dc847495fefaab0e649220011dfdf98193719 Mon Sep 17 00:00:00 2001 From: leijing Date: Thu, 23 Feb 2017 15:10:18 +0800 Subject: [PATCH 014/216] =?UTF-8?q?=E4=BF=AE=E6=94=B9git=E5=91=BD=E4=BB=A4?= =?UTF-8?q?.txt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 修改git命令.txt的内容 --- "group07/1046545622/git\345\221\275\344\273\244.txt" | 2 +- "group07/1058267830/git\345\221\275\344\273\244.txt" | 2 +- "group07/1070440331/git\345\221\275\344\273\244.txt" | 2 +- "group07/1280157271/git\345\221\275\344\273\244.txt" | 2 +- "group07/1448276993/git\345\221\275\344\273\244.txt" | 2 +- "group07/1519504320/git\345\221\275\344\273\244.txt" | 2 +- "group07/1520332119/git\345\221\275\344\273\244.txt" | 2 +- "group07/1536161030/git\345\221\275\344\273\244.txt" | 2 +- "group07/178007127/git\345\221\275\344\273\244.txt" | 2 +- "group07/20409287/git\345\221\275\344\273\244.txt" | 2 +- "group07/2306826375/git\345\221\275\344\273\244.txt" | 2 +- "group07/2708094737/git\345\221\275\344\273\244.txt" | 2 +- "group07/2915553181/git\345\221\275\344\273\244.txt" | 2 +- "group07/328536398/git\345\221\275\344\273\244.txt" | 2 +- "group07/396868934/git\345\221\275\344\273\244.txt" | 2 +- "group07/43819473/git\345\221\275\344\273\244.txt" | 2 +- "group07/466199956/git\345\221\275\344\273\244.txt" | 2 +- "group07/476770768/git\345\221\275\344\273\244.txt" | 2 +- "group07/515372252/git\345\221\275\344\273\244.txt" | 2 +- "group07/562247675/git\345\221\275\344\273\244.txt" | 2 +- "group07/598812995/git\345\221\275\344\273\244.txt" | 2 +- "group07/603622009/git\345\221\275\344\273\244.txt" | 2 +- "group07/724319952/git\345\221\275\344\273\244.txt" | 2 +- "group07/752262774/git\345\221\275\344\273\244.txt" | 2 +- "group07/770164810/git\345\221\275\344\273\244.txt" | 2 +- 25 files changed, 25 insertions(+), 25 deletions(-) diff --git "a/group07/1046545622/git\345\221\275\344\273\244.txt" "b/group07/1046545622/git\345\221\275\344\273\244.txt" index 6b9ddc2f28..8bcf2ffa0f 100644 --- "a/group07/1046545622/git\345\221\275\344\273\244.txt" +++ "b/group07/1046545622/git\345\221\275\344\273\244.txt" @@ -1,6 +1,6 @@ װgit guigit bash 1.¡ -git clone git@github.com:michaelliao/gitskills.git +git clone git@github.com:leijing1992/coding2017.git 2.޸ĵļ git add -A 3.ύݴ diff --git "a/group07/1058267830/git\345\221\275\344\273\244.txt" "b/group07/1058267830/git\345\221\275\344\273\244.txt" index 6b9ddc2f28..8bcf2ffa0f 100644 --- "a/group07/1058267830/git\345\221\275\344\273\244.txt" +++ "b/group07/1058267830/git\345\221\275\344\273\244.txt" @@ -1,6 +1,6 @@ װgit guigit bash 1.¡ -git clone git@github.com:michaelliao/gitskills.git +git clone git@github.com:leijing1992/coding2017.git 2.޸ĵļ git add -A 3.ύݴ diff --git "a/group07/1070440331/git\345\221\275\344\273\244.txt" "b/group07/1070440331/git\345\221\275\344\273\244.txt" index 6b9ddc2f28..8bcf2ffa0f 100644 --- "a/group07/1070440331/git\345\221\275\344\273\244.txt" +++ "b/group07/1070440331/git\345\221\275\344\273\244.txt" @@ -1,6 +1,6 @@ װgit guigit bash 1.¡ -git clone git@github.com:michaelliao/gitskills.git +git clone git@github.com:leijing1992/coding2017.git 2.޸ĵļ git add -A 3.ύݴ diff --git "a/group07/1280157271/git\345\221\275\344\273\244.txt" "b/group07/1280157271/git\345\221\275\344\273\244.txt" index 6b9ddc2f28..8bcf2ffa0f 100644 --- "a/group07/1280157271/git\345\221\275\344\273\244.txt" +++ "b/group07/1280157271/git\345\221\275\344\273\244.txt" @@ -1,6 +1,6 @@ װgit guigit bash 1.¡ -git clone git@github.com:michaelliao/gitskills.git +git clone git@github.com:leijing1992/coding2017.git 2.޸ĵļ git add -A 3.ύݴ diff --git "a/group07/1448276993/git\345\221\275\344\273\244.txt" "b/group07/1448276993/git\345\221\275\344\273\244.txt" index 6b9ddc2f28..8bcf2ffa0f 100644 --- "a/group07/1448276993/git\345\221\275\344\273\244.txt" +++ "b/group07/1448276993/git\345\221\275\344\273\244.txt" @@ -1,6 +1,6 @@ װgit guigit bash 1.¡ -git clone git@github.com:michaelliao/gitskills.git +git clone git@github.com:leijing1992/coding2017.git 2.޸ĵļ git add -A 3.ύݴ diff --git "a/group07/1519504320/git\345\221\275\344\273\244.txt" "b/group07/1519504320/git\345\221\275\344\273\244.txt" index 6b9ddc2f28..8bcf2ffa0f 100644 --- "a/group07/1519504320/git\345\221\275\344\273\244.txt" +++ "b/group07/1519504320/git\345\221\275\344\273\244.txt" @@ -1,6 +1,6 @@ װgit guigit bash 1.¡ -git clone git@github.com:michaelliao/gitskills.git +git clone git@github.com:leijing1992/coding2017.git 2.޸ĵļ git add -A 3.ύݴ diff --git "a/group07/1520332119/git\345\221\275\344\273\244.txt" "b/group07/1520332119/git\345\221\275\344\273\244.txt" index 6b9ddc2f28..8bcf2ffa0f 100644 --- "a/group07/1520332119/git\345\221\275\344\273\244.txt" +++ "b/group07/1520332119/git\345\221\275\344\273\244.txt" @@ -1,6 +1,6 @@ װgit guigit bash 1.¡ -git clone git@github.com:michaelliao/gitskills.git +git clone git@github.com:leijing1992/coding2017.git 2.޸ĵļ git add -A 3.ύݴ diff --git "a/group07/1536161030/git\345\221\275\344\273\244.txt" "b/group07/1536161030/git\345\221\275\344\273\244.txt" index 6b9ddc2f28..8bcf2ffa0f 100644 --- "a/group07/1536161030/git\345\221\275\344\273\244.txt" +++ "b/group07/1536161030/git\345\221\275\344\273\244.txt" @@ -1,6 +1,6 @@ װgit guigit bash 1.¡ -git clone git@github.com:michaelliao/gitskills.git +git clone git@github.com:leijing1992/coding2017.git 2.޸ĵļ git add -A 3.ύݴ diff --git "a/group07/178007127/git\345\221\275\344\273\244.txt" "b/group07/178007127/git\345\221\275\344\273\244.txt" index 6b9ddc2f28..8bcf2ffa0f 100644 --- "a/group07/178007127/git\345\221\275\344\273\244.txt" +++ "b/group07/178007127/git\345\221\275\344\273\244.txt" @@ -1,6 +1,6 @@ װgit guigit bash 1.¡ -git clone git@github.com:michaelliao/gitskills.git +git clone git@github.com:leijing1992/coding2017.git 2.޸ĵļ git add -A 3.ύݴ diff --git "a/group07/20409287/git\345\221\275\344\273\244.txt" "b/group07/20409287/git\345\221\275\344\273\244.txt" index 6b9ddc2f28..8bcf2ffa0f 100644 --- "a/group07/20409287/git\345\221\275\344\273\244.txt" +++ "b/group07/20409287/git\345\221\275\344\273\244.txt" @@ -1,6 +1,6 @@ װgit guigit bash 1.¡ -git clone git@github.com:michaelliao/gitskills.git +git clone git@github.com:leijing1992/coding2017.git 2.޸ĵļ git add -A 3.ύݴ diff --git "a/group07/2306826375/git\345\221\275\344\273\244.txt" "b/group07/2306826375/git\345\221\275\344\273\244.txt" index 6b9ddc2f28..8bcf2ffa0f 100644 --- "a/group07/2306826375/git\345\221\275\344\273\244.txt" +++ "b/group07/2306826375/git\345\221\275\344\273\244.txt" @@ -1,6 +1,6 @@ װgit guigit bash 1.¡ -git clone git@github.com:michaelliao/gitskills.git +git clone git@github.com:leijing1992/coding2017.git 2.޸ĵļ git add -A 3.ύݴ diff --git "a/group07/2708094737/git\345\221\275\344\273\244.txt" "b/group07/2708094737/git\345\221\275\344\273\244.txt" index 6b9ddc2f28..8bcf2ffa0f 100644 --- "a/group07/2708094737/git\345\221\275\344\273\244.txt" +++ "b/group07/2708094737/git\345\221\275\344\273\244.txt" @@ -1,6 +1,6 @@ װgit guigit bash 1.¡ -git clone git@github.com:michaelliao/gitskills.git +git clone git@github.com:leijing1992/coding2017.git 2.޸ĵļ git add -A 3.ύݴ diff --git "a/group07/2915553181/git\345\221\275\344\273\244.txt" "b/group07/2915553181/git\345\221\275\344\273\244.txt" index 6b9ddc2f28..8bcf2ffa0f 100644 --- "a/group07/2915553181/git\345\221\275\344\273\244.txt" +++ "b/group07/2915553181/git\345\221\275\344\273\244.txt" @@ -1,6 +1,6 @@ װgit guigit bash 1.¡ -git clone git@github.com:michaelliao/gitskills.git +git clone git@github.com:leijing1992/coding2017.git 2.޸ĵļ git add -A 3.ύݴ diff --git "a/group07/328536398/git\345\221\275\344\273\244.txt" "b/group07/328536398/git\345\221\275\344\273\244.txt" index 6b9ddc2f28..8bcf2ffa0f 100644 --- "a/group07/328536398/git\345\221\275\344\273\244.txt" +++ "b/group07/328536398/git\345\221\275\344\273\244.txt" @@ -1,6 +1,6 @@ װgit guigit bash 1.¡ -git clone git@github.com:michaelliao/gitskills.git +git clone git@github.com:leijing1992/coding2017.git 2.޸ĵļ git add -A 3.ύݴ diff --git "a/group07/396868934/git\345\221\275\344\273\244.txt" "b/group07/396868934/git\345\221\275\344\273\244.txt" index 6b9ddc2f28..8bcf2ffa0f 100644 --- "a/group07/396868934/git\345\221\275\344\273\244.txt" +++ "b/group07/396868934/git\345\221\275\344\273\244.txt" @@ -1,6 +1,6 @@ װgit guigit bash 1.¡ -git clone git@github.com:michaelliao/gitskills.git +git clone git@github.com:leijing1992/coding2017.git 2.޸ĵļ git add -A 3.ύݴ diff --git "a/group07/43819473/git\345\221\275\344\273\244.txt" "b/group07/43819473/git\345\221\275\344\273\244.txt" index 6b9ddc2f28..8bcf2ffa0f 100644 --- "a/group07/43819473/git\345\221\275\344\273\244.txt" +++ "b/group07/43819473/git\345\221\275\344\273\244.txt" @@ -1,6 +1,6 @@ װgit guigit bash 1.¡ -git clone git@github.com:michaelliao/gitskills.git +git clone git@github.com:leijing1992/coding2017.git 2.޸ĵļ git add -A 3.ύݴ diff --git "a/group07/466199956/git\345\221\275\344\273\244.txt" "b/group07/466199956/git\345\221\275\344\273\244.txt" index 6b9ddc2f28..8bcf2ffa0f 100644 --- "a/group07/466199956/git\345\221\275\344\273\244.txt" +++ "b/group07/466199956/git\345\221\275\344\273\244.txt" @@ -1,6 +1,6 @@ װgit guigit bash 1.¡ -git clone git@github.com:michaelliao/gitskills.git +git clone git@github.com:leijing1992/coding2017.git 2.޸ĵļ git add -A 3.ύݴ diff --git "a/group07/476770768/git\345\221\275\344\273\244.txt" "b/group07/476770768/git\345\221\275\344\273\244.txt" index 6b9ddc2f28..8bcf2ffa0f 100644 --- "a/group07/476770768/git\345\221\275\344\273\244.txt" +++ "b/group07/476770768/git\345\221\275\344\273\244.txt" @@ -1,6 +1,6 @@ װgit guigit bash 1.¡ -git clone git@github.com:michaelliao/gitskills.git +git clone git@github.com:leijing1992/coding2017.git 2.޸ĵļ git add -A 3.ύݴ diff --git "a/group07/515372252/git\345\221\275\344\273\244.txt" "b/group07/515372252/git\345\221\275\344\273\244.txt" index 6b9ddc2f28..8bcf2ffa0f 100644 --- "a/group07/515372252/git\345\221\275\344\273\244.txt" +++ "b/group07/515372252/git\345\221\275\344\273\244.txt" @@ -1,6 +1,6 @@ װgit guigit bash 1.¡ -git clone git@github.com:michaelliao/gitskills.git +git clone git@github.com:leijing1992/coding2017.git 2.޸ĵļ git add -A 3.ύݴ diff --git "a/group07/562247675/git\345\221\275\344\273\244.txt" "b/group07/562247675/git\345\221\275\344\273\244.txt" index 6b9ddc2f28..8bcf2ffa0f 100644 --- "a/group07/562247675/git\345\221\275\344\273\244.txt" +++ "b/group07/562247675/git\345\221\275\344\273\244.txt" @@ -1,6 +1,6 @@ װgit guigit bash 1.¡ -git clone git@github.com:michaelliao/gitskills.git +git clone git@github.com:leijing1992/coding2017.git 2.޸ĵļ git add -A 3.ύݴ diff --git "a/group07/598812995/git\345\221\275\344\273\244.txt" "b/group07/598812995/git\345\221\275\344\273\244.txt" index 6b9ddc2f28..8bcf2ffa0f 100644 --- "a/group07/598812995/git\345\221\275\344\273\244.txt" +++ "b/group07/598812995/git\345\221\275\344\273\244.txt" @@ -1,6 +1,6 @@ װgit guigit bash 1.¡ -git clone git@github.com:michaelliao/gitskills.git +git clone git@github.com:leijing1992/coding2017.git 2.޸ĵļ git add -A 3.ύݴ diff --git "a/group07/603622009/git\345\221\275\344\273\244.txt" "b/group07/603622009/git\345\221\275\344\273\244.txt" index 6b9ddc2f28..8bcf2ffa0f 100644 --- "a/group07/603622009/git\345\221\275\344\273\244.txt" +++ "b/group07/603622009/git\345\221\275\344\273\244.txt" @@ -1,6 +1,6 @@ װgit guigit bash 1.¡ -git clone git@github.com:michaelliao/gitskills.git +git clone git@github.com:leijing1992/coding2017.git 2.޸ĵļ git add -A 3.ύݴ diff --git "a/group07/724319952/git\345\221\275\344\273\244.txt" "b/group07/724319952/git\345\221\275\344\273\244.txt" index 6b9ddc2f28..8bcf2ffa0f 100644 --- "a/group07/724319952/git\345\221\275\344\273\244.txt" +++ "b/group07/724319952/git\345\221\275\344\273\244.txt" @@ -1,6 +1,6 @@ װgit guigit bash 1.¡ -git clone git@github.com:michaelliao/gitskills.git +git clone git@github.com:leijing1992/coding2017.git 2.޸ĵļ git add -A 3.ύݴ diff --git "a/group07/752262774/git\345\221\275\344\273\244.txt" "b/group07/752262774/git\345\221\275\344\273\244.txt" index 6b9ddc2f28..8bcf2ffa0f 100644 --- "a/group07/752262774/git\345\221\275\344\273\244.txt" +++ "b/group07/752262774/git\345\221\275\344\273\244.txt" @@ -1,6 +1,6 @@ װgit guigit bash 1.¡ -git clone git@github.com:michaelliao/gitskills.git +git clone git@github.com:leijing1992/coding2017.git 2.޸ĵļ git add -A 3.ύݴ diff --git "a/group07/770164810/git\345\221\275\344\273\244.txt" "b/group07/770164810/git\345\221\275\344\273\244.txt" index 6b9ddc2f28..8bcf2ffa0f 100644 --- "a/group07/770164810/git\345\221\275\344\273\244.txt" +++ "b/group07/770164810/git\345\221\275\344\273\244.txt" @@ -1,6 +1,6 @@ װgit guigit bash 1.¡ -git clone git@github.com:michaelliao/gitskills.git +git clone git@github.com:leijing1992/coding2017.git 2.޸ĵļ git add -A 3.ύݴ From e18643827a86766da8a58f56894795dd9f235ce1 Mon Sep 17 00:00:00 2001 From: Ren650119726 <102228177@qq.com> Date: Thu, 23 Feb 2017 15:27:59 +0800 Subject: [PATCH 015/216] --- group17/102228177/bin/data2_19/ArrayList.class | Bin 2476 -> 0 bytes .../102228177/bin/data2_19/BinaryTreeNode.class | Bin 2283 -> 0 bytes group17/102228177/bin/data2_19/Iterator.class | Bin 168 -> 0 bytes .../102228177/bin/data2_19/LinkedList$Node.class | Bin 589 -> 0 bytes group17/102228177/bin/data2_19/LinkedList.class | Bin 2573 -> 0 bytes group17/102228177/bin/data2_19/List.class | Bin 245 -> 0 bytes group17/102228177/bin/data2_19/Queue.class | Bin 1390 -> 0 bytes group17/102228177/bin/data2_19/Stack.class | Bin 1520 -> 0 bytes 8 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 group17/102228177/bin/data2_19/ArrayList.class delete mode 100644 group17/102228177/bin/data2_19/BinaryTreeNode.class delete mode 100644 group17/102228177/bin/data2_19/Iterator.class delete mode 100644 group17/102228177/bin/data2_19/LinkedList$Node.class delete mode 100644 group17/102228177/bin/data2_19/LinkedList.class delete mode 100644 group17/102228177/bin/data2_19/List.class delete mode 100644 group17/102228177/bin/data2_19/Queue.class delete mode 100644 group17/102228177/bin/data2_19/Stack.class diff --git a/group17/102228177/bin/data2_19/ArrayList.class b/group17/102228177/bin/data2_19/ArrayList.class deleted file mode 100644 index 160f55d10fa8674cee37a60ff17a26ee731d2486..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2476 zcmZuzTXz#x7~Q8yGijL8(v~zeEq8620F@L)2vpnBVkA%?rBG2}nhaq|G82*swRXU^r@``h0o`SagjegiOts)jCs zfui9W>6^z+PR`V7#-p57cQphB`qzy6#$?&BOOuPMYi5C~A%Wi3X?ai}R5WkrOj|%? zxjE<9b=R=nWux3M0|bc(gw3*9F>SXlFnA-k*=R-}ShpUVv{W%3Dodf$mTkGy0)fQD zGPmcPq8UK|gF5=q-vfc&I(iY7vtb=Oz1fJ49nb~(a+YmgY*bdw+LEzars08{Q!vWQ zM$MAn{$kL*W0BENuH{e5dr}G*#Uf!6Tj@?LM+m!L#{u+{TdC$epzn@E*~YcrylWKh zUNEW(HG*+WXh>|(Hvg#ZniU;Mqy%~l8G?dSeI$_F20gnKB%75Yg>3Ty9T12nwmBnD z2#e1eT`QRk+wMemVyi6;Qv!*$A4-y}T{IsqHr&PAvrfY<*5@A<%&KcSb_8h*3UpiY z04dbWigTZOGi=O-V8yVQ7STj!%=2!|vP&6H#K8zoV_L%*fn9CPtnHd5v!>%id?cXV zmzlJ9TRGOr*guw$(U{e-2Yco0tehQ@vjrXR<5&+B|5!&BpOBW*kdAv^Th8PqQgKPh zG%6VlIp$KEgvWEXVU>$!ErN@f7E`d&tG9(kFwOPf-ur9v1oFsJ0f z>pE8ODOEJ8Rnunj9qA1J|2H~9wt=FO;WHiY;+Qn{g*0|^lMSzkGo2!Cws9VYj#U&` zw65cAvP2SFuMp2fNdx0Ds8rjir;a<)X{{M4=D z)2J291xr@%&Q@I>l}Ol6V*x(h2x0^p!kqW8({v%ihb=(O*&fu$=D<;&Ve8;~7r*j6 zCpeBIpJN~yc!r^5f8-gWeE$l5#(q*)-{Lz;7|?u>#(QYIkLF`^B+gacGlEf!@k_`Q z^a1XXU>Da8C7;svQ$*LH5o;f(F}ak=Cs#NGZxLEz1<=MCBFb*!4AZ$74)QIrqMkh; zi_F?E2Y>ex%v0yQs z|0*EH;@`e`B^Tm{x78@gIDn{O;`QPv6`CZQDQaT5=qH4NXWXSxdf8U-F#%F&mG6jUCFbb?kVF^vZJ_|2=SK zRC@OfB8qqViFm@Jogtl}NV62{EM=M}%sEAEpJ%c~Z5;0@YEeorNp>kh-3aKKWW#3W zv-yDvOE&Y{v5BAYWtF62qrqF0wM!_5!Q%RxzrDmOdLfC$(`~MMSWCcVa=k*XOO)j* zo97aRy@qLA@8CS&;ymBtyhn-Xab~&b+H3xWki1#+KJQ76Qu%Hv*N>cZsk9HNMMK&5 zN~+tp-@_oD^e?|+Af?mwmk^ZwR4x^GflL!Ksh~f0`(wx-HGk|6^?OTmsZbO1*8)^% z{AZkdiSsL?FL2>Gt_)ml;#z97i5pFP-o&jYic+*x6W02hzuFa=rZ`}03&Ucutug!V zvP#NGpu%jik%7bPt6~B7P~uoay+gJ-PnUT=%(23rAuvbL+M#Cq`UeXdggD4OTM6X+ E2NA{D7XSbN diff --git a/group17/102228177/bin/data2_19/BinaryTreeNode.class b/group17/102228177/bin/data2_19/BinaryTreeNode.class deleted file mode 100644 index 9088822d4f510ff17ba4e41b87e6b2ce5d786435..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2283 zcmaKs%TF6u6vn@68ylM;fO!Q12{>)>D>#Iv36Iba9to|%Z9qg(7u8@UW>Pao!&Kqc0?*3E3rArj-zFPPI&8CaK%4NQX_?NF!eH{lNU2@MS|MHxLG)_S(5Dbg zrgo!H=+_WIr$SHOw2ZCl;htgdcxdr_rKp#8b=#D8e>3D9n8ymLq7W$=&Zulp8`7Mlh7{8DKhTd4q+@QMHWa$I9liM7rheqNA#7U5hRw#`YSr(yz%erBC*CQew8@oGXZmn+{J`;#%;!=kW0Xj0X-W1CiKL6XL(W5aSh^3b7f zS_(tSZyLlbN1PYWGovu&0v-KpBNSZS!okJ7MH zpXSB37qqm1NwNp|>)?MtMvkA8fN0%)Qnh?)Jf}AJe}!-BJP+_0OP`}Boq3D+8`pM# z|5q3V^bXN4O3e@QZOF6cQ)1B%!_2~2#Z`>>F>~%a(2@QX@n2{ZfP@QkTY^d$fuMmO zh9ar~E%`vGC;1d(92o5(<(7lO#v?jcJ-NY)I`!UzryJQM;>lTYxBu|!sV z@1UM%&N022PG`??J6msymu8BZOQMJ0N=Y-}In~ni`MQfzeV;O+sF>e5KgmCSl0qhX zhP$EH7-OO1e<7O5zQy>Pw7f~uQ{-HWfM=2LEfTIp!n5dphkMWCbLUw2LwfIZV&3iM zG!b*?#cd+a5N#GW2$SG9Era{Snd54nt3@p10ameuEj(-}r%)@Wz%%I@Q1Hu<{zcF+ z)HT=@Wtz|F=w0EDM39M{l?HbHhGq6JpXuP@43D2>dWUPP$i*t;FY4ME<=p@)oWoV} ztdV=2jebn#CoZ2i=Cjzq7qrtbg)fD#cbQts`yeS_OVM=ZPbl_Tgwi$cOhBtx8Q2&=RkJTmY$pC1d~q diff --git a/group17/102228177/bin/data2_19/LinkedList$Node.class b/group17/102228177/bin/data2_19/LinkedList$Node.class deleted file mode 100644 index d788f96bca992ae620f269646337c51396c36dc3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 589 zcmZ`$%Syvg5Ixhz#>Uvz)@rSd**< zp?DOQC;VHh+Z)P$OwiN?Lec(PI^~)#pO{j$=ZP{WbLRSPd`>9W|4TF+7HM;L18FRq z$RbBb*Bee2Y{tX_GU`+`p<|JdXV0=Tdg#gUTJ$`rYz2McIU;mbJWXoxof{D-AXqb+ z&Uf2z4DPm}d>91dDj0=*dEu%?s`YeT2Wk@p^V0Wa*!Dye$wA(j}6&={W?U-;T9a(KfkXVwzw xJj#hE3vea_Du7w*Q}KP~C=;1xYl6zJCi42ooGQMyZ<;GMtGX+A}-~Eo+N&>ari% zf8o`ZCEV=7EgF)UY*&M1cl$S%ExXvo=Av`Y`<+AW2HY%Jnx5}FU%&T#pXYgh^oPH` z`4+$ljQinHIFL0|)6eLm_g*yk#br&D>J*!r~1p!_z8-+KTJN zl7eyFGP4RzsfzP$H(lv`)*9iRqJ76wP}2%kXY8C^8dLE0^v?5_bG#9N7vT_s2-QGg ze+V@Q$nHQ0epD-j3Cv2btt?uFIdgHDp6XKhjJZ5-7HoNU4~^1wyQt8x8xn%>npxs( z=t=#X)=2NXAI%B}_hJx06Iun|A%)~F_PYgisQ1p-(6%jvcHv>pChK%bqT^j_Hr_vzqFRQKDlhISh-RKh#`a(0**h&xv{Kc1TN**3K?t4 zmO7Bia7*^6_*4i@=WC|a4`pf3yx6Gflk5;a0ql!4G*pBafCZB?KR1# zi2Bj=6n;L9KN(Xfz3fu@jsB{5@1h{zgyxg>4jAhQerhO9qrqr4vY#X1(D^yBiB{ns z7yiS(s87zxFcJ0b!E-?8qm9{Wr??%Iwu@|!kWV*@vkSfaBoM<8`Y_I#Jx^uc#4*ix z%t2S?dl5Z4&qS=5d+2e}vIM8nvzLQ z2b=FB*i027pCR}d@r4Z>{Z2%g^^S=cUKJTzj8@FpsAD1ZaS7x9KuOv zV1RiWWZs6DkJIEmOe90hr4whLBx~!tSExGg1vPE-ovRDgW$o~vAnu8>;zl{G6 zhW9b>mA&w9Vq!NMM)r$sBEJZqVIv+joJ=~knq{rZN%DbuL2{T~0-Pnuagsbon6ILZ z3FyESfuARh*O!3Op`d-DBB$eH z46&VtbvvbEeY(nARi(;!P|-(Cy5mMrHJN5mgc?z@!vLxTB;Qh&_0_@qManKFYxUHXder*!FiXi-m#?HL|| a5#Db82-%M^st03ug{%DMHSv2EfxiLg>#O$w diff --git a/group17/102228177/bin/data2_19/List.class b/group17/102228177/bin/data2_19/List.class deleted file mode 100644 index a8d53da1d256bb79a3144df15a71a38b20709614..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 245 zcmZvX%L;-}5QhKBTiSJF&v4u%)hgNtg3uyp8z()8VhL(4dbAcjKo1p-(yH3b2lLM` z-#lOU2Y?kO7J7tHENi(uF4lgSR<#A4FwJBm{ajuWe|O4MR1-8A#{^e|-_gc95N0Cy zA83i>} z!c~EenA4;vLtHvDaMVE2`V91=SD>jP%kH*(Xjc?5?uOdxc6GYEc31_m$r!u4ZT@`0vQ>!N~qVa(NG}U(uG0ensk&@7BR@J2ZazqBvTJNfXh@9V2kY z37q6gD3L?(9KjLprLtepmaC&XyZi+y?bScnq@SZfU^7D`ePn0g79t5i56%)Qlt3YT zK7^+gypHo`051}r`^caXsH6jW8|m#FsYCR1NN->P7eYGw8qz2IXh0L`sSk*0yU|_Z zqCQl~2f80r-xR_!zKu{1oLvrC`H&S;EJX=Y3n<-(D6x>zh#W45&hKfhG#vc_!MOgSljDGh=Ii7oWp^0TWy?1x-^PF>@^E@~I{QL4R0GDy!#*{#=?MCjU?=N1d zHzT+8#D*m>``F!c>s{CH)VFsZt5zhCRbACnesrDD0`ra6S=YkQ-EVk|3f63VDlm8G!w+#f`$CvhE{6c!Arx)|&6g8Chbi6}|A zJ%jU=#Az%!*uqU4-v|_ps>wi!hVG%=*STFfBXC>d9F|zI8+JGvg*Ox|kRIq;AmB8E zVc1ePJUwBKG4O(>!4i>DygyU?<7k>E4kmY-C!A@nS-#z5l;B>hzJRPAAouVEW}joO zntG1H?8*O8E@fjz6oty0=!M&DSj(dpJA>x!aLQ6&rq;_ zn1Ib0jXCPdlVa9DF2rdGBmwX)P7zdSHxuxk1iYld`CqWwBP=&!iZ&@~zma+hT6)Y; z;66{0#W9Xj!jWScXA=%upKv@#oLQ`nQ2qtk1DvNf7ycfntZSOo7|jXVTVgRM$J|*= zXfBypktaUyO~SIyUHhNaRs4#y^)&VLHRiNAIyHusoy5|=IG6DOSKZ4xca4?SSQ;fZ zAVygpLrEtn8GMM3lH?(yb-z{*AXw+ejhgi*J{e)XmX7y7@CDm=V}!5cr(1kF9FUTk nu@!dmEc Date: Thu, 23 Feb 2017 15:30:10 +0800 Subject: [PATCH 016/216] =?UTF-8?q?=E8=BF=AD=E4=BB=A3=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- group17/102228177/src/data2_19/ArrayList.java | 38 +++++++++++++++++-- group17/102228177/src/data2_19/List.java | 1 + 2 files changed, 36 insertions(+), 3 deletions(-) diff --git a/group17/102228177/src/data2_19/ArrayList.java b/group17/102228177/src/data2_19/ArrayList.java index a28c29906d..0f0be01806 100644 --- a/group17/102228177/src/data2_19/ArrayList.java +++ b/group17/102228177/src/data2_19/ArrayList.java @@ -1,5 +1,9 @@ package data2_19; +import java.util.ConcurrentModificationException; +import java.util.NoSuchElementException; + + public class ArrayList implements List{ public static final int defLen = 10; private Object[] elements; @@ -97,9 +101,32 @@ public int size(){ return size; } -// public Iterator iterator(){ -// return null; -// } + public Iterator iterator(){ + return new ArrayListIterator(); + } + + private class ArrayListIterator implements Iterator{ + int cursor; + + @Override + public boolean hasNext() { + return cursor != size; + } + + @Override + public Object next() { + int i = cursor; + if(i >= size){ + throw new NoSuchElementException(); + } + if (i >= elements.length){ + throw new ConcurrentModificationException(); + } + cursor = i+1; + return elements[i]; + } + } + public static void main(String[] args) { ArrayList list = new ArrayList(); list.add(0); @@ -112,5 +139,10 @@ public static void main(String[] args) { for (int i = 0; i < list.size(); i++) { System.out.println(i+":"+list.get(i)); } + + Iterator it = list.iterator(); + while (it.hasNext()) { + System.out.println(it.next()); + } } } diff --git a/group17/102228177/src/data2_19/List.java b/group17/102228177/src/data2_19/List.java index 95c32f3b27..9f1a3f5ce6 100644 --- a/group17/102228177/src/data2_19/List.java +++ b/group17/102228177/src/data2_19/List.java @@ -1,6 +1,7 @@ package data2_19; public interface List { + public void add(Object o); public void add(int index, Object o); public Object get(int index); From ec6412330824ea8f7c7c91c8645135867d02d180 Mon Sep 17 00:00:00 2001 From: zoakerc Date: Thu, 23 Feb 2017 17:00:45 +0800 Subject: [PATCH 017/216] =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96homework?= =?UTF-8?q?=E4=BD=9C=E4=B8=9A=E7=9B=AE=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- group07/562247675/homework/.gitignore | 22 ++++++++++++++++++++++ group07/562247675/homework/readme.md | 1 + 2 files changed, 23 insertions(+) create mode 100644 group07/562247675/homework/.gitignore create mode 100644 group07/562247675/homework/readme.md diff --git a/group07/562247675/homework/.gitignore b/group07/562247675/homework/.gitignore new file mode 100644 index 0000000000..df3ade545c --- /dev/null +++ b/group07/562247675/homework/.gitignore @@ -0,0 +1,22 @@ +rebel.xml +.idea/ +*.iml +target/ +*.class +*.jar +*.war +*.ear +hs_err_pid* +*.DS_Store +._* +.Trashes +.TemporaryItems +desktop.ini +Thumbs.db +$RECYCLE.BIN/ +*.lnk +.metadata +.settings +.classpath +.mymetadata +.project \ No newline at end of file diff --git a/group07/562247675/homework/readme.md b/group07/562247675/homework/readme.md new file mode 100644 index 0000000000..2a54b7ef9a --- /dev/null +++ b/group07/562247675/homework/readme.md @@ -0,0 +1 @@ +# Homework \ No newline at end of file From 2d70c98a1cc5e0f69a7ca92249d1259b55d5f408 Mon Sep 17 00:00:00 2001 From: zoakerc Date: Thu, 23 Feb 2017 17:01:02 +0800 Subject: [PATCH 018/216] =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96homework?= =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- group07/562247675/homework/pom.xml | 53 ++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 group07/562247675/homework/pom.xml diff --git a/group07/562247675/homework/pom.xml b/group07/562247675/homework/pom.xml new file mode 100644 index 0000000000..17a2c5f0fd --- /dev/null +++ b/group07/562247675/homework/pom.xml @@ -0,0 +1,53 @@ + + + + 4.0.0 + + com.coding2017.group7 + homework + 1.0-SNAPSHOT + + + homework-0226 + + + pom + + UTF-8 + 1.6 + 1.6 + + + + + junit + junit + 4.12 + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + ${maven.compiler.source} + ${maven.compiler.target} + ${project.build.sourceEncoding} + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + + + From b76c841d8aeb8a8c65b9b849e371b0016a4dc938 Mon Sep 17 00:00:00 2001 From: zoakerc Date: Thu, 23 Feb 2017 17:02:32 +0800 Subject: [PATCH 019/216] =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=960226?= =?UTF-8?q?=E4=BD=9C=E4=B8=9A=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../562247675/homework/homework-0226/pom.xml | 22 ++++++++ .../group7/homework/c0226/ArrayList.java | 33 ++++++++++++ .../group7/homework/c0226/BinaryTreeNode.java | 37 +++++++++++++ .../group7/homework/c0226/Iterator.java | 8 +++ .../group7/homework/c0226/LinkedList.java | 53 +++++++++++++++++++ .../group7/homework/c0226/List.java | 13 +++++ .../group7/homework/c0226/Queue.java | 19 +++++++ .../group7/homework/c0226/Stack.java | 24 +++++++++ .../src/main/resources/readme.md | 0 .../src/test/resources/readme.md | 0 group07/562247675/notebook/readme.md | 1 + 11 files changed, 210 insertions(+) create mode 100644 group07/562247675/homework/homework-0226/pom.xml create mode 100644 group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/ArrayList.java create mode 100644 group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/BinaryTreeNode.java create mode 100644 group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/Iterator.java create mode 100644 group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/LinkedList.java create mode 100644 group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/List.java create mode 100644 group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/Queue.java create mode 100644 group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/Stack.java create mode 100644 group07/562247675/homework/homework-0226/src/main/resources/readme.md create mode 100644 group07/562247675/homework/homework-0226/src/test/resources/readme.md create mode 100644 group07/562247675/notebook/readme.md diff --git a/group07/562247675/homework/homework-0226/pom.xml b/group07/562247675/homework/homework-0226/pom.xml new file mode 100644 index 0000000000..f6a6002f6d --- /dev/null +++ b/group07/562247675/homework/homework-0226/pom.xml @@ -0,0 +1,22 @@ + + + + com.coding2017.group7 + homework + 1.0-SNAPSHOT + + 4.0.0 + + com.coding2017.group7 + homework-0226 + + + junit + junit + + + + \ No newline at end of file diff --git a/group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/ArrayList.java b/group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/ArrayList.java new file mode 100644 index 0000000000..3381bbee8b --- /dev/null +++ b/group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/ArrayList.java @@ -0,0 +1,33 @@ +package com.coding2017.group7.homework.c0226; + +public class ArrayList implements List { + + private int size = 0; + + private Object[] elementData = new Object[100]; + + public void add(Object o) { + + } + + public void add(int index, Object o) { + + } + + public Object get(int index) { + return null; + } + + public Object remove(int index) { + return null; + } + + public int size() { + return -1; + } + + public Iterator iterator() { + return null; + } + +} diff --git a/group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/BinaryTreeNode.java b/group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/BinaryTreeNode.java new file mode 100644 index 0000000000..b666a31c31 --- /dev/null +++ b/group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/BinaryTreeNode.java @@ -0,0 +1,37 @@ +package com.coding2017.group7.homework.c0226; + +public class BinaryTreeNode { + + private Object data; + private BinaryTreeNode left; + private BinaryTreeNode right; + + 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) { + return null; + } + +} diff --git a/group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/Iterator.java b/group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/Iterator.java new file mode 100644 index 0000000000..f97b7dfdd3 --- /dev/null +++ b/group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/Iterator.java @@ -0,0 +1,8 @@ +package com.coding2017.group7.homework.c0226; + +public interface Iterator { + public boolean hasNext(); + + public Object next(); + +} diff --git a/group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/LinkedList.java b/group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/LinkedList.java new file mode 100644 index 0000000000..4c2ed0c5dc --- /dev/null +++ b/group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/LinkedList.java @@ -0,0 +1,53 @@ +package com.coding2017.group7.homework.c0226; + +public class LinkedList implements List { + + private Node head; + + public void add(Object o) { + + } + + public void add(int index, Object o) { + + } + + public Object get(int index) { + return null; + } + + public Object remove(int index) { + return null; + } + + public int size() { + return -1; + } + + public void addFirst(Object o) { + + } + + public void addLast(Object o) { + + } + + public Object removeFirst() { + return null; + } + + public Object removeLast() { + return null; + } + + public Iterator iterator() { + return null; + } + + + private static class Node { + Object data; + Node next; + + } +} diff --git a/group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/List.java b/group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/List.java new file mode 100644 index 0000000000..5d462e3ebd --- /dev/null +++ b/group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/List.java @@ -0,0 +1,13 @@ +package com.coding2017.group7.homework.c0226; + +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(); +} diff --git a/group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/Queue.java b/group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/Queue.java new file mode 100644 index 0000000000..6ce10c6cef --- /dev/null +++ b/group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/Queue.java @@ -0,0 +1,19 @@ +package com.coding2017.group7.homework.c0226; + +public class Queue { + + public void enQueue(Object o) { + } + + public Object deQueue() { + return null; + } + + public boolean isEmpty() { + return false; + } + + public int size() { + return -1; + } +} diff --git a/group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/Stack.java b/group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/Stack.java new file mode 100644 index 0000000000..b75c78b8fd --- /dev/null +++ b/group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/Stack.java @@ -0,0 +1,24 @@ +package com.coding2017.group7.homework.c0226; + +public class Stack { + private ArrayList elementData = new ArrayList(); + + public void push(Object o) { + } + + public Object pop() { + return null; + } + + public Object peek() { + return null; + } + + public boolean isEmpty() { + return false; + } + + public int size() { + return -1; + } +} diff --git a/group07/562247675/homework/homework-0226/src/main/resources/readme.md b/group07/562247675/homework/homework-0226/src/main/resources/readme.md new file mode 100644 index 0000000000..e69de29bb2 diff --git a/group07/562247675/homework/homework-0226/src/test/resources/readme.md b/group07/562247675/homework/homework-0226/src/test/resources/readme.md new file mode 100644 index 0000000000..e69de29bb2 diff --git a/group07/562247675/notebook/readme.md b/group07/562247675/notebook/readme.md new file mode 100644 index 0000000000..d36f4b9c53 --- /dev/null +++ b/group07/562247675/notebook/readme.md @@ -0,0 +1 @@ +# Notebook \ No newline at end of file From b9d53571f55c2b0946469139766b8b7ae6469988 Mon Sep 17 00:00:00 2001 From: zoakerc Date: Thu, 23 Feb 2017 17:02:53 +0800 Subject: [PATCH 020/216] =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96ArrayList?= =?UTF-8?q?=E6=B5=8B=E8=AF=95=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../group7/homework/c0226/ArrayListTest.java | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 group07/562247675/homework/homework-0226/src/test/java/com/coding2017/group7/homework/c0226/ArrayListTest.java diff --git a/group07/562247675/homework/homework-0226/src/test/java/com/coding2017/group7/homework/c0226/ArrayListTest.java b/group07/562247675/homework/homework-0226/src/test/java/com/coding2017/group7/homework/c0226/ArrayListTest.java new file mode 100644 index 0000000000..3a3a4fb045 --- /dev/null +++ b/group07/562247675/homework/homework-0226/src/test/java/com/coding2017/group7/homework/c0226/ArrayListTest.java @@ -0,0 +1,11 @@ +package com.coding2017.group7.homework.c0226; + +import org.junit.Test; + +public class ArrayListTest { + @Test + public void add() throws Exception { + + } + +} \ No newline at end of file From 9f1df17e632be18aacd30ed801defb083f30b9d2 Mon Sep 17 00:00:00 2001 From: guodongym Date: Thu, 23 Feb 2017 17:24:13 +0800 Subject: [PATCH 021/216] =?UTF-8?q?=E9=93=BE=E8=A1=A8=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/guodong/datastructure/LinkedList.java | 166 +++++++++++++++--- 1 file changed, 144 insertions(+), 22 deletions(-) diff --git a/group12/377401843/learning_1/src/com/guodong/datastructure/LinkedList.java b/group12/377401843/learning_1/src/com/guodong/datastructure/LinkedList.java index fc801505f1..7616768930 100644 --- a/group12/377401843/learning_1/src/com/guodong/datastructure/LinkedList.java +++ b/group12/377401843/learning_1/src/com/guodong/datastructure/LinkedList.java @@ -1,45 +1,167 @@ package com.guodong.datastructure; public class LinkedList implements List { - + + private int size; + private Node head; - - public void add(Object o){ - + + private Node last; + + /** + * 向 链表尾端插入元素 + * + * @Method add + * @param o + * @see com.guodong.datastructure.List#add(java.lang.Object) + */ + public void add(Object o) { + linkLast(o); } - public void add(int index , Object o){ - + + /** + * 向链表指定位置插入元素 + * + * @Method add + * @param index + * @param o + * @see com.guodong.datastructure.List#add(int, java.lang.Object) + */ + public void add(int index, Object o) { + checkIndexForAdd(index); + + if (index == size) { + linkLast(o); + } else { + Node prevNode = getNodeByIndex(index - 1); // 取到当前下标的前一个节点 + Node currentNode = getNodeByIndex(index); // 取到当前下标节点 + Node newNode = new Node(o, currentNode); // 创建新节点,新节点的下一个节点为当前下标节点 + + if (prevNode == null) { // 如果前一个节点为空,说明从头部插入 + head = newNode; + } else { + prevNode.next = newNode; + } + size++; + } } - public Object get(int index){ - return null; + + /** + * 根据下标获取链表中元素 + * + * @Method get + * @param index + * @return + * @see com.guodong.datastructure.List#get(int) + */ + public Object get(int index) { + checkIndexForGet(index); + return getNodeByIndex(index).data; } - public Object remove(int index){ + + public Object remove(int index) { return null; } - - public int size(){ - return -1; + + public int size() { + return size; } - - public void addFirst(Object o){ - + + public void addFirst(Object o) { + } - public void addLast(Object o){ - + + public void addLast(Object o) { + linkLast(o); } - public Object removeFirst(){ + + public Object removeFirst() { return null; } - public Object removeLast(){ + + public Object removeLast() { return null; } - public Iterator iterator(){ + + public Iterator iterator() { return null; } + + /** + * 根据下标获取对应的节点 + * + * @MethodName getNodeByIndex + * @author zhaogd + * @date 2017年2月23日 下午3:32:48 + * @param index + * @return + */ + private Node getNodeByIndex(int index) { + Node n = head; + for (int i = 0; i < index; i++) { + n = n.next; + } + return n; + } + + /** + * 在链表尾端插入节点 + * + * @MethodName linkLast + * @author zhaogd + * @date 2017年2月23日 下午3:14:28 + * @param o + */ + private void linkLast(Object o) { + Node n = last; // 取出原尾端数据 + Node newNode = new Node(o, null); // 创建新节点 + last = newNode; // 把新节点放入链表尾端 + // 如果原尾端为空,说明链表为空,把新节点也放入链表头部 + // 如果不为空,把原尾端节点指向新节点 + if (n == null) { + head = newNode; + } else { + n.next = newNode; + } + + size++; + } + + /** + * 检查下标是否合法 + * + * @MethodName checkIndexForAdd + * @author zhaogd + * @date 2017年2月23日 下午3:05:07 + * @param index + */ + private void checkIndexForAdd(int index) { + if (index < 0 || index > size) { + throw new IndexOutOfBoundsException("Index:" + index + ",Size:" + size); + } + } - - private static class Node{ + /** + * 检查下标是否合法 + * + * @MethodName checkIndexForGet + * @author zhaogd + * @date 2017年2月23日 下午4:21:35 + * @param index + */ + private void checkIndexForGet(int index) { + if (index < 0 || index >= size) { + throw new IndexOutOfBoundsException("Index:" + index + ",Size:" + size); + } + } + + private static class Node { Object data; Node next; + + Node(Object data, Node next) { + this.data = data; + this.next = next; + } } } From 84afca6aec0d4c5842199e723d412646cb20a88b Mon Sep 17 00:00:00 2001 From: gaodekui <13526428940@163.com> Date: Thu, 23 Feb 2017 17:42:31 +0800 Subject: [PATCH 022/216] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org.eclipse.core.resources.prefs | 2 + .../src/com/coding/basic/ArrayList.java | 39 ++++ .../src/com/coding/basic/BinaryTreeNode.java | 29 +++ .../src/com/coding/basic/Iterator.java | 6 + .../src/com/coding/basic/LinkedList.java | 62 ++++++ .../1924332561/src/com/coding/basic/List.java | 9 + .../src/com/coding/basic/Queue.java | 23 +++ .../src/com/coding/basic/Stack.java | 29 +++ group16/214074094/readme.txt | 1 + .../src/com/coding/basic/ArrayList.java | 60 ++++++ .../src/com/coding/basic/BinaryTreeNode.java | 32 +++ .../src/com/coding/basic/Iterator.java | 7 + .../src/com/coding/basic/LinkedList.java | 46 +++++ .../214074094/src/com/coding/basic/List.java | 15 ++ .../214074094/src/com/coding/basic/Queue.java | 19 ++ .../214074094/src/com/coding/basic/Stack.java | 22 ++ .../src/com/coding/basic/ArrayList.java | 100 +++++++++ .../src/com/coding/basic/BinaryTreeNode.java | 67 ++++++ .../src/com/coding/basic/Iterator.java | 7 + .../src/com/coding/basic/LinkedList.java | 195 ++++++++++++++++++ .../2562124714/src/com/coding/basic/List.java | 9 + .../src/com/coding/basic/Queue.java | 24 +++ .../src/com/coding/basic/Stack.java | 34 +++ .../src/com/coding/basic/TreeData.java | 26 +++ 24 files changed, 863 insertions(+) create mode 100644 group16/1924332561/.settings/org.eclipse.core.resources.prefs create mode 100644 group16/1924332561/src/com/coding/basic/ArrayList.java create mode 100644 group16/1924332561/src/com/coding/basic/BinaryTreeNode.java create mode 100644 group16/1924332561/src/com/coding/basic/Iterator.java create mode 100644 group16/1924332561/src/com/coding/basic/LinkedList.java create mode 100644 group16/1924332561/src/com/coding/basic/List.java create mode 100644 group16/1924332561/src/com/coding/basic/Queue.java create mode 100644 group16/1924332561/src/com/coding/basic/Stack.java create mode 100644 group16/214074094/readme.txt create mode 100644 group16/214074094/src/com/coding/basic/ArrayList.java create mode 100644 group16/214074094/src/com/coding/basic/BinaryTreeNode.java create mode 100644 group16/214074094/src/com/coding/basic/Iterator.java create mode 100644 group16/214074094/src/com/coding/basic/LinkedList.java create mode 100644 group16/214074094/src/com/coding/basic/List.java create mode 100644 group16/214074094/src/com/coding/basic/Queue.java create mode 100644 group16/214074094/src/com/coding/basic/Stack.java create mode 100644 group16/2562124714/src/com/coding/basic/ArrayList.java create mode 100644 group16/2562124714/src/com/coding/basic/BinaryTreeNode.java create mode 100644 group16/2562124714/src/com/coding/basic/Iterator.java create mode 100644 group16/2562124714/src/com/coding/basic/LinkedList.java create mode 100644 group16/2562124714/src/com/coding/basic/List.java create mode 100644 group16/2562124714/src/com/coding/basic/Queue.java create mode 100644 group16/2562124714/src/com/coding/basic/Stack.java create mode 100644 group16/2562124714/src/com/coding/basic/TreeData.java diff --git a/group16/1924332561/.settings/org.eclipse.core.resources.prefs b/group16/1924332561/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000000..99f26c0203 --- /dev/null +++ b/group16/1924332561/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +encoding/=UTF-8 diff --git a/group16/1924332561/src/com/coding/basic/ArrayList.java b/group16/1924332561/src/com/coding/basic/ArrayList.java new file mode 100644 index 0000000000..9e20bf25c4 --- /dev/null +++ b/group16/1924332561/src/com/coding/basic/ArrayList.java @@ -0,0 +1,39 @@ +package com.coding.basic; + +public class ArrayList implements List{ + private int size = 0; + + private Object[] elementDate = new Object[100]; + + + @Override + public void add(Object o) { + + } + + @Override + public void add(int index, Object o) { + + } + + @Override + public Object get(int dex) { + + return null; + } + + @Override + public Object remove(int index) { + return null; + } + + @Override + public int size() { + return -1; + } + + public Iterator iterator(){ + return null; + } + +} diff --git a/group16/1924332561/src/com/coding/basic/BinaryTreeNode.java b/group16/1924332561/src/com/coding/basic/BinaryTreeNode.java new file mode 100644 index 0000000000..e7d9e43e24 --- /dev/null +++ b/group16/1924332561/src/com/coding/basic/BinaryTreeNode.java @@ -0,0 +1,29 @@ +package com.coding.basic; + +public class BinaryTreeNode { + private Object date; + private BinaryTreeNode left; + private BinaryTreeNode right; + public Object getDate() { + return date; + } + public void setDate(Object date) { + this.date = date; + } + 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){ + return null; + } +} diff --git a/group16/1924332561/src/com/coding/basic/Iterator.java b/group16/1924332561/src/com/coding/basic/Iterator.java new file mode 100644 index 0000000000..e7cbd474ec --- /dev/null +++ b/group16/1924332561/src/com/coding/basic/Iterator.java @@ -0,0 +1,6 @@ +package com.coding.basic; + +public interface Iterator { + public boolean hasNext(); + public Object next(); +} diff --git a/group16/1924332561/src/com/coding/basic/LinkedList.java b/group16/1924332561/src/com/coding/basic/LinkedList.java new file mode 100644 index 0000000000..d39557be29 --- /dev/null +++ b/group16/1924332561/src/com/coding/basic/LinkedList.java @@ -0,0 +1,62 @@ +package com.coding.basic; + +public class LinkedList implements List { + + private static class Node{ + Object date; + Node next; + } + + private Node head; + + + @Override + public void add(Object o) { + + } + + @Override + public void add(int index, Object o) { + + } + + @Override + public Object get(int dex) { + return null; + } + + @Override + public Object remove(int index) { + return null; + } + + @Override + public int size() { + + return 0; + } + + public void addFirst(Object o){ + + } + + public void addLast(Object o){ + + } + + public Object removeFirst(){ + + return null; + } + + public Object removeLast(){ + + return null; + } + + public Iterator iterator(){ + + return null; + } + +} diff --git a/group16/1924332561/src/com/coding/basic/List.java b/group16/1924332561/src/com/coding/basic/List.java new file mode 100644 index 0000000000..9be54168b6 --- /dev/null +++ b/group16/1924332561/src/com/coding/basic/List.java @@ -0,0 +1,9 @@ +package com.coding.basic; + +public interface List { + public void add(Object o); + public void add(int index,Object o); + public Object get(int dex); + public Object remove(int index); + public int size(); +} diff --git a/group16/1924332561/src/com/coding/basic/Queue.java b/group16/1924332561/src/com/coding/basic/Queue.java new file mode 100644 index 0000000000..7dc7b4820a --- /dev/null +++ b/group16/1924332561/src/com/coding/basic/Queue.java @@ -0,0 +1,23 @@ +package com.coding.basic; + +public class Queue { + + public void enQueue(){ + + + } + public Object deQueue(){ + + return null; + } + + public boolean isEmpty(){ + + return false; + } + + public int size(){ + + return -1; + } +} diff --git a/group16/1924332561/src/com/coding/basic/Stack.java b/group16/1924332561/src/com/coding/basic/Stack.java new file mode 100644 index 0000000000..7a49c48279 --- /dev/null +++ b/group16/1924332561/src/com/coding/basic/Stack.java @@ -0,0 +1,29 @@ +package com.coding.basic; + +public class Stack { + private ArrayList elementDate = new ArrayList(); + + public void push(Object o){ + + } + + public Object pop(){ + + return null; + } + + public Object peek(){ + + return null; + } + + public boolean isEmpty(){ + + return false; + } + + public int size(){ + + return -1; + } +} diff --git a/group16/214074094/readme.txt b/group16/214074094/readme.txt new file mode 100644 index 0000000000..c1b06ddcc2 --- /dev/null +++ b/group16/214074094/readme.txt @@ -0,0 +1 @@ +I am 北京-Shane diff --git a/group16/214074094/src/com/coding/basic/ArrayList.java b/group16/214074094/src/com/coding/basic/ArrayList.java new file mode 100644 index 0000000000..a50055225b --- /dev/null +++ b/group16/214074094/src/com/coding/basic/ArrayList.java @@ -0,0 +1,60 @@ +package com.coding.basic; + +public class ArrayList implements List { + + private int size = 0; + + private final static Object[] EMPTY_ELEMENTDATA = {}; + + /** + * 默认容量 + */ + private static int DEFAULT_CAPACITY = 10; + + private Object[] elementData; + + public ArrayList() { + this.elementData = EMPTY_ELEMENTDATA; + } + + public static void main(String[] args) { + ArrayList list = new ArrayList(); + System.out.println(list.elementData == list.EMPTY_ELEMENTDATA); + } + + public void add(Object o) { + if (elementData == EMPTY_ELEMENTDATA) { + elementData = new Object[DEFAULT_CAPACITY]; + }else if(size < elementData.length){ + size++; + }else{ + _grow(); + } + elementData[size] = o; + } + + private void _grow() { + + } + + public void add(int index, Object o) { + + } + + public Object get(int index) { + return null; + } + + public Object remove(int index) { + return null; + } + + public int size() { + return -1; + } + + public Iterator iterator() { + return null; + } + +} diff --git a/group16/214074094/src/com/coding/basic/BinaryTreeNode.java b/group16/214074094/src/com/coding/basic/BinaryTreeNode.java new file mode 100644 index 0000000000..d7ac820192 --- /dev/null +++ b/group16/214074094/src/com/coding/basic/BinaryTreeNode.java @@ -0,0 +1,32 @@ +package com.coding.basic; + +public class BinaryTreeNode { + + private Object data; + private BinaryTreeNode left; + private BinaryTreeNode right; + + 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){ + return null; + } + +} diff --git a/group16/214074094/src/com/coding/basic/Iterator.java b/group16/214074094/src/com/coding/basic/Iterator.java new file mode 100644 index 0000000000..06ef6311b2 --- /dev/null +++ b/group16/214074094/src/com/coding/basic/Iterator.java @@ -0,0 +1,7 @@ +package com.coding.basic; + +public interface Iterator { + public boolean hasNext(); + public Object next(); + +} diff --git a/group16/214074094/src/com/coding/basic/LinkedList.java b/group16/214074094/src/com/coding/basic/LinkedList.java new file mode 100644 index 0000000000..e2c4e5e795 --- /dev/null +++ b/group16/214074094/src/com/coding/basic/LinkedList.java @@ -0,0 +1,46 @@ +package com.coding.basic; + +public class LinkedList implements List { + + private Node head; + + public void add(Object o){ + + } + public void add(int index , Object o){ + + } + public Object get(int index){ + return null; + } + public Object remove(int index){ + return null; + } + + public int size(){ + return -1; + } + + public void addFirst(Object o){ + + } + public void addLast(Object o){ + + } + public Object removeFirst(){ + return null; + } + public Object removeLast(){ + return null; + } + public Iterator iterator(){ + return null; + } + + + private static class Node{ + Object data; + Node next; + + } +} diff --git a/group16/214074094/src/com/coding/basic/List.java b/group16/214074094/src/com/coding/basic/List.java new file mode 100644 index 0000000000..fdaf43f86f --- /dev/null +++ b/group16/214074094/src/com/coding/basic/List.java @@ -0,0 +1,15 @@ +package com.coding.basic; + +public interface List { + + void add(Object o); + + void add(int index, Object o); + + Object get(int index); + + Object remove(int index); + + int size(); + +} diff --git a/group16/214074094/src/com/coding/basic/Queue.java b/group16/214074094/src/com/coding/basic/Queue.java new file mode 100644 index 0000000000..36e516e266 --- /dev/null +++ b/group16/214074094/src/com/coding/basic/Queue.java @@ -0,0 +1,19 @@ +package com.coding.basic; + +public class Queue { + + public void enQueue(Object o){ + } + + public Object deQueue(){ + return null; + } + + public boolean isEmpty(){ + return false; + } + + public int size(){ + return -1; + } +} diff --git a/group16/214074094/src/com/coding/basic/Stack.java b/group16/214074094/src/com/coding/basic/Stack.java new file mode 100644 index 0000000000..a5a04de76d --- /dev/null +++ b/group16/214074094/src/com/coding/basic/Stack.java @@ -0,0 +1,22 @@ +package com.coding.basic; + +public class Stack { + private ArrayList elementData = new ArrayList(); + + public void push(Object o){ + } + + public Object pop(){ + return null; + } + + public Object peek(){ + return null; + } + public boolean isEmpty(){ + return false; + } + public int size(){ + return -1; + } +} diff --git a/group16/2562124714/src/com/coding/basic/ArrayList.java b/group16/2562124714/src/com/coding/basic/ArrayList.java new file mode 100644 index 0000000000..f1d5a9fdd9 --- /dev/null +++ b/group16/2562124714/src/com/coding/basic/ArrayList.java @@ -0,0 +1,100 @@ +package com.coding.basic; + +public class ArrayList implements List { + + private int size = 0; + + private int Scale; //每次扩展大小 + + private Object[] elementData = new Object[100]; + + public ArrayList() + { + this.Scale = 10; + } + + public ArrayList(int i) + { + this.Scale = i; + } + + public void add(Object o){ + if (this.size == elementData.length) + { + DoEnlage(); + } + elementData[size] = o; + this.size++; + } + + private void DoEnlage() + { + if (this.Scale >= 1 && this.Scale <= 10000) + { + Object[] NewElementData = new Object[this.elementData.length + this.Scale]; + System.arraycopy(this.elementData,0,NewElementData,0,this.elementData.length); + + this.elementData = NewElementData; + } + + } + + //index从1开始 位置1,2,3,4,5,6 + public void add(int index, Object o){ + if (this.size == elementData.length) + { + DoEnlage(); + } + int i = 0; + //遍历赋值 + for(i = this.size; i >= index;i--) + { + this.elementData[i] = this.elementData[i - 1]; + } + + this.elementData[i] = o; + this.size++; + + } + + public Object get(int index){ + if (index >= 1 && index <= this.size) + { + return this.elementData[index - 1]; + } + else { + return null; + } + + + } + + public Object remove(int index){ + if (index >= 1 && index <= this.size) + { + int i = 0; + Object DelElement = this.elementData[index - 1]; + for(i = index; i <= this.size; i++) + { + this.elementData[i - 1] = this.elementData[i]; + } + this.elementData[i] = null; + this.size--; + + return DelElement; + + } + else { + return null; + } + } + + public int size(){ + return this.size; + } + + public Iterator iterator(){ + return null; + } + +} diff --git a/group16/2562124714/src/com/coding/basic/BinaryTreeNode.java b/group16/2562124714/src/com/coding/basic/BinaryTreeNode.java new file mode 100644 index 0000000000..680c20c419 --- /dev/null +++ b/group16/2562124714/src/com/coding/basic/BinaryTreeNode.java @@ -0,0 +1,67 @@ +package com.coding.basic; + +public class BinaryTreeNode { + + private TreeData treeData; + //private Object data; + private BinaryTreeNode left; + private BinaryTreeNode right; + + public TreeData getData() { + return treeData; + } + public void setData(TreeData data) { + this.treeData = 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(TreeData o){ + + //遍历寻找元素应该插入的位置 + if (o.compareTo(this.treeData) < 0) + { + if (this.left != null) + { + this.left.insert(o); + } + else + { + BinaryTreeNode NewNode = new BinaryTreeNode(); + NewNode.setData(o); + NewNode.setLeft(null); + NewNode.setRight(null); + this.left = NewNode; + } + } + else + { + if (this.right != null) + { + this.right.insert(o); + } + else + { + BinaryTreeNode NewNode = new BinaryTreeNode(); + NewNode.setData(o); + NewNode.setLeft(null); + NewNode.setRight(null); + this.right = NewNode; + } + } + + + return null; + } + +} diff --git a/group16/2562124714/src/com/coding/basic/Iterator.java b/group16/2562124714/src/com/coding/basic/Iterator.java new file mode 100644 index 0000000000..06ef6311b2 --- /dev/null +++ b/group16/2562124714/src/com/coding/basic/Iterator.java @@ -0,0 +1,7 @@ +package com.coding.basic; + +public interface Iterator { + public boolean hasNext(); + public Object next(); + +} diff --git a/group16/2562124714/src/com/coding/basic/LinkedList.java b/group16/2562124714/src/com/coding/basic/LinkedList.java new file mode 100644 index 0000000000..8ef49d108a --- /dev/null +++ b/group16/2562124714/src/com/coding/basic/LinkedList.java @@ -0,0 +1,195 @@ +package com.coding.basic; + +import com.sun.org.apache.bcel.internal.generic.NEW; + +import java.awt.*; + +public class LinkedList implements List { + + private Node head; + private int Size; + + public void add(Object o){ + Node NewNode = new Node(o); + + if (this.head == null) + { + head = NewNode; + } + else + { + Node node; + for (node = head; node.next != null; node = node.next) + { + } + node.next = NewNode; + } + this.Size++; + + } + //index为位置1,2,3,4,5,6,7 + public void add(int index , Object o){ + Node NewNode = new Node(o); + + if (1 == index) + { + NewNode.next = head; + head = NewNode; + } + else { + Node node; + int i = 0; + for (i = 1, node = head; i < index - 1; i++, node = node.next) { + } + NewNode.next = node.next; + node.next = NewNode; + } + this.Size++; + + } + public Object get(int index){ + Node node; + int i = 0; + + for (i = 1, node = head; i < index ; i++, node = node.next) { + } + + return node.data; +// return null; + } + public Object remove(int index){ + Node node; + int i = 0; + + if (1 == index) + { + if (head.next == null) + { + Object DelData = head.data; + head = null; + this.Size--; + return DelData; + } + else + { + Node DelNode = head; + head = DelNode.next; + DelNode.next = null; + this.Size--; + return DelNode.data; + + } + } + else { + + for (i = 1, node = head; i < index - 1; i++, node = node.next) { + } + Node DelNode = node.next; + node.next = DelNode.next; + DelNode.next = null; + this.Size--; + return DelNode.data; + } + } + + public int size(){ + + return this.Size; + } + + public void addFirst(Object o){ + Node NewNode = new Node(0); + + if (null == this.head) + { + NewNode.next = null; + head = NewNode; + } + else + { + NewNode.next = head; + head = NewNode; + } + + this.Size++; + + } + public void addLast(Object o){ + Node NewNode = new Node(o); + + if (this.Size == 0) + { + NewNode.next = null; + head = NewNode; + } + else + { +// int i = 0; + Node node; + for (node = head; node.next != null; node = node.next) { + + } + node.next = NewNode; + } + + this.Size++; + + } + public Object removeFirst(){ + Node DelFirst; + + if (1 == this.Size) + { + DelFirst = this.head; + DelFirst.next = null; + head = null; + } + else + { + DelFirst = this.head; + head = head.next; + DelFirst.next = null; + } + this.Size--; + + return DelFirst.data; + } + public Object removeLast(){ + Node DelLast; + + if (1 == this.Size) + { + DelLast = head; + DelLast.next = null; + head = null; + } + else + { + Node node; + for (node = head; node.next.next != null; node = node.next) { + + } + DelLast = node.next; + node.next = null; + } + this.Size--; + + return DelLast.data; + } + public Iterator iterator(){ + return null; + } + + + private static class Node{ + Object data; + Node next; + + public Node(Object o) + { + this.data = o; + this.next = null; + } + + } +} diff --git a/group16/2562124714/src/com/coding/basic/List.java b/group16/2562124714/src/com/coding/basic/List.java new file mode 100644 index 0000000000..10d13b5832 --- /dev/null +++ b/group16/2562124714/src/com/coding/basic/List.java @@ -0,0 +1,9 @@ +package com.coding.basic; + +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(); +} diff --git a/group16/2562124714/src/com/coding/basic/Queue.java b/group16/2562124714/src/com/coding/basic/Queue.java new file mode 100644 index 0000000000..40b8f22607 --- /dev/null +++ b/group16/2562124714/src/com/coding/basic/Queue.java @@ -0,0 +1,24 @@ +package com.coding.basic; + +public class Queue { + private ArrayList elementData = new ArrayList(); + + public void enQueue(Object o){ + elementData.add(o); + } + + public Object deQueue(){ + + + return elementData.get(1); + } + + public boolean isEmpty(){ + + return elementData.size() == 0 ? true : false; + } + + public int size(){ + return elementData.size(); + } +} diff --git a/group16/2562124714/src/com/coding/basic/Stack.java b/group16/2562124714/src/com/coding/basic/Stack.java new file mode 100644 index 0000000000..61c92b2fe7 --- /dev/null +++ b/group16/2562124714/src/com/coding/basic/Stack.java @@ -0,0 +1,34 @@ +package com.coding.basic; + +public class Stack { + private ArrayList elementData = new ArrayList(); + +// public Stack() +// { +// elementData +// } + + public void push(Object o){ + elementData.add(0); + } + + public Object pop(){ + Object o = elementData.remove(elementData.size()); + return o; + } + + public Object peek(){ + Object o = elementData.get(elementData.size()); + return o; + } + public boolean isEmpty(){ + if (elementData.size() == 0) + { + return true; + } + return false; + } + public int size(){ + return elementData.size(); + } +} diff --git a/group16/2562124714/src/com/coding/basic/TreeData.java b/group16/2562124714/src/com/coding/basic/TreeData.java new file mode 100644 index 0000000000..3c39539b28 --- /dev/null +++ b/group16/2562124714/src/com/coding/basic/TreeData.java @@ -0,0 +1,26 @@ +package com.coding.basic; + +/** + * Created by zhangwj on 2017/2/22. + */ +public class TreeData> implements Comparable>{ + private int s; + private T t; + + public T getT() + { + return t; + } + + @Override + public int compareTo(TreeData o) { + return getT().compareTo(o.getT()); + } + +// public int compareTo(TreeData o) +// { +// +// } + + +} From 3b9b110f2e0e6a3dc7f25d4db004c4499a120f3a Mon Sep 17 00:00:00 2001 From: gaodekui <13526428940@163.com> Date: Thu, 23 Feb 2017 17:42:45 +0800 Subject: [PATCH 023/216] =?UTF-8?q?Revert=20"=E6=9B=B4=E6=96=B0=E6=8F=90?= =?UTF-8?q?=E4=BA=A4"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit 84afca6aec0d4c5842199e723d412646cb20a88b. --- .../org.eclipse.core.resources.prefs | 2 - .../src/com/coding/basic/ArrayList.java | 39 ---- .../src/com/coding/basic/BinaryTreeNode.java | 29 --- .../src/com/coding/basic/Iterator.java | 6 - .../src/com/coding/basic/LinkedList.java | 62 ------ .../1924332561/src/com/coding/basic/List.java | 9 - .../src/com/coding/basic/Queue.java | 23 --- .../src/com/coding/basic/Stack.java | 29 --- group16/214074094/readme.txt | 1 - .../src/com/coding/basic/ArrayList.java | 60 ------ .../src/com/coding/basic/BinaryTreeNode.java | 32 --- .../src/com/coding/basic/Iterator.java | 7 - .../src/com/coding/basic/LinkedList.java | 46 ----- .../214074094/src/com/coding/basic/List.java | 15 -- .../214074094/src/com/coding/basic/Queue.java | 19 -- .../214074094/src/com/coding/basic/Stack.java | 22 -- .../src/com/coding/basic/ArrayList.java | 100 --------- .../src/com/coding/basic/BinaryTreeNode.java | 67 ------ .../src/com/coding/basic/Iterator.java | 7 - .../src/com/coding/basic/LinkedList.java | 195 ------------------ .../2562124714/src/com/coding/basic/List.java | 9 - .../src/com/coding/basic/Queue.java | 24 --- .../src/com/coding/basic/Stack.java | 34 --- .../src/com/coding/basic/TreeData.java | 26 --- 24 files changed, 863 deletions(-) delete mode 100644 group16/1924332561/.settings/org.eclipse.core.resources.prefs delete mode 100644 group16/1924332561/src/com/coding/basic/ArrayList.java delete mode 100644 group16/1924332561/src/com/coding/basic/BinaryTreeNode.java delete mode 100644 group16/1924332561/src/com/coding/basic/Iterator.java delete mode 100644 group16/1924332561/src/com/coding/basic/LinkedList.java delete mode 100644 group16/1924332561/src/com/coding/basic/List.java delete mode 100644 group16/1924332561/src/com/coding/basic/Queue.java delete mode 100644 group16/1924332561/src/com/coding/basic/Stack.java delete mode 100644 group16/214074094/readme.txt delete mode 100644 group16/214074094/src/com/coding/basic/ArrayList.java delete mode 100644 group16/214074094/src/com/coding/basic/BinaryTreeNode.java delete mode 100644 group16/214074094/src/com/coding/basic/Iterator.java delete mode 100644 group16/214074094/src/com/coding/basic/LinkedList.java delete mode 100644 group16/214074094/src/com/coding/basic/List.java delete mode 100644 group16/214074094/src/com/coding/basic/Queue.java delete mode 100644 group16/214074094/src/com/coding/basic/Stack.java delete mode 100644 group16/2562124714/src/com/coding/basic/ArrayList.java delete mode 100644 group16/2562124714/src/com/coding/basic/BinaryTreeNode.java delete mode 100644 group16/2562124714/src/com/coding/basic/Iterator.java delete mode 100644 group16/2562124714/src/com/coding/basic/LinkedList.java delete mode 100644 group16/2562124714/src/com/coding/basic/List.java delete mode 100644 group16/2562124714/src/com/coding/basic/Queue.java delete mode 100644 group16/2562124714/src/com/coding/basic/Stack.java delete mode 100644 group16/2562124714/src/com/coding/basic/TreeData.java diff --git a/group16/1924332561/.settings/org.eclipse.core.resources.prefs b/group16/1924332561/.settings/org.eclipse.core.resources.prefs deleted file mode 100644 index 99f26c0203..0000000000 --- a/group16/1924332561/.settings/org.eclipse.core.resources.prefs +++ /dev/null @@ -1,2 +0,0 @@ -eclipse.preferences.version=1 -encoding/=UTF-8 diff --git a/group16/1924332561/src/com/coding/basic/ArrayList.java b/group16/1924332561/src/com/coding/basic/ArrayList.java deleted file mode 100644 index 9e20bf25c4..0000000000 --- a/group16/1924332561/src/com/coding/basic/ArrayList.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.coding.basic; - -public class ArrayList implements List{ - private int size = 0; - - private Object[] elementDate = new Object[100]; - - - @Override - public void add(Object o) { - - } - - @Override - public void add(int index, Object o) { - - } - - @Override - public Object get(int dex) { - - return null; - } - - @Override - public Object remove(int index) { - return null; - } - - @Override - public int size() { - return -1; - } - - public Iterator iterator(){ - return null; - } - -} diff --git a/group16/1924332561/src/com/coding/basic/BinaryTreeNode.java b/group16/1924332561/src/com/coding/basic/BinaryTreeNode.java deleted file mode 100644 index e7d9e43e24..0000000000 --- a/group16/1924332561/src/com/coding/basic/BinaryTreeNode.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.coding.basic; - -public class BinaryTreeNode { - private Object date; - private BinaryTreeNode left; - private BinaryTreeNode right; - public Object getDate() { - return date; - } - public void setDate(Object date) { - this.date = date; - } - 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){ - return null; - } -} diff --git a/group16/1924332561/src/com/coding/basic/Iterator.java b/group16/1924332561/src/com/coding/basic/Iterator.java deleted file mode 100644 index e7cbd474ec..0000000000 --- a/group16/1924332561/src/com/coding/basic/Iterator.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.coding.basic; - -public interface Iterator { - public boolean hasNext(); - public Object next(); -} diff --git a/group16/1924332561/src/com/coding/basic/LinkedList.java b/group16/1924332561/src/com/coding/basic/LinkedList.java deleted file mode 100644 index d39557be29..0000000000 --- a/group16/1924332561/src/com/coding/basic/LinkedList.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.coding.basic; - -public class LinkedList implements List { - - private static class Node{ - Object date; - Node next; - } - - private Node head; - - - @Override - public void add(Object o) { - - } - - @Override - public void add(int index, Object o) { - - } - - @Override - public Object get(int dex) { - return null; - } - - @Override - public Object remove(int index) { - return null; - } - - @Override - public int size() { - - return 0; - } - - public void addFirst(Object o){ - - } - - public void addLast(Object o){ - - } - - public Object removeFirst(){ - - return null; - } - - public Object removeLast(){ - - return null; - } - - public Iterator iterator(){ - - return null; - } - -} diff --git a/group16/1924332561/src/com/coding/basic/List.java b/group16/1924332561/src/com/coding/basic/List.java deleted file mode 100644 index 9be54168b6..0000000000 --- a/group16/1924332561/src/com/coding/basic/List.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.coding.basic; - -public interface List { - public void add(Object o); - public void add(int index,Object o); - public Object get(int dex); - public Object remove(int index); - public int size(); -} diff --git a/group16/1924332561/src/com/coding/basic/Queue.java b/group16/1924332561/src/com/coding/basic/Queue.java deleted file mode 100644 index 7dc7b4820a..0000000000 --- a/group16/1924332561/src/com/coding/basic/Queue.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.coding.basic; - -public class Queue { - - public void enQueue(){ - - - } - public Object deQueue(){ - - return null; - } - - public boolean isEmpty(){ - - return false; - } - - public int size(){ - - return -1; - } -} diff --git a/group16/1924332561/src/com/coding/basic/Stack.java b/group16/1924332561/src/com/coding/basic/Stack.java deleted file mode 100644 index 7a49c48279..0000000000 --- a/group16/1924332561/src/com/coding/basic/Stack.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.coding.basic; - -public class Stack { - private ArrayList elementDate = new ArrayList(); - - public void push(Object o){ - - } - - public Object pop(){ - - return null; - } - - public Object peek(){ - - return null; - } - - public boolean isEmpty(){ - - return false; - } - - public int size(){ - - return -1; - } -} diff --git a/group16/214074094/readme.txt b/group16/214074094/readme.txt deleted file mode 100644 index c1b06ddcc2..0000000000 --- a/group16/214074094/readme.txt +++ /dev/null @@ -1 +0,0 @@ -I am 北京-Shane diff --git a/group16/214074094/src/com/coding/basic/ArrayList.java b/group16/214074094/src/com/coding/basic/ArrayList.java deleted file mode 100644 index a50055225b..0000000000 --- a/group16/214074094/src/com/coding/basic/ArrayList.java +++ /dev/null @@ -1,60 +0,0 @@ -package com.coding.basic; - -public class ArrayList implements List { - - private int size = 0; - - private final static Object[] EMPTY_ELEMENTDATA = {}; - - /** - * 默认容量 - */ - private static int DEFAULT_CAPACITY = 10; - - private Object[] elementData; - - public ArrayList() { - this.elementData = EMPTY_ELEMENTDATA; - } - - public static void main(String[] args) { - ArrayList list = new ArrayList(); - System.out.println(list.elementData == list.EMPTY_ELEMENTDATA); - } - - public void add(Object o) { - if (elementData == EMPTY_ELEMENTDATA) { - elementData = new Object[DEFAULT_CAPACITY]; - }else if(size < elementData.length){ - size++; - }else{ - _grow(); - } - elementData[size] = o; - } - - private void _grow() { - - } - - public void add(int index, Object o) { - - } - - public Object get(int index) { - return null; - } - - public Object remove(int index) { - return null; - } - - public int size() { - return -1; - } - - public Iterator iterator() { - return null; - } - -} diff --git a/group16/214074094/src/com/coding/basic/BinaryTreeNode.java b/group16/214074094/src/com/coding/basic/BinaryTreeNode.java deleted file mode 100644 index d7ac820192..0000000000 --- a/group16/214074094/src/com/coding/basic/BinaryTreeNode.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.coding.basic; - -public class BinaryTreeNode { - - private Object data; - private BinaryTreeNode left; - private BinaryTreeNode right; - - 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){ - return null; - } - -} diff --git a/group16/214074094/src/com/coding/basic/Iterator.java b/group16/214074094/src/com/coding/basic/Iterator.java deleted file mode 100644 index 06ef6311b2..0000000000 --- a/group16/214074094/src/com/coding/basic/Iterator.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.coding.basic; - -public interface Iterator { - public boolean hasNext(); - public Object next(); - -} diff --git a/group16/214074094/src/com/coding/basic/LinkedList.java b/group16/214074094/src/com/coding/basic/LinkedList.java deleted file mode 100644 index e2c4e5e795..0000000000 --- a/group16/214074094/src/com/coding/basic/LinkedList.java +++ /dev/null @@ -1,46 +0,0 @@ -package com.coding.basic; - -public class LinkedList implements List { - - private Node head; - - public void add(Object o){ - - } - public void add(int index , Object o){ - - } - public Object get(int index){ - return null; - } - public Object remove(int index){ - return null; - } - - public int size(){ - return -1; - } - - public void addFirst(Object o){ - - } - public void addLast(Object o){ - - } - public Object removeFirst(){ - return null; - } - public Object removeLast(){ - return null; - } - public Iterator iterator(){ - return null; - } - - - private static class Node{ - Object data; - Node next; - - } -} diff --git a/group16/214074094/src/com/coding/basic/List.java b/group16/214074094/src/com/coding/basic/List.java deleted file mode 100644 index fdaf43f86f..0000000000 --- a/group16/214074094/src/com/coding/basic/List.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.coding.basic; - -public interface List { - - void add(Object o); - - void add(int index, Object o); - - Object get(int index); - - Object remove(int index); - - int size(); - -} diff --git a/group16/214074094/src/com/coding/basic/Queue.java b/group16/214074094/src/com/coding/basic/Queue.java deleted file mode 100644 index 36e516e266..0000000000 --- a/group16/214074094/src/com/coding/basic/Queue.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.coding.basic; - -public class Queue { - - public void enQueue(Object o){ - } - - public Object deQueue(){ - return null; - } - - public boolean isEmpty(){ - return false; - } - - public int size(){ - return -1; - } -} diff --git a/group16/214074094/src/com/coding/basic/Stack.java b/group16/214074094/src/com/coding/basic/Stack.java deleted file mode 100644 index a5a04de76d..0000000000 --- a/group16/214074094/src/com/coding/basic/Stack.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.coding.basic; - -public class Stack { - private ArrayList elementData = new ArrayList(); - - public void push(Object o){ - } - - public Object pop(){ - return null; - } - - public Object peek(){ - return null; - } - public boolean isEmpty(){ - return false; - } - public int size(){ - return -1; - } -} diff --git a/group16/2562124714/src/com/coding/basic/ArrayList.java b/group16/2562124714/src/com/coding/basic/ArrayList.java deleted file mode 100644 index f1d5a9fdd9..0000000000 --- a/group16/2562124714/src/com/coding/basic/ArrayList.java +++ /dev/null @@ -1,100 +0,0 @@ -package com.coding.basic; - -public class ArrayList implements List { - - private int size = 0; - - private int Scale; //每次扩展大小 - - private Object[] elementData = new Object[100]; - - public ArrayList() - { - this.Scale = 10; - } - - public ArrayList(int i) - { - this.Scale = i; - } - - public void add(Object o){ - if (this.size == elementData.length) - { - DoEnlage(); - } - elementData[size] = o; - this.size++; - } - - private void DoEnlage() - { - if (this.Scale >= 1 && this.Scale <= 10000) - { - Object[] NewElementData = new Object[this.elementData.length + this.Scale]; - System.arraycopy(this.elementData,0,NewElementData,0,this.elementData.length); - - this.elementData = NewElementData; - } - - } - - //index从1开始 位置1,2,3,4,5,6 - public void add(int index, Object o){ - if (this.size == elementData.length) - { - DoEnlage(); - } - int i = 0; - //遍历赋值 - for(i = this.size; i >= index;i--) - { - this.elementData[i] = this.elementData[i - 1]; - } - - this.elementData[i] = o; - this.size++; - - } - - public Object get(int index){ - if (index >= 1 && index <= this.size) - { - return this.elementData[index - 1]; - } - else { - return null; - } - - - } - - public Object remove(int index){ - if (index >= 1 && index <= this.size) - { - int i = 0; - Object DelElement = this.elementData[index - 1]; - for(i = index; i <= this.size; i++) - { - this.elementData[i - 1] = this.elementData[i]; - } - this.elementData[i] = null; - this.size--; - - return DelElement; - - } - else { - return null; - } - } - - public int size(){ - return this.size; - } - - public Iterator iterator(){ - return null; - } - -} diff --git a/group16/2562124714/src/com/coding/basic/BinaryTreeNode.java b/group16/2562124714/src/com/coding/basic/BinaryTreeNode.java deleted file mode 100644 index 680c20c419..0000000000 --- a/group16/2562124714/src/com/coding/basic/BinaryTreeNode.java +++ /dev/null @@ -1,67 +0,0 @@ -package com.coding.basic; - -public class BinaryTreeNode { - - private TreeData treeData; - //private Object data; - private BinaryTreeNode left; - private BinaryTreeNode right; - - public TreeData getData() { - return treeData; - } - public void setData(TreeData data) { - this.treeData = 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(TreeData o){ - - //遍历寻找元素应该插入的位置 - if (o.compareTo(this.treeData) < 0) - { - if (this.left != null) - { - this.left.insert(o); - } - else - { - BinaryTreeNode NewNode = new BinaryTreeNode(); - NewNode.setData(o); - NewNode.setLeft(null); - NewNode.setRight(null); - this.left = NewNode; - } - } - else - { - if (this.right != null) - { - this.right.insert(o); - } - else - { - BinaryTreeNode NewNode = new BinaryTreeNode(); - NewNode.setData(o); - NewNode.setLeft(null); - NewNode.setRight(null); - this.right = NewNode; - } - } - - - return null; - } - -} diff --git a/group16/2562124714/src/com/coding/basic/Iterator.java b/group16/2562124714/src/com/coding/basic/Iterator.java deleted file mode 100644 index 06ef6311b2..0000000000 --- a/group16/2562124714/src/com/coding/basic/Iterator.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.coding.basic; - -public interface Iterator { - public boolean hasNext(); - public Object next(); - -} diff --git a/group16/2562124714/src/com/coding/basic/LinkedList.java b/group16/2562124714/src/com/coding/basic/LinkedList.java deleted file mode 100644 index 8ef49d108a..0000000000 --- a/group16/2562124714/src/com/coding/basic/LinkedList.java +++ /dev/null @@ -1,195 +0,0 @@ -package com.coding.basic; - -import com.sun.org.apache.bcel.internal.generic.NEW; - -import java.awt.*; - -public class LinkedList implements List { - - private Node head; - private int Size; - - public void add(Object o){ - Node NewNode = new Node(o); - - if (this.head == null) - { - head = NewNode; - } - else - { - Node node; - for (node = head; node.next != null; node = node.next) - { - } - node.next = NewNode; - } - this.Size++; - - } - //index为位置1,2,3,4,5,6,7 - public void add(int index , Object o){ - Node NewNode = new Node(o); - - if (1 == index) - { - NewNode.next = head; - head = NewNode; - } - else { - Node node; - int i = 0; - for (i = 1, node = head; i < index - 1; i++, node = node.next) { - } - NewNode.next = node.next; - node.next = NewNode; - } - this.Size++; - - } - public Object get(int index){ - Node node; - int i = 0; - - for (i = 1, node = head; i < index ; i++, node = node.next) { - } - - return node.data; -// return null; - } - public Object remove(int index){ - Node node; - int i = 0; - - if (1 == index) - { - if (head.next == null) - { - Object DelData = head.data; - head = null; - this.Size--; - return DelData; - } - else - { - Node DelNode = head; - head = DelNode.next; - DelNode.next = null; - this.Size--; - return DelNode.data; - - } - } - else { - - for (i = 1, node = head; i < index - 1; i++, node = node.next) { - } - Node DelNode = node.next; - node.next = DelNode.next; - DelNode.next = null; - this.Size--; - return DelNode.data; - } - } - - public int size(){ - - return this.Size; - } - - public void addFirst(Object o){ - Node NewNode = new Node(0); - - if (null == this.head) - { - NewNode.next = null; - head = NewNode; - } - else - { - NewNode.next = head; - head = NewNode; - } - - this.Size++; - - } - public void addLast(Object o){ - Node NewNode = new Node(o); - - if (this.Size == 0) - { - NewNode.next = null; - head = NewNode; - } - else - { -// int i = 0; - Node node; - for (node = head; node.next != null; node = node.next) { - - } - node.next = NewNode; - } - - this.Size++; - - } - public Object removeFirst(){ - Node DelFirst; - - if (1 == this.Size) - { - DelFirst = this.head; - DelFirst.next = null; - head = null; - } - else - { - DelFirst = this.head; - head = head.next; - DelFirst.next = null; - } - this.Size--; - - return DelFirst.data; - } - public Object removeLast(){ - Node DelLast; - - if (1 == this.Size) - { - DelLast = head; - DelLast.next = null; - head = null; - } - else - { - Node node; - for (node = head; node.next.next != null; node = node.next) { - - } - DelLast = node.next; - node.next = null; - } - this.Size--; - - return DelLast.data; - } - public Iterator iterator(){ - return null; - } - - - private static class Node{ - Object data; - Node next; - - public Node(Object o) - { - this.data = o; - this.next = null; - } - - } -} diff --git a/group16/2562124714/src/com/coding/basic/List.java b/group16/2562124714/src/com/coding/basic/List.java deleted file mode 100644 index 10d13b5832..0000000000 --- a/group16/2562124714/src/com/coding/basic/List.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.coding.basic; - -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(); -} diff --git a/group16/2562124714/src/com/coding/basic/Queue.java b/group16/2562124714/src/com/coding/basic/Queue.java deleted file mode 100644 index 40b8f22607..0000000000 --- a/group16/2562124714/src/com/coding/basic/Queue.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.coding.basic; - -public class Queue { - private ArrayList elementData = new ArrayList(); - - public void enQueue(Object o){ - elementData.add(o); - } - - public Object deQueue(){ - - - return elementData.get(1); - } - - public boolean isEmpty(){ - - return elementData.size() == 0 ? true : false; - } - - public int size(){ - return elementData.size(); - } -} diff --git a/group16/2562124714/src/com/coding/basic/Stack.java b/group16/2562124714/src/com/coding/basic/Stack.java deleted file mode 100644 index 61c92b2fe7..0000000000 --- a/group16/2562124714/src/com/coding/basic/Stack.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.coding.basic; - -public class Stack { - private ArrayList elementData = new ArrayList(); - -// public Stack() -// { -// elementData -// } - - public void push(Object o){ - elementData.add(0); - } - - public Object pop(){ - Object o = elementData.remove(elementData.size()); - return o; - } - - public Object peek(){ - Object o = elementData.get(elementData.size()); - return o; - } - public boolean isEmpty(){ - if (elementData.size() == 0) - { - return true; - } - return false; - } - public int size(){ - return elementData.size(); - } -} diff --git a/group16/2562124714/src/com/coding/basic/TreeData.java b/group16/2562124714/src/com/coding/basic/TreeData.java deleted file mode 100644 index 3c39539b28..0000000000 --- a/group16/2562124714/src/com/coding/basic/TreeData.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.coding.basic; - -/** - * Created by zhangwj on 2017/2/22. - */ -public class TreeData> implements Comparable>{ - private int s; - private T t; - - public T getT() - { - return t; - } - - @Override - public int compareTo(TreeData o) { - return getT().compareTo(o.getT()); - } - -// public int compareTo(TreeData o) -// { -// -// } - - -} From 1e1d6a8e7e46c2cf42b3b6ecbc61048abf780f42 Mon Sep 17 00:00:00 2001 From: gaodekui <13526428940@163.com> Date: Thu, 23 Feb 2017 17:43:59 +0800 Subject: [PATCH 024/216] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org.eclipse.core.resources.prefs | 2 + .../src/com/coding/basic/ArrayList.java | 39 ++++ .../src/com/coding/basic/BinaryTreeNode.java | 29 +++ .../src/com/coding/basic/Iterator.java | 6 + .../src/com/coding/basic/LinkedList.java | 62 ++++++ .../1924332561/src/com/coding/basic/List.java | 9 + .../src/com/coding/basic/Queue.java | 23 +++ .../src/com/coding/basic/Stack.java | 29 +++ group16/214074094/readme.txt | 1 + .../src/com/coding/basic/ArrayList.java | 60 ++++++ .../src/com/coding/basic/BinaryTreeNode.java | 32 +++ .../src/com/coding/basic/Iterator.java | 7 + .../src/com/coding/basic/LinkedList.java | 46 +++++ .../214074094/src/com/coding/basic/List.java | 15 ++ .../214074094/src/com/coding/basic/Queue.java | 19 ++ .../214074094/src/com/coding/basic/Stack.java | 22 ++ .../src/com/coding/basic/ArrayList.java | 100 +++++++++ .../src/com/coding/basic/BinaryTreeNode.java | 67 ++++++ .../src/com/coding/basic/Iterator.java | 7 + .../src/com/coding/basic/LinkedList.java | 195 ++++++++++++++++++ .../2562124714/src/com/coding/basic/List.java | 9 + .../src/com/coding/basic/Queue.java | 24 +++ .../src/com/coding/basic/Stack.java | 34 +++ .../src/com/coding/basic/TreeData.java | 26 +++ 24 files changed, 863 insertions(+) create mode 100644 group16/1924332561/.settings/org.eclipse.core.resources.prefs create mode 100644 group16/1924332561/src/com/coding/basic/ArrayList.java create mode 100644 group16/1924332561/src/com/coding/basic/BinaryTreeNode.java create mode 100644 group16/1924332561/src/com/coding/basic/Iterator.java create mode 100644 group16/1924332561/src/com/coding/basic/LinkedList.java create mode 100644 group16/1924332561/src/com/coding/basic/List.java create mode 100644 group16/1924332561/src/com/coding/basic/Queue.java create mode 100644 group16/1924332561/src/com/coding/basic/Stack.java create mode 100644 group16/214074094/readme.txt create mode 100644 group16/214074094/src/com/coding/basic/ArrayList.java create mode 100644 group16/214074094/src/com/coding/basic/BinaryTreeNode.java create mode 100644 group16/214074094/src/com/coding/basic/Iterator.java create mode 100644 group16/214074094/src/com/coding/basic/LinkedList.java create mode 100644 group16/214074094/src/com/coding/basic/List.java create mode 100644 group16/214074094/src/com/coding/basic/Queue.java create mode 100644 group16/214074094/src/com/coding/basic/Stack.java create mode 100644 group16/2562124714/src/com/coding/basic/ArrayList.java create mode 100644 group16/2562124714/src/com/coding/basic/BinaryTreeNode.java create mode 100644 group16/2562124714/src/com/coding/basic/Iterator.java create mode 100644 group16/2562124714/src/com/coding/basic/LinkedList.java create mode 100644 group16/2562124714/src/com/coding/basic/List.java create mode 100644 group16/2562124714/src/com/coding/basic/Queue.java create mode 100644 group16/2562124714/src/com/coding/basic/Stack.java create mode 100644 group16/2562124714/src/com/coding/basic/TreeData.java diff --git a/group16/1924332561/.settings/org.eclipse.core.resources.prefs b/group16/1924332561/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000000..99f26c0203 --- /dev/null +++ b/group16/1924332561/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +encoding/=UTF-8 diff --git a/group16/1924332561/src/com/coding/basic/ArrayList.java b/group16/1924332561/src/com/coding/basic/ArrayList.java new file mode 100644 index 0000000000..9e20bf25c4 --- /dev/null +++ b/group16/1924332561/src/com/coding/basic/ArrayList.java @@ -0,0 +1,39 @@ +package com.coding.basic; + +public class ArrayList implements List{ + private int size = 0; + + private Object[] elementDate = new Object[100]; + + + @Override + public void add(Object o) { + + } + + @Override + public void add(int index, Object o) { + + } + + @Override + public Object get(int dex) { + + return null; + } + + @Override + public Object remove(int index) { + return null; + } + + @Override + public int size() { + return -1; + } + + public Iterator iterator(){ + return null; + } + +} diff --git a/group16/1924332561/src/com/coding/basic/BinaryTreeNode.java b/group16/1924332561/src/com/coding/basic/BinaryTreeNode.java new file mode 100644 index 0000000000..e7d9e43e24 --- /dev/null +++ b/group16/1924332561/src/com/coding/basic/BinaryTreeNode.java @@ -0,0 +1,29 @@ +package com.coding.basic; + +public class BinaryTreeNode { + private Object date; + private BinaryTreeNode left; + private BinaryTreeNode right; + public Object getDate() { + return date; + } + public void setDate(Object date) { + this.date = date; + } + 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){ + return null; + } +} diff --git a/group16/1924332561/src/com/coding/basic/Iterator.java b/group16/1924332561/src/com/coding/basic/Iterator.java new file mode 100644 index 0000000000..e7cbd474ec --- /dev/null +++ b/group16/1924332561/src/com/coding/basic/Iterator.java @@ -0,0 +1,6 @@ +package com.coding.basic; + +public interface Iterator { + public boolean hasNext(); + public Object next(); +} diff --git a/group16/1924332561/src/com/coding/basic/LinkedList.java b/group16/1924332561/src/com/coding/basic/LinkedList.java new file mode 100644 index 0000000000..d39557be29 --- /dev/null +++ b/group16/1924332561/src/com/coding/basic/LinkedList.java @@ -0,0 +1,62 @@ +package com.coding.basic; + +public class LinkedList implements List { + + private static class Node{ + Object date; + Node next; + } + + private Node head; + + + @Override + public void add(Object o) { + + } + + @Override + public void add(int index, Object o) { + + } + + @Override + public Object get(int dex) { + return null; + } + + @Override + public Object remove(int index) { + return null; + } + + @Override + public int size() { + + return 0; + } + + public void addFirst(Object o){ + + } + + public void addLast(Object o){ + + } + + public Object removeFirst(){ + + return null; + } + + public Object removeLast(){ + + return null; + } + + public Iterator iterator(){ + + return null; + } + +} diff --git a/group16/1924332561/src/com/coding/basic/List.java b/group16/1924332561/src/com/coding/basic/List.java new file mode 100644 index 0000000000..9be54168b6 --- /dev/null +++ b/group16/1924332561/src/com/coding/basic/List.java @@ -0,0 +1,9 @@ +package com.coding.basic; + +public interface List { + public void add(Object o); + public void add(int index,Object o); + public Object get(int dex); + public Object remove(int index); + public int size(); +} diff --git a/group16/1924332561/src/com/coding/basic/Queue.java b/group16/1924332561/src/com/coding/basic/Queue.java new file mode 100644 index 0000000000..7dc7b4820a --- /dev/null +++ b/group16/1924332561/src/com/coding/basic/Queue.java @@ -0,0 +1,23 @@ +package com.coding.basic; + +public class Queue { + + public void enQueue(){ + + + } + public Object deQueue(){ + + return null; + } + + public boolean isEmpty(){ + + return false; + } + + public int size(){ + + return -1; + } +} diff --git a/group16/1924332561/src/com/coding/basic/Stack.java b/group16/1924332561/src/com/coding/basic/Stack.java new file mode 100644 index 0000000000..7a49c48279 --- /dev/null +++ b/group16/1924332561/src/com/coding/basic/Stack.java @@ -0,0 +1,29 @@ +package com.coding.basic; + +public class Stack { + private ArrayList elementDate = new ArrayList(); + + public void push(Object o){ + + } + + public Object pop(){ + + return null; + } + + public Object peek(){ + + return null; + } + + public boolean isEmpty(){ + + return false; + } + + public int size(){ + + return -1; + } +} diff --git a/group16/214074094/readme.txt b/group16/214074094/readme.txt new file mode 100644 index 0000000000..c1b06ddcc2 --- /dev/null +++ b/group16/214074094/readme.txt @@ -0,0 +1 @@ +I am 北京-Shane diff --git a/group16/214074094/src/com/coding/basic/ArrayList.java b/group16/214074094/src/com/coding/basic/ArrayList.java new file mode 100644 index 0000000000..a50055225b --- /dev/null +++ b/group16/214074094/src/com/coding/basic/ArrayList.java @@ -0,0 +1,60 @@ +package com.coding.basic; + +public class ArrayList implements List { + + private int size = 0; + + private final static Object[] EMPTY_ELEMENTDATA = {}; + + /** + * 默认容量 + */ + private static int DEFAULT_CAPACITY = 10; + + private Object[] elementData; + + public ArrayList() { + this.elementData = EMPTY_ELEMENTDATA; + } + + public static void main(String[] args) { + ArrayList list = new ArrayList(); + System.out.println(list.elementData == list.EMPTY_ELEMENTDATA); + } + + public void add(Object o) { + if (elementData == EMPTY_ELEMENTDATA) { + elementData = new Object[DEFAULT_CAPACITY]; + }else if(size < elementData.length){ + size++; + }else{ + _grow(); + } + elementData[size] = o; + } + + private void _grow() { + + } + + public void add(int index, Object o) { + + } + + public Object get(int index) { + return null; + } + + public Object remove(int index) { + return null; + } + + public int size() { + return -1; + } + + public Iterator iterator() { + return null; + } + +} diff --git a/group16/214074094/src/com/coding/basic/BinaryTreeNode.java b/group16/214074094/src/com/coding/basic/BinaryTreeNode.java new file mode 100644 index 0000000000..d7ac820192 --- /dev/null +++ b/group16/214074094/src/com/coding/basic/BinaryTreeNode.java @@ -0,0 +1,32 @@ +package com.coding.basic; + +public class BinaryTreeNode { + + private Object data; + private BinaryTreeNode left; + private BinaryTreeNode right; + + 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){ + return null; + } + +} diff --git a/group16/214074094/src/com/coding/basic/Iterator.java b/group16/214074094/src/com/coding/basic/Iterator.java new file mode 100644 index 0000000000..06ef6311b2 --- /dev/null +++ b/group16/214074094/src/com/coding/basic/Iterator.java @@ -0,0 +1,7 @@ +package com.coding.basic; + +public interface Iterator { + public boolean hasNext(); + public Object next(); + +} diff --git a/group16/214074094/src/com/coding/basic/LinkedList.java b/group16/214074094/src/com/coding/basic/LinkedList.java new file mode 100644 index 0000000000..e2c4e5e795 --- /dev/null +++ b/group16/214074094/src/com/coding/basic/LinkedList.java @@ -0,0 +1,46 @@ +package com.coding.basic; + +public class LinkedList implements List { + + private Node head; + + public void add(Object o){ + + } + public void add(int index , Object o){ + + } + public Object get(int index){ + return null; + } + public Object remove(int index){ + return null; + } + + public int size(){ + return -1; + } + + public void addFirst(Object o){ + + } + public void addLast(Object o){ + + } + public Object removeFirst(){ + return null; + } + public Object removeLast(){ + return null; + } + public Iterator iterator(){ + return null; + } + + + private static class Node{ + Object data; + Node next; + + } +} diff --git a/group16/214074094/src/com/coding/basic/List.java b/group16/214074094/src/com/coding/basic/List.java new file mode 100644 index 0000000000..fdaf43f86f --- /dev/null +++ b/group16/214074094/src/com/coding/basic/List.java @@ -0,0 +1,15 @@ +package com.coding.basic; + +public interface List { + + void add(Object o); + + void add(int index, Object o); + + Object get(int index); + + Object remove(int index); + + int size(); + +} diff --git a/group16/214074094/src/com/coding/basic/Queue.java b/group16/214074094/src/com/coding/basic/Queue.java new file mode 100644 index 0000000000..36e516e266 --- /dev/null +++ b/group16/214074094/src/com/coding/basic/Queue.java @@ -0,0 +1,19 @@ +package com.coding.basic; + +public class Queue { + + public void enQueue(Object o){ + } + + public Object deQueue(){ + return null; + } + + public boolean isEmpty(){ + return false; + } + + public int size(){ + return -1; + } +} diff --git a/group16/214074094/src/com/coding/basic/Stack.java b/group16/214074094/src/com/coding/basic/Stack.java new file mode 100644 index 0000000000..a5a04de76d --- /dev/null +++ b/group16/214074094/src/com/coding/basic/Stack.java @@ -0,0 +1,22 @@ +package com.coding.basic; + +public class Stack { + private ArrayList elementData = new ArrayList(); + + public void push(Object o){ + } + + public Object pop(){ + return null; + } + + public Object peek(){ + return null; + } + public boolean isEmpty(){ + return false; + } + public int size(){ + return -1; + } +} diff --git a/group16/2562124714/src/com/coding/basic/ArrayList.java b/group16/2562124714/src/com/coding/basic/ArrayList.java new file mode 100644 index 0000000000..f1d5a9fdd9 --- /dev/null +++ b/group16/2562124714/src/com/coding/basic/ArrayList.java @@ -0,0 +1,100 @@ +package com.coding.basic; + +public class ArrayList implements List { + + private int size = 0; + + private int Scale; //每次扩展大小 + + private Object[] elementData = new Object[100]; + + public ArrayList() + { + this.Scale = 10; + } + + public ArrayList(int i) + { + this.Scale = i; + } + + public void add(Object o){ + if (this.size == elementData.length) + { + DoEnlage(); + } + elementData[size] = o; + this.size++; + } + + private void DoEnlage() + { + if (this.Scale >= 1 && this.Scale <= 10000) + { + Object[] NewElementData = new Object[this.elementData.length + this.Scale]; + System.arraycopy(this.elementData,0,NewElementData,0,this.elementData.length); + + this.elementData = NewElementData; + } + + } + + //index从1开始 位置1,2,3,4,5,6 + public void add(int index, Object o){ + if (this.size == elementData.length) + { + DoEnlage(); + } + int i = 0; + //遍历赋值 + for(i = this.size; i >= index;i--) + { + this.elementData[i] = this.elementData[i - 1]; + } + + this.elementData[i] = o; + this.size++; + + } + + public Object get(int index){ + if (index >= 1 && index <= this.size) + { + return this.elementData[index - 1]; + } + else { + return null; + } + + + } + + public Object remove(int index){ + if (index >= 1 && index <= this.size) + { + int i = 0; + Object DelElement = this.elementData[index - 1]; + for(i = index; i <= this.size; i++) + { + this.elementData[i - 1] = this.elementData[i]; + } + this.elementData[i] = null; + this.size--; + + return DelElement; + + } + else { + return null; + } + } + + public int size(){ + return this.size; + } + + public Iterator iterator(){ + return null; + } + +} diff --git a/group16/2562124714/src/com/coding/basic/BinaryTreeNode.java b/group16/2562124714/src/com/coding/basic/BinaryTreeNode.java new file mode 100644 index 0000000000..680c20c419 --- /dev/null +++ b/group16/2562124714/src/com/coding/basic/BinaryTreeNode.java @@ -0,0 +1,67 @@ +package com.coding.basic; + +public class BinaryTreeNode { + + private TreeData treeData; + //private Object data; + private BinaryTreeNode left; + private BinaryTreeNode right; + + public TreeData getData() { + return treeData; + } + public void setData(TreeData data) { + this.treeData = 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(TreeData o){ + + //遍历寻找元素应该插入的位置 + if (o.compareTo(this.treeData) < 0) + { + if (this.left != null) + { + this.left.insert(o); + } + else + { + BinaryTreeNode NewNode = new BinaryTreeNode(); + NewNode.setData(o); + NewNode.setLeft(null); + NewNode.setRight(null); + this.left = NewNode; + } + } + else + { + if (this.right != null) + { + this.right.insert(o); + } + else + { + BinaryTreeNode NewNode = new BinaryTreeNode(); + NewNode.setData(o); + NewNode.setLeft(null); + NewNode.setRight(null); + this.right = NewNode; + } + } + + + return null; + } + +} diff --git a/group16/2562124714/src/com/coding/basic/Iterator.java b/group16/2562124714/src/com/coding/basic/Iterator.java new file mode 100644 index 0000000000..06ef6311b2 --- /dev/null +++ b/group16/2562124714/src/com/coding/basic/Iterator.java @@ -0,0 +1,7 @@ +package com.coding.basic; + +public interface Iterator { + public boolean hasNext(); + public Object next(); + +} diff --git a/group16/2562124714/src/com/coding/basic/LinkedList.java b/group16/2562124714/src/com/coding/basic/LinkedList.java new file mode 100644 index 0000000000..8ef49d108a --- /dev/null +++ b/group16/2562124714/src/com/coding/basic/LinkedList.java @@ -0,0 +1,195 @@ +package com.coding.basic; + +import com.sun.org.apache.bcel.internal.generic.NEW; + +import java.awt.*; + +public class LinkedList implements List { + + private Node head; + private int Size; + + public void add(Object o){ + Node NewNode = new Node(o); + + if (this.head == null) + { + head = NewNode; + } + else + { + Node node; + for (node = head; node.next != null; node = node.next) + { + } + node.next = NewNode; + } + this.Size++; + + } + //index为位置1,2,3,4,5,6,7 + public void add(int index , Object o){ + Node NewNode = new Node(o); + + if (1 == index) + { + NewNode.next = head; + head = NewNode; + } + else { + Node node; + int i = 0; + for (i = 1, node = head; i < index - 1; i++, node = node.next) { + } + NewNode.next = node.next; + node.next = NewNode; + } + this.Size++; + + } + public Object get(int index){ + Node node; + int i = 0; + + for (i = 1, node = head; i < index ; i++, node = node.next) { + } + + return node.data; +// return null; + } + public Object remove(int index){ + Node node; + int i = 0; + + if (1 == index) + { + if (head.next == null) + { + Object DelData = head.data; + head = null; + this.Size--; + return DelData; + } + else + { + Node DelNode = head; + head = DelNode.next; + DelNode.next = null; + this.Size--; + return DelNode.data; + + } + } + else { + + for (i = 1, node = head; i < index - 1; i++, node = node.next) { + } + Node DelNode = node.next; + node.next = DelNode.next; + DelNode.next = null; + this.Size--; + return DelNode.data; + } + } + + public int size(){ + + return this.Size; + } + + public void addFirst(Object o){ + Node NewNode = new Node(0); + + if (null == this.head) + { + NewNode.next = null; + head = NewNode; + } + else + { + NewNode.next = head; + head = NewNode; + } + + this.Size++; + + } + public void addLast(Object o){ + Node NewNode = new Node(o); + + if (this.Size == 0) + { + NewNode.next = null; + head = NewNode; + } + else + { +// int i = 0; + Node node; + for (node = head; node.next != null; node = node.next) { + + } + node.next = NewNode; + } + + this.Size++; + + } + public Object removeFirst(){ + Node DelFirst; + + if (1 == this.Size) + { + DelFirst = this.head; + DelFirst.next = null; + head = null; + } + else + { + DelFirst = this.head; + head = head.next; + DelFirst.next = null; + } + this.Size--; + + return DelFirst.data; + } + public Object removeLast(){ + Node DelLast; + + if (1 == this.Size) + { + DelLast = head; + DelLast.next = null; + head = null; + } + else + { + Node node; + for (node = head; node.next.next != null; node = node.next) { + + } + DelLast = node.next; + node.next = null; + } + this.Size--; + + return DelLast.data; + } + public Iterator iterator(){ + return null; + } + + + private static class Node{ + Object data; + Node next; + + public Node(Object o) + { + this.data = o; + this.next = null; + } + + } +} diff --git a/group16/2562124714/src/com/coding/basic/List.java b/group16/2562124714/src/com/coding/basic/List.java new file mode 100644 index 0000000000..10d13b5832 --- /dev/null +++ b/group16/2562124714/src/com/coding/basic/List.java @@ -0,0 +1,9 @@ +package com.coding.basic; + +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(); +} diff --git a/group16/2562124714/src/com/coding/basic/Queue.java b/group16/2562124714/src/com/coding/basic/Queue.java new file mode 100644 index 0000000000..40b8f22607 --- /dev/null +++ b/group16/2562124714/src/com/coding/basic/Queue.java @@ -0,0 +1,24 @@ +package com.coding.basic; + +public class Queue { + private ArrayList elementData = new ArrayList(); + + public void enQueue(Object o){ + elementData.add(o); + } + + public Object deQueue(){ + + + return elementData.get(1); + } + + public boolean isEmpty(){ + + return elementData.size() == 0 ? true : false; + } + + public int size(){ + return elementData.size(); + } +} diff --git a/group16/2562124714/src/com/coding/basic/Stack.java b/group16/2562124714/src/com/coding/basic/Stack.java new file mode 100644 index 0000000000..61c92b2fe7 --- /dev/null +++ b/group16/2562124714/src/com/coding/basic/Stack.java @@ -0,0 +1,34 @@ +package com.coding.basic; + +public class Stack { + private ArrayList elementData = new ArrayList(); + +// public Stack() +// { +// elementData +// } + + public void push(Object o){ + elementData.add(0); + } + + public Object pop(){ + Object o = elementData.remove(elementData.size()); + return o; + } + + public Object peek(){ + Object o = elementData.get(elementData.size()); + return o; + } + public boolean isEmpty(){ + if (elementData.size() == 0) + { + return true; + } + return false; + } + public int size(){ + return elementData.size(); + } +} diff --git a/group16/2562124714/src/com/coding/basic/TreeData.java b/group16/2562124714/src/com/coding/basic/TreeData.java new file mode 100644 index 0000000000..3c39539b28 --- /dev/null +++ b/group16/2562124714/src/com/coding/basic/TreeData.java @@ -0,0 +1,26 @@ +package com.coding.basic; + +/** + * Created by zhangwj on 2017/2/22. + */ +public class TreeData> implements Comparable>{ + private int s; + private T t; + + public T getT() + { + return t; + } + + @Override + public int compareTo(TreeData o) { + return getT().compareTo(o.getT()); + } + +// public int compareTo(TreeData o) +// { +// +// } + + +} From 77348a7293058cc6b2aacd8b4f92c3f49d5facd1 Mon Sep 17 00:00:00 2001 From: zj <2258659044@qq.com> Date: Thu, 23 Feb 2017 17:45:10 +0800 Subject: [PATCH 025/216] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E5=8D=95=E5=85=83?= =?UTF-8?q?=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../test/com/coding/basic/ArrayListTest.java | 22 +- .../test/com/coding/basic/LinkedListTest.java | 218 +++++++++--------- 2 files changed, 120 insertions(+), 120 deletions(-) diff --git a/group12/2258659044/zj-2017/src/test/com/coding/basic/ArrayListTest.java b/group12/2258659044/zj-2017/src/test/com/coding/basic/ArrayListTest.java index e7613ee689..badcb2968f 100644 --- a/group12/2258659044/zj-2017/src/test/com/coding/basic/ArrayListTest.java +++ b/group12/2258659044/zj-2017/src/test/com/coding/basic/ArrayListTest.java @@ -1,7 +1,5 @@ package test.com.coding.basic; -import java.util.NoSuchElementException; - import org.junit.Assert; import org.junit.Before; import org.junit.Test; @@ -36,7 +34,7 @@ public void add(){ /** * 两个参数的add方法 */ - @Test(expected = IndexOutOfBoundsException.class) + @Test//(expected = IndexOutOfBoundsException.class) public void add4ToPramter(){ ls.add(0, 0); @@ -49,22 +47,23 @@ public void add4ToPramter(){ Assert.assertEquals(ls.size(), 14); Assert.assertEquals(ls.get(3), 9); Assert.assertEquals(ls.get(13), 3); - ls.add(15, "a"); + //打开下面操作抛出异常 + //ls.add(15, "a"); } /** * get(i) */ - @Test(expected = IndexOutOfBoundsException.class) + @Test//(expected = IndexOutOfBoundsException.class) public void get(){ for (int i = 0; i < 10; i++) { ls.add(i); } - ls.add(11,11); - Assert.assertEquals(ls.get(9), 9); - Assert.assertEquals(ls.get(10),null); - ls.get(12); + + Assert.assertEquals(ls.get(9), 9); + //打开下面操作抛出异常 + //ls.get(12); } @Test @@ -92,7 +91,7 @@ public void size(){ } - @Test(expected = NoSuchElementException.class) + @Test//(expected = NoSuchElementException.class) public void iterator(){ for (int i = 0; i < 10; i++) { @@ -104,6 +103,7 @@ public void iterator(){ it.next(); } Assert.assertEquals(it.hasNext(),false); - it.next(); + //打开下面操作抛出异常 + //it.next(); } } diff --git a/group12/2258659044/zj-2017/src/test/com/coding/basic/LinkedListTest.java b/group12/2258659044/zj-2017/src/test/com/coding/basic/LinkedListTest.java index e7b56eccff..a55b2d5a3f 100644 --- a/group12/2258659044/zj-2017/src/test/com/coding/basic/LinkedListTest.java +++ b/group12/2258659044/zj-2017/src/test/com/coding/basic/LinkedListTest.java @@ -1,109 +1,109 @@ -package test.com.coding.basic; - -import java.util.NoSuchElementException; - -import org.junit.Assert; -import org.junit.Before; -import org.junit.Test; - -import com.coding.basic.Iterator; -import com.coding.basic.LinkedList; - -public class LinkedListTest { - - LinkedList ls ; - @Before - public void setup() { - ls = new LinkedList(); - } - - /** - * 测试一个参数的add方法 - * ArrayList当数据超过10时进行第一次扩容 - */ - @Test - public void add(){ - - ls.add(3); - ls.add("a"); - for (int i = 0; i < 10; i++) { - ls.add(i); - } - Assert.assertEquals(ls.size(), 12); - Assert.assertEquals(ls.get(1), "a"); - } - - /** - * 两个参数的add方法 - */ - @Test(expected = IndexOutOfBoundsException.class) - public void add4ToPramter(){ - - ls.add(0, 0); - ls.add(1,1); - ls.add(2, 2); - ls.add(3,3); - for (int i = 0; i < 10; i++) { - ls.add(3,i); - } - Assert.assertEquals(ls.size(), 14); - Assert.assertEquals(ls.get(3), 9); - Assert.assertEquals(ls.get(13), 3); - ls.add(15, "a"); - } - - /** - * get(i) - */ - @Test(expected = IndexOutOfBoundsException.class) - public void get(){ - - for (int i = 0; i < 10; i++) { - ls.add(i); - } - ls.add(11,11); - Assert.assertEquals(ls.get(9), 9); - Assert.assertEquals(ls.get(10),null); - ls.get(12); - } - - @Test - public void remove(){ - - for (int i = 0; i < 10; i++) { - ls.add(i); - } - Assert.assertEquals(ls.remove(5),5); - Assert.assertEquals(ls.size(),9); - Assert.assertEquals(ls.remove(8),9); - Assert.assertEquals(ls.size(),8); - } - - @Test - public void size(){ - - Assert.assertEquals(ls.size(),0); - ls.add("a"); - Assert.assertEquals(ls.size(),1); - ls.add(0,0); - Assert.assertEquals(ls.size(),2); - ls.remove(0); - Assert.assertEquals(ls.size(),1); - - } - - @Test(expected = NoSuchElementException.class) - public void iterator(){ - - for (int i = 0; i < 10; i++) { - ls.add(i); - } - Iterator it = ls.iterator(); - Assert.assertEquals(it.hasNext(),true); - for (int i = 0; i < 10; i++) { - it.next(); - } - Assert.assertEquals(it.hasNext(),false); - it.next(); - } -} +package test.com.coding.basic; + +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; + +import com.coding.basic.Iterator; +import com.coding.basic.LinkedList; + +public class LinkedListTest { + + LinkedList ls ; + @Before + public void setup() { + ls = new LinkedList(); + } + + /** + * 测试一个参数的add方法 + * ArrayList当数据超过10时进行第一次扩容 + */ + @Test + public void add(){ + + ls.add(3); + ls.add("a"); + for (int i = 0; i < 10; i++) { + ls.add(i); + } + Assert.assertEquals(ls.size(), 12); + Assert.assertEquals(ls.get(1), "a"); + } + + /** + * 两个参数的add方法 + */ + @Test//(expected = IndexOutOfBoundsException.class) + public void add4ToPramter(){ + + ls.add(0, 0); + ls.add(1,1); + ls.add(2, 2); + ls.add(3,3); + for (int i = 0; i < 10; i++) { + ls.add(3,i); + } + Assert.assertEquals(ls.size(), 14); + Assert.assertEquals(ls.get(3), 9); + Assert.assertEquals(ls.get(13), 3); + //打开下面操作抛出异常 + //ls.add(15, "a"); + } + + /** + * get(i) + */ + @Test//(expected = IndexOutOfBoundsException.class) + public void get(){ + + for (int i = 0; i < 10; i++) { + ls.add(i); + } + + Assert.assertEquals(ls.get(9), 9); + //打开下面操作抛出异常 + //ls.get(12); + } + + @Test + public void remove(){ + + for (int i = 0; i < 10; i++) { + ls.add(i); + } + Assert.assertEquals(ls.remove(5),5); + Assert.assertEquals(ls.size(),9); + Assert.assertEquals(ls.remove(8),9); + Assert.assertEquals(ls.size(),8); + } + + @Test + public void size(){ + + Assert.assertEquals(ls.size(),0); + ls.add("a"); + Assert.assertEquals(ls.size(),1); + ls.add(0,0); + Assert.assertEquals(ls.size(),2); + ls.remove(0); + Assert.assertEquals(ls.size(),1); + + } + + @Test//(expected = NoSuchElementException.class) + public void iterator(){ + + for (int i = 0; i < 10; i++) { + ls.add(i); + } + Iterator it = ls.iterator(); + Assert.assertEquals(it.hasNext(),true); + for (int i = 0; i < 10; i++) { + it.next(); + } + Assert.assertEquals(it.hasNext(),false); + //打开下面操作抛出异常 + //it.next(); + } +} From 96e69df6b2822f52ab3f81772eb64d88530c4b31 Mon Sep 17 00:00:00 2001 From: ikook <935542673@qq.com> Date: Thu, 23 Feb 2017 17:46:58 +0800 Subject: [PATCH 026/216] ikook --- group18/935542673/Coding/.classpath | 8 ++++++++ group18/935542673/Coding/.gitignore | 1 + group18/935542673/Coding/.project | 17 +++++++++++++++++ 3 files changed, 26 insertions(+) create mode 100644 group18/935542673/Coding/.classpath create mode 100644 group18/935542673/Coding/.gitignore create mode 100644 group18/935542673/Coding/.project diff --git a/group18/935542673/Coding/.classpath b/group18/935542673/Coding/.classpath new file mode 100644 index 0000000000..63024e81ef --- /dev/null +++ b/group18/935542673/Coding/.classpath @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/group18/935542673/Coding/.gitignore b/group18/935542673/Coding/.gitignore new file mode 100644 index 0000000000..ae3c172604 --- /dev/null +++ b/group18/935542673/Coding/.gitignore @@ -0,0 +1 @@ +/bin/ diff --git a/group18/935542673/Coding/.project b/group18/935542673/Coding/.project new file mode 100644 index 0000000000..8b11575db2 --- /dev/null +++ b/group18/935542673/Coding/.project @@ -0,0 +1,17 @@ + + + Coding + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + From 794fea5d2ca5ba19538f6d7e448247d7bb017ef9 Mon Sep 17 00:00:00 2001 From: ikook <935542673@qq.com> Date: Thu, 23 Feb 2017 17:50:30 +0800 Subject: [PATCH 027/216] ArrayList(The ikook implementation) --- .../basic_data_structure/MyArrayListTest.java | 75 +++++++++ .../basic_data_structure/MyArrayList.java | 158 ++++++++++++++++++ 2 files changed, 233 insertions(+) create mode 100644 group18/935542673/Coding/junit/com/ikook/basic_data_structure/MyArrayListTest.java create mode 100644 group18/935542673/Coding/src/com/ikook/basic_data_structure/MyArrayList.java diff --git a/group18/935542673/Coding/junit/com/ikook/basic_data_structure/MyArrayListTest.java b/group18/935542673/Coding/junit/com/ikook/basic_data_structure/MyArrayListTest.java new file mode 100644 index 0000000000..b1094f3583 --- /dev/null +++ b/group18/935542673/Coding/junit/com/ikook/basic_data_structure/MyArrayListTest.java @@ -0,0 +1,75 @@ +package com.ikook.basic_data_structure; + +import static org.junit.Assert.*; + +import java.util.Date; + +import org.junit.Before; +import org.junit.Test; + +/** + * 此单元测试只测试了正常情况,一些异常情况没有测试。 + * @author ikook + */ +public class MyArrayListTest { + + private MyArrayList list; + + @Before + public void setUp() { + list = new MyArrayList(); + list.add("111"); + list.add("222"); + list.add(33); + list.add("444"); + list.add(new Date()); + list.add("666"); + list.add("777"); + list.add("888"); + list.add("999"); + } + + @Test + public void testAdd() { + //测试add(Object obj)方法 + list.add(100); + assertEquals(10, list.size()); + + //测试add(int index, Object obj)方法 + list.add(3, 444); + assertEquals(444, list.get(3)); + + assertEquals("444", list.get(4)); + assertEquals(11, list.size()); + } + + @Test + public void testIsEmpty() { + + assertEquals(false, list.isEmpty()); + } + + @Test + public void testGet() { + assertEquals(new Date(), list.get(4)); + } + + @Test + public void testRemove() { + + // 测试remove(int index)方法 + assertEquals(33, list.remove(2)); + assertEquals("444", list.get(2)); + + // 测试remove(Object obj)方法 + assertEquals(true, list.remove("222")); + assertEquals("444", list.get(1)); + } + + @Test + public void testSet() { + assertEquals(33, list.set(2, "333")); + assertEquals("333", list.get(2)); + } + +} diff --git a/group18/935542673/Coding/src/com/ikook/basic_data_structure/MyArrayList.java b/group18/935542673/Coding/src/com/ikook/basic_data_structure/MyArrayList.java new file mode 100644 index 0000000000..39de481f0f --- /dev/null +++ b/group18/935542673/Coding/src/com/ikook/basic_data_structure/MyArrayList.java @@ -0,0 +1,158 @@ +package com.ikook.basic_data_structure; + +/** + * @author ikook; QQ号码: 935542673 + */ +public class MyArrayList implements MyList{ + + private Object[] elementData; + + private int size; + + /** + * 使Object[]的长度默认为10; + */ + public MyArrayList() { + this(10); + } + + /** + * 在构造函数中初始化集合的长度 + * @param initialCapacity + */ + public MyArrayList(int initialCapacity) { + if(initialCapacity < 0) { + try { + throw new Exception(); + } catch (Exception e) { + e.printStackTrace(); + } + } + this.elementData = new Object[initialCapacity]; + } + + /** + * 在集合中添加元素 + * @param obj + */ + public void add(Object obj) { + + ensureCapacity(); + elementData[size++] = obj; + + } + + /** + * 添加元素到集合的指定位置 + * @param index + * @param obj + */ + public void add(int index, Object obj) { + rangeCheck(index); + ensureCapacity(); + + System.arraycopy(elementData, index, elementData, index + 1, size-index); + elementData[index] = obj; + size++; + } + + /** + * 返回集合的长度 + * @return + */ + public int size() { + return size; + } + + /** + * 判断集合是非为空 + * @return + */ + public boolean isEmpty() { + return size == 0; + } + + /** + * 获取集合指定位置的元素 + * @param index + * @return + */ + public Object get(int index) { + rangeCheck(index); + return elementData[index]; + } + + /** + * 删除指定位置的对象 + * @param index + */ + public Object remove(int index) { + + rangeCheck(index); + + Object oldValue = elementData[index]; + + int numMoved = size - index - 1; + if (numMoved > 0){ + System.arraycopy(elementData, index+1, elementData, index, + numMoved); + } + elementData[--size] = null; + + return oldValue; + } + + /** + * 删除指定的对象(Object 对象) + * @param obj + */ + public boolean remove(Object obj){ + for(int i = 0; i < size; i++) { + if(get(i).equals(obj)) { + remove(i); + return true; + } + } + return false; + } + + /** + * 更改集合中指定位置的元素,并返回原来的对象 + * @param index + * @param obj + * @return + */ + public Object set(int index, Object obj) { + rangeCheck(index); + + Object oldValue = elementData[index]; + elementData[index] = obj; + + return oldValue; + } + + /** + * 集合扩容封装类 + */ + private void ensureCapacity() { + if(size == elementData.length) { + Object[] newArray = new Object[size * 2 + 1]; + System.arraycopy(elementData, 0, newArray, 0, elementData.length); + elementData = newArray; + } + } + + /** + * 判断集合范围是否越界的封装类 + * @param index + */ + private void rangeCheck(int index) { + if(index < 0 || index >= size) { + try { + throw new Exception("索引异常"); + } catch (Exception e) { + e.printStackTrace(); + } + } + } +} \ No newline at end of file From e5596de72793da0f59b9b96028cb9a46b17c2bf6 Mon Sep 17 00:00:00 2001 From: ikook <935542673@qq.com> Date: Thu, 23 Feb 2017 17:51:52 +0800 Subject: [PATCH 028/216] LinkedList(The madman implementation) --- .../MyLinkedListTest.java | 115 +++++++ .../basic_data_structure/MyLinkedList.java | 303 ++++++++++++++++++ 2 files changed, 418 insertions(+) create mode 100644 group18/935542673/Coding/junit/com/ikook/basic_data_structure/MyLinkedListTest.java create mode 100644 group18/935542673/Coding/src/com/ikook/basic_data_structure/MyLinkedList.java diff --git a/group18/935542673/Coding/junit/com/ikook/basic_data_structure/MyLinkedListTest.java b/group18/935542673/Coding/junit/com/ikook/basic_data_structure/MyLinkedListTest.java new file mode 100644 index 0000000000..4e3a5d7a22 --- /dev/null +++ b/group18/935542673/Coding/junit/com/ikook/basic_data_structure/MyLinkedListTest.java @@ -0,0 +1,115 @@ +package com.ikook.basic_data_structure; + +import static org.junit.Assert.*; + +import java.util.Date; + +import org.junit.Before; +import org.junit.Test; + +/** + * 此单元测试只测试了正常情况,一些异常情况没有测试。 + * @author ikook + */ +public class MyLinkedListTest { + + private MyLinkedList list; + + @Before + public void setUp() { + list = new MyLinkedList(); + list.add("111"); + list.add(222); + list.add("333"); + } + + @Test + public void testAddFirst() { + list.addFirst(444); + assertEquals(4, list.size()); + assertEquals(444, list.get(0)); + assertEquals(444, list.getFirst()); + + } + + @Test + public void testAddLast() { + list.addLast("444"); + assertEquals(4, list.size()); + assertEquals("444", list.getLast()); + assertEquals("444", list.get(3)); + } + + @Test + public void testAddObject() { + list.add(new Date()); + assertEquals(new Date(), list.get(3)); + } + + @Test + public void testAddIntObject() { + list.add(1, "222"); + assertEquals("222", list.get(1)); + assertEquals(4, list.size()); + } + + @Test + public void testSize() { + assertEquals(3, list.size()); + } + + @Test + public void testIsEmpty() { + assertEquals(false, list.isEmpty()); + + MyLinkedList list = new MyLinkedList(); + assertEquals(true, list.isEmpty()); + } + + @Test + public void testGetFirst() { + assertEquals("111", list.getFirst()); + } + + @Test + public void testGetLast() { + assertEquals("333", list.getLast()); + } + + @Test + public void testGet() { + assertEquals(222, list.get(1)); + } + + @Test + public void testSet() { + assertEquals(222, list.set(1, new Date())); + assertEquals(new Date(), list.get(1)); + } + + @Test + public void testRemoveFirst() { + assertEquals("111", list.removeFirst()); + assertEquals(222, list.getFirst()); + } + + @Test + public void testRemoveLast() { + assertEquals("333", list.removeLast()); + assertEquals(222, list.getLast()); + } + + @Test + public void testRemoveObject() { + assertEquals(true, list.remove((Integer) 222)); + assertEquals("333", list.get(1)); + } + + @Test + public void testRemoveInt() { + assertEquals(222, list.remove(1)); + assertEquals("333", list.get(1)); + + } + +} diff --git a/group18/935542673/Coding/src/com/ikook/basic_data_structure/MyLinkedList.java b/group18/935542673/Coding/src/com/ikook/basic_data_structure/MyLinkedList.java new file mode 100644 index 0000000000..2377509c27 --- /dev/null +++ b/group18/935542673/Coding/src/com/ikook/basic_data_structure/MyLinkedList.java @@ -0,0 +1,303 @@ +package com.ikook.basic_data_structure; + +import java.util.NoSuchElementException; + +/** + * @author ikook; QQ号码: 935542673 + */ +public class MyLinkedList implements MyList{ + + private Node first; + private Node last; + private int size; + + /** + * 在链表的头部插入新的元素 + * @param obj + */ + public void addFirst(Object obj) { + final Node f = first; + final Node newNode = new Node(null, obj, f); + first = newNode; + if (f == null) + last = newNode; + else + f.previous = newNode; + size++; + } + + /** + * 在链表尾部插入新的元素 + * @param obj + */ + public void addLast(Object obj) { + final Node l = last; + final Node newNode = new Node(l, obj, null); + last = newNode; + if (l == null) + first = newNode; + else + l.next = newNode; + size++; + } + + /** + * 在链表中插入新的元素 + * @param obj + */ + public void add(Object obj) { + addLast(obj); + } + + /** + * 在指定位置插入新的元素 + * @param index + * @param obj + */ + public void add(int index, Object obj) { + if (!(index >= 0 && index <= size)) { + throw new IndexOutOfBoundsException("索引位置越界"); + } + + if (index == size) { + addLast(obj); + } else { + Node temp = node(index); + final Node pred = temp.previous; + final Node newNode = new Node(pred, obj, temp); + temp.previous = newNode; + if (pred == null) + first = newNode; + else + pred.next = newNode; + size++; + } + } + + /** + * 返回集合的size。 + * @return + */ + public int size() { + return size; + } + + /** + * 判断集合是非为空 + * @return + */ + public boolean isEmpty() { + return size == 0; + } + + /** + * 获取链表头部的元素 + * @return + */ + public Object getFirst() { + final Node f = first; + if (f == null) { + throw new NoSuchElementException("没有找到指定的元素"); + } + + return f.data; + } + + /** + * 获取链表尾部的元素 + * @return + */ + public Object getLast() { + final Node l = last; + if (l == null) { + throw new NoSuchElementException("没有找到指定的元素"); + } + + return l.data; + } + + /** + * 获取指定位置的元素 + * @param index + * @return + */ + public Object get(int index) { + rangeCheckElementIndex(index); + return node(index).data; + } + + /** + * 更改指定位置的元素 + * @param index + * @param element + * @return + */ + public Object set(int index, Object element) { + rangeCheckElementIndex(index); + Node temp = node(index); + Object oldValue = temp.data; + temp.data = element; + return oldValue; + } + + + /** + * 删除链表头部的元素 + * @return + */ + public Object removeFirst() { + final Node f = first; + if (f == null) { + throw new NoSuchElementException("没有找到指定的元素"); + } + + final Object element = f.data; + final Node next = f.next; + f.data = null; + f.next = null; + first = next; + if (next == null) { + last = null; + } else { + next.previous = null; + } + size--; + + return element; + } + + /** + * 删除链表尾部的元素 + * @return + */ + public Object removeLast() { + final Node l = last; + if (l == null){ + throw new NoSuchElementException("没有找到指定的元素"); + } + + final Object element = l.data; + final Node prev = l.previous; + l.data = null; + l.previous = null; + last = prev; + if (prev == null) { + first = null; + } else { + prev.next = null; + } + size--; + + return element; + } + + /** + * 删除指定元素 + * @param o + * @return + */ + public boolean remove(Object o) { + if (o == null) { + for (Node temp = first; temp != null; temp = temp.next) { + if (temp.data == null) { + deleteElement(temp); + return true; + } + } + } else { + for (Node temp = first; temp != null; temp = temp.next) { + if (o.equals(temp.data)) { + deleteElement(temp); + return true; + } + } + } + return false; + } + + /** + * 删除指定位置的元素 + * @param index + * @return + */ + public Object remove(int index) { + rangeCheckElementIndex(index); + return deleteElement(node(index)); + } + + /** + * 删除指定节点元素 + * @param temp + * @return + */ + private Object deleteElement(Node temp) { + final Object element = temp.data; + final Node next = temp.next; + final Node prev = temp.previous; + + if (prev == null) { + first = next; + } else { + prev.next = next; + temp.previous = null; + } + + if (next == null) { + last = prev; + } else { + next.previous = prev; + temp.next = null; + } + + temp.data = null; + size--; + + return element; + } + + /** + * 检查索引元素的范围 + * @param index + */ + private void rangeCheckElementIndex(int index) { + if (!(index >= 0 && index < size)) { + throw new IndexOutOfBoundsException("索引越界"); + } + } + + /** + * 返回指定索引位置的节点 + * @param index + * @return + */ + Node node(int index) { + if (index < (size >> 1)) { + Node temp = first; + for (int i = 0; i < index; i++) + temp = temp.next; + return temp; + } else { + Node temp = last; + for (int i = size - 1; i > index; i--) + temp = temp.previous; + return temp; + } + } + + /** + * 用于表示一个节点 + * @author ikook + */ + private static class Node { + Node previous; // 上一个节点 + Object data; + Node next; // 下一个节点 + + public Node(Node previous, Object data, Node next) { + super(); + this.previous = previous; + this.data = data; + this.next = next; + } + } +} From b896ee318fa433c30e48c205e204d4dd2024b4a5 Mon Sep 17 00:00:00 2001 From: gaodekui <13526428940@163.com> Date: Thu, 23 Feb 2017 17:53:51 +0800 Subject: [PATCH 029/216] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- group16/1154151360/.classpath | 6 + group16/1154151360/.gitignore | 1 + group16/1154151360/.project | 17 ++ .../org.eclipse.core.resources.prefs | 2 + .../1154151360/src/com/list/ArrayList.java | 93 +++++++++++ .../1154151360/src/com/list/LinkedList.java | 158 ++++++++++++++++++ group16/1154151360/src/com/list/Stack.java | 35 ++++ 7 files changed, 312 insertions(+) create mode 100644 group16/1154151360/.classpath create mode 100644 group16/1154151360/.gitignore create mode 100644 group16/1154151360/.project create mode 100644 group16/1154151360/.settings/org.eclipse.core.resources.prefs create mode 100644 group16/1154151360/src/com/list/ArrayList.java create mode 100644 group16/1154151360/src/com/list/LinkedList.java create mode 100644 group16/1154151360/src/com/list/Stack.java diff --git a/group16/1154151360/.classpath b/group16/1154151360/.classpath new file mode 100644 index 0000000000..fb5011632c --- /dev/null +++ b/group16/1154151360/.classpath @@ -0,0 +1,6 @@ + + + + + + diff --git a/group16/1154151360/.gitignore b/group16/1154151360/.gitignore new file mode 100644 index 0000000000..ae3c172604 --- /dev/null +++ b/group16/1154151360/.gitignore @@ -0,0 +1 @@ +/bin/ diff --git a/group16/1154151360/.project b/group16/1154151360/.project new file mode 100644 index 0000000000..f88388f6d7 --- /dev/null +++ b/group16/1154151360/.project @@ -0,0 +1,17 @@ + + + DataStructure2 + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git a/group16/1154151360/.settings/org.eclipse.core.resources.prefs b/group16/1154151360/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000000..99f26c0203 --- /dev/null +++ b/group16/1154151360/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +encoding/=UTF-8 diff --git a/group16/1154151360/src/com/list/ArrayList.java b/group16/1154151360/src/com/list/ArrayList.java new file mode 100644 index 0000000000..bf19212fbf --- /dev/null +++ b/group16/1154151360/src/com/list/ArrayList.java @@ -0,0 +1,93 @@ +package com.list; + + + +public class ArrayList { + + private int size; + + private Object [] elementData = new Object[10]; + + public boolean add(Object data){ + + getRow(size+1); + elementData[size++] = data; + return true; + } + + public boolean add(int index, Object data){ + if (index < 0 || index > elementData.length){ + throw new IndexOutOfBoundsException("�±�Խ��"); + } + getRow(size + 1); + Object object = elementData [index]; + System.arraycopy(elementData, index,elementData , index + 1,size - index ); + elementData[index] = data; + size++; + return true; + } + + public Object get(int index){ + if (index < 0 || index > elementData.length){ + throw new IndexOutOfBoundsException("下标越界"); + } + return elementData[index]; + } + + public Object remove(int index){ + if (index < 0 || index > elementData.length){ + throw new IndexOutOfBoundsException("下标越界"); + } + Object object = elementData [index]; + System.arraycopy(elementData, index + 1 , elementData, index, size - 1 - index); + elementData[size--]= null; + return object; + } + + + private void getRow(int num){ + if (num > elementData.length ){ + int oldLength = elementData.length; + int newLength = ((num + elementData.length) * 3) >> 2; + Object [] oldelements = elementData; + elementData = new Object[newLength]; + System.arraycopy(oldelements, 0, elementData, 0, size); + } + } + + public int size(){ + return size; + } + + public int length(){ + return elementData.length; + } + public static void main(String[] args) { + ArrayList list = new ArrayList(); + + list.add("A"); + list.add("B"); + list.add("C"); + list.add("D"); + list.add("E"); + list.add("F"); + list.add("G"); + list.add("H"); + list.add("I"); + list.add("J"); + list.add("K"); + list.add("L"); + list.add(2, 1); + System.out.println("elementsData.Length: "+list.length()); + System.out.println("elementsData.size: "+list.size()); + for (int i = 0; i < list.size; i++){ + System.out.print(list.get(i)+ " "); + } + System.out.println(" "); + list.remove(2); + + for (int i = 0; i < list.size; i++){ + System.out.print(list.get(i)+ " "); + } + } +} diff --git a/group16/1154151360/src/com/list/LinkedList.java b/group16/1154151360/src/com/list/LinkedList.java new file mode 100644 index 0000000000..46f61fb667 --- /dev/null +++ b/group16/1154151360/src/com/list/LinkedList.java @@ -0,0 +1,158 @@ +package com.list; + +public class LinkedList { + + private int size; + + private Node head;//头节点 + + Node current; //当前节点 + + public LinkedList(){ + this.head = current = new Node(null); + this.size = 0; + } + + + private boolean add(Object object){ + addAfter(object); + size++; + return true; + } + + + private boolean add(int index,Object object) throws Exception{ + index(index - 1); + current.nextNode = new Node(object,current.nextNode.nextNode); + size++; + return true; + } + + + private boolean addFirst(Object object){ + Node node = new Node(object,null); + current = head.nextNode; + head.nextNode = node; + node.nextNode = current; + size++; + return true; + } + + + private boolean addLast(Object object){ + add(object); + return true; + } + + + private Object get(int index) throws Exception{ + index(index); + return current.object; + } + + + private Object remove(int index) throws Exception{ + + if (index == size - 1){ + Object object = removeLast(); + return object; + } + index(index - 1); + Object object = current.nextNode.object; + + current.nextNode = current.nextNode.nextNode; + size--; + return object; + } + + private Object removeFirst(){ + Object object = null; + if (size > 0){ + current = head.nextNode; + object = current.object; + head.nextNode = head.nextNode.nextNode; + size--; + } + return object; + } + + private Object removeLast() throws Exception{ + Object object = null; + if (size > 0){ + int j = 0; + current = head.nextNode; + + while (current != null){ + current = current.nextNode; + j++; + } + index(j - 1); + object = current.nextNode.object; + current.nextNode = null; + size--; + } + return object; + } + private void index (int index) throws Exception{ + + if (index < -1 || index > size){ + + throw new Exception(" "); + } + + if (index == -1){ + return; + } + current = head.nextNode; + int j = 0; + while (current != null && j < index){ + current = current.nextNode; + j++; + } + } + + + private void addAfter(Object object){ + + if (head.nextNode == null){ + + Node newNode = new Node(object,null); + }else{ + current = head.nextNode; + while (current.nextNode == null){ + current = current.nextNode; + } + current.setNode(new Node(object,null)); + } + + + } + + + + + private static class Node{ + + Object object; + + Node nextNode; + + + Node (Node nextNode){ + this.nextNode = nextNode; + } + + + Node (Object object, Node nextNode){ + this.nextNode = nextNode; + this.object = object; + } + + private void setNode(Node node){ + this.nextNode = node; + } + + } + + +} diff --git a/group16/1154151360/src/com/list/Stack.java b/group16/1154151360/src/com/list/Stack.java new file mode 100644 index 0000000000..f92a9e731c --- /dev/null +++ b/group16/1154151360/src/com/list/Stack.java @@ -0,0 +1,35 @@ +package com.list; + +import java.util.ArrayList; +import java.util.EmptyStackException; + +public class Stack { + + ArrayList elelmentData = new ArrayList(); + + //压入栈 + public void push(Object object){ + elelmentData.add(object); + } + + //弹出栈 + public Object pop(){ + if (isEmpty()){ throw new EmptyStackException();} + return elelmentData.remove(elelmentData.size() - 1); + } + + //取栈顶元素 + public Object peek(){ + if (isEmpty()){return null;} + return elelmentData.get(elelmentData.size() - 1); + } + + public boolean isEmpty(){ + return elelmentData.isEmpty(); + } + + public int size(){ + if (isEmpty()){throw new EmptyStackException();} + return elelmentData.size(); + } +} From fa9be5c1ff00c702ff26590adadf59ae80142c2f Mon Sep 17 00:00:00 2001 From: ikook <935542673@qq.com> Date: Thu, 23 Feb 2017 17:54:07 +0800 Subject: [PATCH 030/216] Queue(The madman implementation) --- .../basic_data_structure/MyQueueTest.java | 54 +++++++++++++++++++ .../ikook/basic_data_structure/MyQueue.java | 42 +++++++++++++++ 2 files changed, 96 insertions(+) create mode 100644 group18/935542673/Coding/junit/com/ikook/basic_data_structure/MyQueueTest.java create mode 100644 group18/935542673/Coding/src/com/ikook/basic_data_structure/MyQueue.java diff --git a/group18/935542673/Coding/junit/com/ikook/basic_data_structure/MyQueueTest.java b/group18/935542673/Coding/junit/com/ikook/basic_data_structure/MyQueueTest.java new file mode 100644 index 0000000000..8fb8ba825f --- /dev/null +++ b/group18/935542673/Coding/junit/com/ikook/basic_data_structure/MyQueueTest.java @@ -0,0 +1,54 @@ +package com.ikook.basic_data_structure; + +import static org.junit.Assert.*; + +import java.util.Date; + +import org.junit.Before; +import org.junit.Test; + +/** + * 此单元测试只测试了正常情况,一些异常情况没有测试。 + * @author ikook + */ +public class MyQueueTest { + + private MyQueue queue; + + @Before + public void setUp() { + queue = new MyQueue(); + + queue.enQueue(111); + queue.enQueue("222"); + queue.enQueue(new Date()); + } + + @Test + public void testEnQueue() { + queue.enQueue(444); + assertEquals(4, queue.size()); + } + + @Test + public void testDeQueue() { + assertEquals(111, queue.deQueue()); + } + + @Test + public void testSize() { + assertEquals(3, queue.size()); + + MyQueue queue = new MyQueue(); + assertEquals(0, queue.size()); + } + + @Test + public void testIsEmpty() { + assertEquals(false, queue.isEmpty()); + + MyQueue queue = new MyQueue(); + assertEquals(true, queue.isEmpty()); + } + +} diff --git a/group18/935542673/Coding/src/com/ikook/basic_data_structure/MyQueue.java b/group18/935542673/Coding/src/com/ikook/basic_data_structure/MyQueue.java new file mode 100644 index 0000000000..824d7579c6 --- /dev/null +++ b/group18/935542673/Coding/src/com/ikook/basic_data_structure/MyQueue.java @@ -0,0 +1,42 @@ +package com.ikook.basic_data_structure; + +/** + * @author ikook; QQ号码: 935542673 + */ +public class MyQueue { + + private MyLinkedList queue = new MyLinkedList(); + + /** + * 入队操作 + * @param obj + */ + public void enQueue(Object obj) { + queue.addLast(obj); + } + + /** + * 出队操作 + * @return + */ + public Object deQueue() { + return queue.removeFirst(); + } + + /** + * 队列的长度 + * @return + */ + public int size() { + return queue.size(); + } + + /** + * 队列是否为空 + * @return + */ + public boolean isEmpty() { + return queue.isEmpty(); + } + +} From d94ec28ebc1ebe629d51ac74edc0ce1ba36394b1 Mon Sep 17 00:00:00 2001 From: ikook <935542673@qq.com> Date: Thu, 23 Feb 2017 17:56:05 +0800 Subject: [PATCH 031/216] Stack(The madman implementation) --- .../basic_data_structure/MyStackTest.java | 55 ++++++++++++++ .../ikook/basic_data_structure/MyStack.java | 73 +++++++++++++++++++ 2 files changed, 128 insertions(+) create mode 100644 group18/935542673/Coding/junit/com/ikook/basic_data_structure/MyStackTest.java create mode 100644 group18/935542673/Coding/src/com/ikook/basic_data_structure/MyStack.java diff --git a/group18/935542673/Coding/junit/com/ikook/basic_data_structure/MyStackTest.java b/group18/935542673/Coding/junit/com/ikook/basic_data_structure/MyStackTest.java new file mode 100644 index 0000000000..fe1084e343 --- /dev/null +++ b/group18/935542673/Coding/junit/com/ikook/basic_data_structure/MyStackTest.java @@ -0,0 +1,55 @@ +package com.ikook.basic_data_structure; + +import static org.junit.Assert.*; + +import java.util.Date; + +import org.junit.Before; +import org.junit.Test; + +/** + * 此单元测试只测试了正常情况,一些异常情况没有测试。 + * @author ikook + */ +public class MyStackTest { + + private MyStack stack; + + @Before + public void setUp() { + stack = new MyStack(); + stack.push(111); + stack.push("222"); + stack.push(333); + stack.push(new Date()); + stack.push("555"); + } + + @Test + public void testPush() { + stack.push(93554); + assertEquals(6, stack.size()); + } + + @Test + public void testPop() { + assertEquals("555", stack.pop()); + assertEquals(4, stack.size()); + + assertEquals(new Date(), stack.pop()); + } + + @Test + public void testGetTop() { + assertEquals("555", stack.getTop()); + } + + @Test + public void testIsEmpty() { + assertEquals(false, stack.isEmpty()); + + MyStack stack = new MyStack(); + assertEquals(true, stack.isEmpty()); + } + +} diff --git a/group18/935542673/Coding/src/com/ikook/basic_data_structure/MyStack.java b/group18/935542673/Coding/src/com/ikook/basic_data_structure/MyStack.java new file mode 100644 index 0000000000..0ad6c05910 --- /dev/null +++ b/group18/935542673/Coding/src/com/ikook/basic_data_structure/MyStack.java @@ -0,0 +1,73 @@ +package com.ikook.basic_data_structure; + +/** + * @author ikook; QQ号码: 935542673 + */ +public class MyStack { + + private MyArrayList elementDate = new MyArrayList(); + + /** + * 入栈操作 + * @param obj + */ + public void push(Object obj) { + elementDate.add(obj); + } + + /** + * 出栈操作 + * @return + */ + public Object pop() { + emptyExce(); + return elementDate.remove(topIndex()); + } + + /** + * 获取栈顶元素 + * @return + */ + public Object getTop() { + emptyExce(); + return elementDate.get(topIndex()); + } + + /** + * 判断栈是否为空 + * @return + */ + public boolean isEmpty() { + return size() == 0; + } + + /** + * 获取栈的深度 + * @return + */ + public int size() { + return elementDate.size(); + } + + /** + * 栈顶元素所在索引封装类 + * @return + */ + private int topIndex() { + return size() - 1; + } + + /** + * 队列为空异常处理封装类 + */ + private void emptyExce() { + if (isEmpty()) { + try { + throw new Exception("队列为空"); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + +} From 4618840afb8a253bf29068391dd5d52ab13926ff Mon Sep 17 00:00:00 2001 From: ikook <935542673@qq.com> Date: Thu, 23 Feb 2017 17:57:49 +0800 Subject: [PATCH 032/216] List(The madman implementation) --- .../ikook/basic_data_structure/MyList.java | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 group18/935542673/Coding/src/com/ikook/basic_data_structure/MyList.java diff --git a/group18/935542673/Coding/src/com/ikook/basic_data_structure/MyList.java b/group18/935542673/Coding/src/com/ikook/basic_data_structure/MyList.java new file mode 100644 index 0000000000..f1fa613d0e --- /dev/null +++ b/group18/935542673/Coding/src/com/ikook/basic_data_structure/MyList.java @@ -0,0 +1,22 @@ +package com.ikook.basic_data_structure; + +/** + * @author ikook QQ号码: 935542673 + */ +public interface MyList { + + public void add(Object o); + public void add(int index, Object o); + + public int size(); + + public boolean isEmpty(); + + public Object get(int index); + + public Object remove(int index); + public boolean remove(Object obj); + + public Object set(int index, Object obj); + +} From 2660fd24231850782c3cb97669b40e3ccdddbc3e Mon Sep 17 00:00:00 2001 From: ikook <935542673@qq.com> Date: Thu, 23 Feb 2017 18:00:44 +0800 Subject: [PATCH 033/216] Datum --- ...50\347\232\204\351\227\256\351\242\230.docx" | Bin 0 -> 82125 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 "group18/935542673/Datum/\345\205\263\344\272\216.metadata\347\233\256\345\275\225\345\222\214.gitignore\344\275\277\347\224\250\347\232\204\351\227\256\351\242\230.docx" diff --git "a/group18/935542673/Datum/\345\205\263\344\272\216.metadata\347\233\256\345\275\225\345\222\214.gitignore\344\275\277\347\224\250\347\232\204\351\227\256\351\242\230.docx" "b/group18/935542673/Datum/\345\205\263\344\272\216.metadata\347\233\256\345\275\225\345\222\214.gitignore\344\275\277\347\224\250\347\232\204\351\227\256\351\242\230.docx" new file mode 100644 index 0000000000000000000000000000000000000000..d169fd91bf6a6a0ade817eb981a37595454334b5 GIT binary patch literal 82125 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 literal 0 HcmV?d00001 From 8835e6e740cf26f0e19fd2c2999e0d45a52d8d38 Mon Sep 17 00:00:00 2001 From: shane Date: Thu, 23 Feb 2017 18:21:50 +0800 Subject: [PATCH 034/216] update .gitignore, add *.iml and *.idea format --- .gitignore | 3 +++ group16/214074094/src/com/reading/blog_test.txt | 1 + 2 files changed, 4 insertions(+) create mode 100644 group16/214074094/src/com/reading/blog_test.txt diff --git a/.gitignore b/.gitignore index ec55baf87d..359bdf7ae5 100644 --- a/.gitignore +++ b/.gitignore @@ -8,6 +8,9 @@ *.war *.ear +*.iml +*.idea + # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml hs_err_pid* diff --git a/group16/214074094/src/com/reading/blog_test.txt b/group16/214074094/src/com/reading/blog_test.txt new file mode 100644 index 0000000000..b7e5cbfe14 --- /dev/null +++ b/group16/214074094/src/com/reading/blog_test.txt @@ -0,0 +1 @@ +just test new fork \ No newline at end of file From 8f629228030607f08b35a6dbef3f45650507e877 Mon Sep 17 00:00:00 2001 From: Alex5Moon <1924332561@qq.com> Date: Thu, 23 Feb 2017 19:28:59 +0800 Subject: [PATCH 035/216] init --- group16/1924332561/.classpath | 6 ++++++ group16/1924332561/.project | 17 +++++++++++++++++ .../src/com/coding/basic/ArrayList.java | 2 ++ .../1924332561/src/com/coding/basic/List.java | 2 +- 4 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 group16/1924332561/.classpath create mode 100644 group16/1924332561/.project diff --git a/group16/1924332561/.classpath b/group16/1924332561/.classpath new file mode 100644 index 0000000000..fb5011632c --- /dev/null +++ b/group16/1924332561/.classpath @@ -0,0 +1,6 @@ + + + + + + diff --git a/group16/1924332561/.project b/group16/1924332561/.project new file mode 100644 index 0000000000..5f960262bc --- /dev/null +++ b/group16/1924332561/.project @@ -0,0 +1,17 @@ + + + 1924332561Learning + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git a/group16/1924332561/src/com/coding/basic/ArrayList.java b/group16/1924332561/src/com/coding/basic/ArrayList.java index 9e20bf25c4..3fc0960e08 100644 --- a/group16/1924332561/src/com/coding/basic/ArrayList.java +++ b/group16/1924332561/src/com/coding/basic/ArrayList.java @@ -9,6 +9,8 @@ public class ArrayList implements List{ @Override public void add(Object o) { + this.elementDate[this.size]=o; + this.size++; } @Override diff --git a/group16/1924332561/src/com/coding/basic/List.java b/group16/1924332561/src/com/coding/basic/List.java index 9be54168b6..d48b1f4827 100644 --- a/group16/1924332561/src/com/coding/basic/List.java +++ b/group16/1924332561/src/com/coding/basic/List.java @@ -3,7 +3,7 @@ public interface List { public void add(Object o); public void add(int index,Object o); - public Object get(int dex); + public Object get(int index); public Object remove(int index); public int size(); } From e84543236b90a5e60ea9f833f6ae5aec9a737053 Mon Sep 17 00:00:00 2001 From: dongqihust Date: Thu, 23 Feb 2017 19:31:27 +0800 Subject: [PATCH 036/216] =?UTF-8?q?=E8=91=A3=E7=90=AA=E7=81=AB=E9=80=9F?= =?UTF-8?q?=E6=8A=A5=E9=81=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- group16/1325756593/dongqihust.readme | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 group16/1325756593/dongqihust.readme diff --git a/group16/1325756593/dongqihust.readme b/group16/1325756593/dongqihust.readme new file mode 100644 index 0000000000..e69de29bb2 From 99f12ba969aec7a9b4e2a365a850e7cb88cdff8a Mon Sep 17 00:00:00 2001 From: nelson Date: Thu, 23 Feb 2017 20:11:49 +0800 Subject: [PATCH 037/216] first commit of MyDataStructure --- group07/476770768/MyDataStructure/.classpath | 6 + group07/476770768/MyDataStructure/.gitignore | 17 ++ group07/476770768/MyDataStructure/.project | 17 ++ .../.settings/org.eclipse.jdt.core.prefs | 11 + .../src/com/coding/basic/BinaryTreeNode.java | 44 ++++ .../src/com/coding/basic/MyArrayList.java | 149 ++++++++++++ .../src/com/coding/basic/MyIterator.java | 6 + .../src/com/coding/basic/MyLinkedList.java | 223 ++++++++++++++++++ .../src/com/coding/basic/MyList.java | 9 + .../src/com/coding/basic/MyQueue.java | 30 +++ .../src/com/coding/basic/MyStack.java | 44 ++++ .../src/com/coding/basic/testFile.java | 23 ++ 12 files changed, 579 insertions(+) create mode 100644 group07/476770768/MyDataStructure/.classpath create mode 100644 group07/476770768/MyDataStructure/.gitignore create mode 100644 group07/476770768/MyDataStructure/.project create mode 100644 group07/476770768/MyDataStructure/.settings/org.eclipse.jdt.core.prefs create mode 100644 group07/476770768/MyDataStructure/src/com/coding/basic/BinaryTreeNode.java create mode 100644 group07/476770768/MyDataStructure/src/com/coding/basic/MyArrayList.java create mode 100644 group07/476770768/MyDataStructure/src/com/coding/basic/MyIterator.java create mode 100644 group07/476770768/MyDataStructure/src/com/coding/basic/MyLinkedList.java create mode 100644 group07/476770768/MyDataStructure/src/com/coding/basic/MyList.java create mode 100644 group07/476770768/MyDataStructure/src/com/coding/basic/MyQueue.java create mode 100644 group07/476770768/MyDataStructure/src/com/coding/basic/MyStack.java create mode 100644 group07/476770768/MyDataStructure/src/com/coding/basic/testFile.java diff --git a/group07/476770768/MyDataStructure/.classpath b/group07/476770768/MyDataStructure/.classpath new file mode 100644 index 0000000000..63b7e892d1 --- /dev/null +++ b/group07/476770768/MyDataStructure/.classpath @@ -0,0 +1,6 @@ + + + + + + diff --git a/group07/476770768/MyDataStructure/.gitignore b/group07/476770768/MyDataStructure/.gitignore new file mode 100644 index 0000000000..c910559f7f --- /dev/null +++ b/group07/476770768/MyDataStructure/.gitignore @@ -0,0 +1,17 @@ +*.class + +# Mobile Tools for Java (J2ME) +.mtj.tmp/ + +# Package Files # +*.jar +*.war +*.ear + +# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml +hs_err_pid* + +#ide config +.metadata +.recommenders +/bin/ diff --git a/group07/476770768/MyDataStructure/.project b/group07/476770768/MyDataStructure/.project new file mode 100644 index 0000000000..b2d0b8054f --- /dev/null +++ b/group07/476770768/MyDataStructure/.project @@ -0,0 +1,17 @@ + + + MyDataStructure + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git a/group07/476770768/MyDataStructure/.settings/org.eclipse.jdt.core.prefs b/group07/476770768/MyDataStructure/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000000..bb35fa0a87 --- /dev/null +++ b/group07/476770768/MyDataStructure/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,11 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/group07/476770768/MyDataStructure/src/com/coding/basic/BinaryTreeNode.java b/group07/476770768/MyDataStructure/src/com/coding/basic/BinaryTreeNode.java new file mode 100644 index 0000000000..6cc4ecb4df --- /dev/null +++ b/group07/476770768/MyDataStructure/src/com/coding/basic/BinaryTreeNode.java @@ -0,0 +1,44 @@ +package com.coding.basic; + +public class BinaryTreeNode { + private Object data; + private BinaryTreeNode left; + private BinaryTreeNode right; + + public void insert(BinaryTreeNode node) { + if (this.data == null) { + // empty binary tree + this.data = node.data; + this.left = node.left; + this.right = node.right; + } else if (((Integer) this.data).intValue() >= ((Integer) node.data).intValue()) { + this.left.insert(node); + }else{ + this.right.insert(node); + } + } + + 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; + } +} diff --git a/group07/476770768/MyDataStructure/src/com/coding/basic/MyArrayList.java b/group07/476770768/MyDataStructure/src/com/coding/basic/MyArrayList.java new file mode 100644 index 0000000000..f0c1b3608c --- /dev/null +++ b/group07/476770768/MyDataStructure/src/com/coding/basic/MyArrayList.java @@ -0,0 +1,149 @@ +package com.coding.basic; + +import java.util.Arrays; + +public class MyArrayList implements MyList{ + + private int size = 0; + + private Object[] elementData = new Object[5]; + + @Override + /** + * add an element to the end + */ + public void add(Object o) { + int index = size; + if(isFull()){ + extendLength(); + } + elementData[index] = o; + size++; + } + + @Override + /** + * add an element to certain index + */ + public void add(int index, Object o) { + checkBounds(index); + if(isFull()){ + extendLength(); + } + for(int i=size; i>=index; i--){ + elementData[i+1] = elementData[i]; + } + elementData[index] = o; + size++; + } + + @Override + /** + * get an element + */ + public Object get(int index) { + checkBoundsForGet(index); + if(index >= size){ + return null; + } + return elementData[index]; + } + + @Override + /** + * remove an element + */ + public Object remove(int index) { + checkBounds(index); + Object res = elementData[index]; + for(int i=index+1; i<=size; i++){ + elementData[i-1] = elementData[i]; + } + size--; + return res; + } + + @Override + public int size() { + return size; + } + + /** + * extends the length + */ + public void extendLength(){ + elementData = Arrays.copyOf(elementData, elementData.length * 2); + //System.out.println("add extend "+elementData.length); + } + + public boolean isEmpty(){ + return size == 0; + } + + public boolean isFull(){ + int len = elementData.length; + if(size >= len-1){ + return true; + } + return false; + } + + public void checkBounds(int index){ + if(index >= size || index < 0){ + //System.out.println("From MyArrayList: Index out of bounds"); + throw new IndexOutOfBoundsException(OutOfBoundsMsg(index)); + } + } + + /** + * for get() + * @param index + */ + public void checkBoundsForGet(int index){ + if(index >= elementData.length || index < 0){ + //System.out.println("From MyArrayList: Index out of bounds"); + throw new IndexOutOfBoundsException(OutOfBoundsMsg(index)); + } + } + + public String OutOfBoundsMsg(int index){ + return "Index: "+index+", Size: "+size; + } + + @Override + public String toString() { + String s = ""; + for(int i=0; i size - 1) { + // System.out.println("From MyLinkedList: Index out of bounds"); + throw new IndexOutOfBoundsException(OutOfBoundsMsg(index)); + } + } + + /** + * the index should be within 0~size + * + * @param index + */ + public void checkBoundsForAdd(int index) { + if (index < 0 || index > size) { + // System.out.println("From MyLinkedList: Index out of bounds"); + throw new IndexOutOfBoundsException(OutOfBoundsMsg(index)); + } + } + + public String OutOfBoundsMsg(int index) { + return "Index: " + index + ", Size: " + size; + } + + /** + * find the position of index + * + * @param index + * @return + */ + public Node findIndexPosition(int index) { + Node pos = head; + for (int i = 0; i < index; i++) { + pos = pos.next; + } + return pos; + } + + @Override + public String toString() { + String s = ""; + Node tmp = head; + while (tmp != null) { + s += tmp.data + " "; + tmp = tmp.next; + } + return s; + } + + private static class Node { + public Object data; + public Node prov; + public Node next; + + public Node() { + } + + public Node(Object o) { + this.data = o; + this.prov = null; + this.next = null; + } + } + + public MyIterator iterator() { + return new LinkedListIterator(this); + } + + private class LinkedListIterator implements MyIterator{ + + private MyLinkedList eleIterator; + private Node pos; + + private LinkedListIterator(MyLinkedList mll){ + this.eleIterator = mll; + this.pos = eleIterator.get(0); + } + + @Override + public boolean hasNext() { + return pos != null; + } + + @Override + public Object next() { + Node res = pos; + pos = pos.next; + return res; + } + + } + +} diff --git a/group07/476770768/MyDataStructure/src/com/coding/basic/MyList.java b/group07/476770768/MyDataStructure/src/com/coding/basic/MyList.java new file mode 100644 index 0000000000..9089e106db --- /dev/null +++ b/group07/476770768/MyDataStructure/src/com/coding/basic/MyList.java @@ -0,0 +1,9 @@ +package com.coding.basic; + +public interface MyList { + 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(); +} diff --git a/group07/476770768/MyDataStructure/src/com/coding/basic/MyQueue.java b/group07/476770768/MyDataStructure/src/com/coding/basic/MyQueue.java new file mode 100644 index 0000000000..717c67bd4b --- /dev/null +++ b/group07/476770768/MyDataStructure/src/com/coding/basic/MyQueue.java @@ -0,0 +1,30 @@ +package com.coding.basic; + +public class MyQueue { + + private MyLinkedList elementData = new MyLinkedList(); + + public void enQueue(Object o){ + elementData.add(o); + } + + public Object deQueue(){ + //if queue is empty, element.size()-1 = -1 + //MyLinkedList will throw exception + Object tmp = elementData.remove(elementData.size()-1); + return tmp; + } + + public boolean isEmpty(){ + return elementData.isEmpty(); + } + + public int size(){ + return elementData.size(); + } + + public MyIterator iterator() { + return elementData.iterator(); + } + +} diff --git a/group07/476770768/MyDataStructure/src/com/coding/basic/MyStack.java b/group07/476770768/MyDataStructure/src/com/coding/basic/MyStack.java new file mode 100644 index 0000000000..3d9e1ef9a0 --- /dev/null +++ b/group07/476770768/MyDataStructure/src/com/coding/basic/MyStack.java @@ -0,0 +1,44 @@ +package com.coding.basic; + +import java.util.EmptyStackException; + +public class MyStack { + private MyArrayList elementData = new MyArrayList(); + int top = -1;//always points to top element + + public void push(Object o){ + elementData.add(o); + top++; + } + + public Object pop(){ + if(isEmpty()){ + throw new EmptyStackException(); + }else{ + Object tmp = elementData.remove(top); + top--; + return tmp; + } + } + + public Object peek(){ + if(isEmpty()){ + throw new EmptyStackException(); + }else{ + Object tmp = elementData.get(top); + return tmp; + } + } + + public boolean isEmpty(){ + return top >= 0; + } + + public int size(){ + return top + 1; + } + + public MyIterator iterator() { + return elementData.iterator(); + } +} diff --git a/group07/476770768/MyDataStructure/src/com/coding/basic/testFile.java b/group07/476770768/MyDataStructure/src/com/coding/basic/testFile.java new file mode 100644 index 0000000000..1ccabfc977 --- /dev/null +++ b/group07/476770768/MyDataStructure/src/com/coding/basic/testFile.java @@ -0,0 +1,23 @@ +package com.coding.basic; + +public class testFile { + + public static void main(String[] args) { + MyLinkedList mll = new MyLinkedList(); + mll.add(new Integer(5)); + mll.add(new Integer(2)); + mll.add(new Integer(3)); + mll.add(new Integer(4)); + System.out.println(mll); + MyIterator mIt = mll.iterator(); + while(mIt.hasNext()){ + System.out.println(mIt.next()); + } + mll.remove(3); + System.out.println(mll); + + + + } + +} From 627fddafb765146ab5604ca6505ed595567992f1 Mon Sep 17 00:00:00 2001 From: totoro-fly Date: Thu, 23 Feb 2017 23:38:12 +0800 Subject: [PATCH 038/216] test again --- group17/876385982/.classpath | 6 ++++++ group17/876385982/.gitignore | 1 + group17/876385982/.project | 17 +++++++++++++++++ group17/876385982/src/test/Test.java | 10 ++++++++++ 4 files changed, 34 insertions(+) create mode 100644 group17/876385982/.classpath create mode 100644 group17/876385982/.gitignore create mode 100644 group17/876385982/.project create mode 100644 group17/876385982/src/test/Test.java diff --git a/group17/876385982/.classpath b/group17/876385982/.classpath new file mode 100644 index 0000000000..fb5011632c --- /dev/null +++ b/group17/876385982/.classpath @@ -0,0 +1,6 @@ + + + + + + diff --git a/group17/876385982/.gitignore b/group17/876385982/.gitignore new file mode 100644 index 0000000000..ae3c172604 --- /dev/null +++ b/group17/876385982/.gitignore @@ -0,0 +1 @@ +/bin/ diff --git a/group17/876385982/.project b/group17/876385982/.project new file mode 100644 index 0000000000..4062c6c28f --- /dev/null +++ b/group17/876385982/.project @@ -0,0 +1,17 @@ + + + 876385982 + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git a/group17/876385982/src/test/Test.java b/group17/876385982/src/test/Test.java new file mode 100644 index 0000000000..b023a3ea07 --- /dev/null +++ b/group17/876385982/src/test/Test.java @@ -0,0 +1,10 @@ +package test; + +public class Test { + + public static void main(String[] args) { + // TODO Auto-generated method stub + System.out.println("Test!"); + } + +} From 381d79321956c32dac43ae00043708602c3a4bab Mon Sep 17 00:00:00 2001 From: ikook <935542673@qq.com> Date: Fri, 24 Feb 2017 00:14:42 +0800 Subject: [PATCH 039/216] BinaryTree(The madman implementation) --- .../MyBinarySearchTreeTest.java | 62 ++++++ .../MyBinarySearchTree.java | 200 ++++++++++++++++++ 2 files changed, 262 insertions(+) create mode 100644 group18/935542673/Coding/junit/com/ikook/basic_data_structure/MyBinarySearchTreeTest.java create mode 100644 group18/935542673/Coding/src/com/ikook/basic_data_structure/MyBinarySearchTree.java diff --git a/group18/935542673/Coding/junit/com/ikook/basic_data_structure/MyBinarySearchTreeTest.java b/group18/935542673/Coding/junit/com/ikook/basic_data_structure/MyBinarySearchTreeTest.java new file mode 100644 index 0000000000..353eff87b7 --- /dev/null +++ b/group18/935542673/Coding/junit/com/ikook/basic_data_structure/MyBinarySearchTreeTest.java @@ -0,0 +1,62 @@ +package com.ikook.basic_data_structure; + +import static org.junit.Assert.*; + +import org.junit.Before; +import org.junit.Test; + +/** + * 此单元测试只测试了正常情况,一些异常情况没有测试。 + * @author ikook + */ +public class MyBinarySearchTreeTest { + + private MyBinarySearchTree tree; + + @Before + public void setUp() { + tree = new MyBinarySearchTree(); + + tree.insert(3); + tree.insert(8); + } + + @Test + public void testInsert() { + tree.insert(1); + tree.insert(4); + tree.insert(6); + tree.insert(2); + tree.insert(10); + tree.insert(9); + + assertEquals("1 2 3 4 6 8 9 10 ", tree.inorderTraverse(tree.root)); + } + + @Test + public void testFind() { + tree.insert(1); + tree.insert(4); + tree.insert(6); + tree.insert(2); + tree.insert(10); + tree.insert(9); + + assertEquals(false, tree.find(5)); + assertEquals(true, tree.find(10)); + } + + @Test + public void testDelete() { + tree.insert(1); + tree.insert(4); + tree.insert(6); + tree.insert(2); + tree.insert(10); + tree.insert(9); + + assertEquals(false, tree.delete(5)); + assertEquals(true, tree.delete(4)); + assertEquals("1 2 3 6 8 9 10 ", tree.inorderTraverse(tree.root)); + } +} diff --git a/group18/935542673/Coding/src/com/ikook/basic_data_structure/MyBinarySearchTree.java b/group18/935542673/Coding/src/com/ikook/basic_data_structure/MyBinarySearchTree.java new file mode 100644 index 0000000000..472745c4e5 --- /dev/null +++ b/group18/935542673/Coding/src/com/ikook/basic_data_structure/MyBinarySearchTree.java @@ -0,0 +1,200 @@ +package com.ikook.basic_data_structure; + +/** + * @author ikook; QQ号码: 935542673 + */ +public class MyBinarySearchTree { + + public static Node root; + + public MyBinarySearchTree() { + root = null; + } + + /** + * 插入操作 + * @param id + */ + public void insert(int id) { + Node newNode = new Node(id); + if (root == null) { + root = newNode; + return; + } + Node current = root; //当前节点 + Node parent = null; //父节点,即上一个节点 + while (true) { + parent = current; + if (id < current.data) { + current = current.left; + if (current == null) { + parent.left = newNode; + return; + } + } else { + current = current.right; + if (current == null) { + parent.right = newNode; + return; + } + } + } + } + + /** + * 查找操作 + * @param id + * @return + */ + public boolean find(int id) { + Node current = root; + while (current != null) { + if (current.data == id) { + return true; + } else if (current.data > id) { + current = current.left; + } else { + current = current.right; + } + } + return false; + } + + /** + * 删除操作 + * @param id + * @return + */ + public boolean delete(int id) { + if (root == null) // 根节点为空,则树为空,返回false。 + return false; + else { + Node parent = root; + Node current = root; + boolean isLeftChild = false; // 是否在左子树,默认为false:即不在。 + // 找到删除点以及是否在左子树 + while (current.data != id) { + parent = current; + if (current.data > id) { + isLeftChild = true; + current = current.left; + } else { + isLeftChild = false; + current = current.right; + } + if (current == null) { + return false; + } + } + + // 如果删除节点的左节点为空,右节点也为空。 + if (current.left == null && current.right == null) { + if (current == root) { + root = null; + } + if (isLeftChild == true) { + parent.left = null; + } else { + parent.right = null; + } + } + // 如果删除节点只有一个子节点,则该节点为左节点或者右节点。 + else if (current.right == null) { + if (current == root) { + root = current.left; + } else if (isLeftChild) { + parent.left = current.left; + } else { + parent.right = current.left; + } + } else if (current.left == null) { + if (current == root) { + root = current.right; + } else if (isLeftChild) { + parent.left = current.right; + } else { + parent.right = current.right; + } + } + // 如果删除节点左节点右节点都不为空。 + else if (current.left != null && current.right != null) { + + // 寻找删除节点的后继者:这说明已经发现最小元素在右子树中 + Node successor = getSuccessor(current); + if (current == root) { + root = successor; + } else if (isLeftChild) { + parent.left = successor; + } else { + parent.right = successor; + } + successor.left = current.left; + } + return true; + } + } + + /** + * 获取删除节点的后继者:删除节点的后继者是在其右节点树中最小的节点 + * @param deleleNode + * @return + */ + public Node getSuccessor(Node deleleNode) { + Node successsor = null; + Node successsorParent = null; + Node current = deleleNode.right; + while (current != null) { + successsorParent = successsor; + successsor = current; + current = current.left; + } + // 检查后继者是否有右节点 + // 如果有右节点树,则将其添加到successorParent(后继者父节点)的左节点。 + if (successsor != deleleNode.right) { + successsorParent.left = successsor.right; + successsor.right = deleleNode.right; + } + return successsor; + } + + /** + * 显示二叉树 + * @param root + * @param sb + */ + public void display(Node root, StringBuilder sb) { + if (root != null) { + display(root.left, sb); + sb.append(root.data + " "); + display(root.right, sb); + } + } + + /** + * 中序遍历:左子树->根节点->右子树 + * @param root + * @return + */ + public String inorderTraverse(Node root) { + StringBuilder sb = new StringBuilder(); + this.display(root, sb); + return sb.toString(); + } +} + +/** + * 用于表示节点 + * @author ikook + */ +class Node { + + int data; + Node left; + Node right; + + public Node(int data) { + this.data = data; + left = null; + right = null; + } +} \ No newline at end of file From 57c110fc9daf72803cab6c5a3e2027e87d666d85 Mon Sep 17 00:00:00 2001 From: ikook <935542673@qq.com> Date: Fri, 24 Feb 2017 00:26:09 +0800 Subject: [PATCH 040/216] BinaryTree(The madman implementation) --- .../com/ikook/basic_data_structure/MyBinarySearchTreeTest.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/group18/935542673/Coding/junit/com/ikook/basic_data_structure/MyBinarySearchTreeTest.java b/group18/935542673/Coding/junit/com/ikook/basic_data_structure/MyBinarySearchTreeTest.java index 353eff87b7..59e1ad3797 100644 --- a/group18/935542673/Coding/junit/com/ikook/basic_data_structure/MyBinarySearchTreeTest.java +++ b/group18/935542673/Coding/junit/com/ikook/basic_data_structure/MyBinarySearchTreeTest.java @@ -21,6 +21,7 @@ public void setUp() { tree.insert(8); } + @SuppressWarnings("static-access") @Test public void testInsert() { tree.insert(1); @@ -46,6 +47,7 @@ public void testFind() { assertEquals(true, tree.find(10)); } + @SuppressWarnings("static-access") @Test public void testDelete() { tree.insert(1); From e33db9cb3c173cbfab63a2f62288ffa837a915e3 Mon Sep 17 00:00:00 2001 From: wzy <1264835468@qq.com> Date: Fri, 24 Feb 2017 02:02:20 +0800 Subject: [PATCH 041/216] ... --- .../1264835468/src/assignment/BinaryTree.java | 95 ++++++++++++++ .../src/assignment/BinaryTreeNode.java | 59 +++++++++ .../1264835468/src/assignment/Iterator.java | 8 ++ .../src/assignment/MyArrayList.java | 95 ++++++++++++++ .../src/assignment/MyLinkedList.java | 116 ++++++++++++++++++ .../1264835468/src/assignment/MyQueue.java | 35 ++++++ .../1264835468/src/assignment/MyStack.java | 40 ++++++ 7 files changed, 448 insertions(+) create mode 100644 group17/1264835468/src/assignment/BinaryTree.java create mode 100644 group17/1264835468/src/assignment/BinaryTreeNode.java create mode 100644 group17/1264835468/src/assignment/Iterator.java create mode 100644 group17/1264835468/src/assignment/MyArrayList.java create mode 100644 group17/1264835468/src/assignment/MyLinkedList.java create mode 100644 group17/1264835468/src/assignment/MyQueue.java create mode 100644 group17/1264835468/src/assignment/MyStack.java diff --git a/group17/1264835468/src/assignment/BinaryTree.java b/group17/1264835468/src/assignment/BinaryTree.java new file mode 100644 index 0000000000..2550a8631e --- /dev/null +++ b/group17/1264835468/src/assignment/BinaryTree.java @@ -0,0 +1,95 @@ +package assignment; + +public class BinaryTree { + private BinaryTreeNode root; + + public BinaryTree(Comparable data) { + root = new BinaryTreeNode(data); + } + + public BinaryTree(BinaryTreeNode root) { + this.root = root; + } + + public BinaryTreeNode insert(Comparable data) { + BinaryTreeNode node = new BinaryTreeNode(data); + if (root == null) + root = node; + else + insert(root, node); + return node; + } + + public BinaryTreeNode insert(BinaryTreeNode node) { + return insert(node.getData()); + } + + private void insert(BinaryTreeNode current, BinaryTreeNode node) { + + if (current.compareTo(node) >= 0) { + if (current.getLeft() == null) + current.setLeft(node); + else + insert(current.getLeft(), node); + } + else { + if (current.getRight() == null) + current.setRight(node); + else + insert(current.getRight(), node); + } + } + + @Override + public String toString() { + return new BFSNodeQueue().toString(); + } + + /** + * 广度优先遍历节点队列 + * + * @author Administrator + * + */ + private class BFSNodeQueue { + private MyQueue nodeQueue; + + public BFSNodeQueue() { + nodeQueue = new MyQueue(); + enQueue(root); + } + + public boolean isEmpty() { + return nodeQueue.isEmpty(); + } + + public void enQueue(BinaryTreeNode node) { + if (node != null) nodeQueue.enQueue(node); + } + + // 出队同时把子节点入队 + public BinaryTreeNode deQueue() { + BinaryTreeNode first = (BinaryTreeNode) nodeQueue.deQueue(); + enQueue(first.getLeft()); + enQueue(first.getRight()); + return first; + } + + @Override + public String toString() { + StringBuilder stringBuilder = new StringBuilder(); + while (!nodeQueue.isEmpty()) { + BinaryTreeNode binaryTreeNode = deQueue(); + stringBuilder.append(binaryTreeNode + "\n"); + } + return stringBuilder.toString(); + } + } + + public static void main(String[] args) { + BinaryTree binaryTree = new BinaryTree(4); + binaryTree.insert(7); + binaryTree.insert(8); + System.out.println(binaryTree); + } +} diff --git a/group17/1264835468/src/assignment/BinaryTreeNode.java b/group17/1264835468/src/assignment/BinaryTreeNode.java new file mode 100644 index 0000000000..bed851ab9f --- /dev/null +++ b/group17/1264835468/src/assignment/BinaryTreeNode.java @@ -0,0 +1,59 @@ +package assignment; + +// +public class BinaryTreeNode implements Comparable { + private Comparable data; + private BinaryTreeNode left; + private BinaryTreeNode right; + + public BinaryTreeNode(Comparable data) { + this.data = data; + } + + public Comparable getData() { + return data; + } + + public void setData(Comparable 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; + } + + @Override + public int compareTo(BinaryTreeNode o) { + return data.compareTo(o.data); + } + + @Override + public String toString() { + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.append("node:" + data); + // 非叶节点则加上左右子节点data + if (left != null || right != null) { + if (left != null) + stringBuilder.append(",left:" + left.data); + else + stringBuilder.append(",left:null"); + if (right != null) + stringBuilder.append(",right:" + right.data); + else + stringBuilder.append(",right:null"); + } + return stringBuilder.toString(); + } +} diff --git a/group17/1264835468/src/assignment/Iterator.java b/group17/1264835468/src/assignment/Iterator.java new file mode 100644 index 0000000000..32ff3d2be4 --- /dev/null +++ b/group17/1264835468/src/assignment/Iterator.java @@ -0,0 +1,8 @@ +package assignment; + +// +public interface Iterator { + public boolean hasNext(); + + public Object next(); +} diff --git a/group17/1264835468/src/assignment/MyArrayList.java b/group17/1264835468/src/assignment/MyArrayList.java new file mode 100644 index 0000000000..1e9db8471c --- /dev/null +++ b/group17/1264835468/src/assignment/MyArrayList.java @@ -0,0 +1,95 @@ +package assignment; + +// +import java.util.Arrays; + +public class MyArrayList { + private Object[] elementData; + private static final int DEFAULT_SIZE = 10; + private int size; + + public MyArrayList() { + this(DEFAULT_SIZE); + } + + public MyArrayList(int initSize) { + if (initSize <= DEFAULT_SIZE) { + elementData = new Object[DEFAULT_SIZE]; + } + else { + elementData = new Object[initSize]; + } + size = 0; + } + + public void add(Object o) { + growIfNeed(); + elementData[size++] = o; + } + + public void add(int index, Object o) { + growIfNeed(); + 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 target = get(index); + // moveForwardFrom(index + 1); + System.arraycopy(elementData, index + 1, elementData, index, size - index - 1); + size--; + return target; + } + + public int size() { + return size; + } + + private void rangeCheck(int index) { + if (index >= size) { + throw new NoElementException("index:" + index); + } + } + + private void growIfNeed() { + if (size == elementData.length) grow(); + } + + private void grow() { + elementData = Arrays.copyOf(elementData, elementData.length * 2); + } + + private void moveBackwardFrom(int index) { + for (int i = size - 1; i >= index; i--) { + elementData[i + 1] = elementData[i]; + } + } + + private void moveForwardFrom(int index) { + for (int i = index; i < size; i++) { + elementData[i - 1] = elementData[i]; + } + elementData[size] = null; + } + + @Override + public String toString() { + return Arrays.toString(Arrays.copyOf(elementData, size)); + } + +} + +class NoElementException extends RuntimeException { + + public NoElementException(String string) { + super(string); + } + +} diff --git a/group17/1264835468/src/assignment/MyLinkedList.java b/group17/1264835468/src/assignment/MyLinkedList.java new file mode 100644 index 0000000000..fbd73192d6 --- /dev/null +++ b/group17/1264835468/src/assignment/MyLinkedList.java @@ -0,0 +1,116 @@ +package assignment; + +// +public class MyLinkedList { + private Node head; + private int size; + + public MyLinkedList() { + size = 0; + } + + public void add(Object o) { + if (head == null) + addFirst(o); + else + addLast(o); + } + + public void addFirst(Object o) { + Node oldFirst = head; + head = new Node(o, oldFirst); + size++; + } + + public void addLast(Object o) { + if (head == null) { + addFirst(o); + } + else { + Node oldLast = movePtrTo(size - 1); + oldLast.next = new Node(o, null); + size++; + } + + } + + public void add(int index, Object o) { + rangeCheck(index - 1); + if (index == 0) { + addFirst(o); + return; + } + Node temp = movePtrTo(index - 1); + Node oldNext = temp.next; + Node newNext = new Node(o, oldNext); + temp.next = newNext; + size++; + } + + public Object remove(int index) { + rangeCheck(index); + Object data; + if (index == 0) { + data = head.data; + head = head.next; + } + else { + Node pre = movePtrTo(index - 1); + Node target = pre.next; + pre.next = target.next; + data = target.data; + } + size--; + return data; + } + + public Object get(int index) { + return movePtrTo(index).data; + } + + public int size() { + return size; + } + + private Node movePtrTo(int index) { + Node resultNode = head; + for (int i = 0; i < index; i++) { + resultNode = resultNode.next; + } + return resultNode; + } + + private void rangeCheck(int index) { + if (index >= size) { + throw new NoElementException("index:" + index); + } + } + + @Override + public String toString() { + StringBuilder stringBuilder = new StringBuilder('['); + Node temp = head; + while (temp != null) { + stringBuilder.append(String.valueOf(temp.toString()) + ","); + temp = temp.next; + } + stringBuilder.delete(stringBuilder.length() - 1, stringBuilder.length()); + stringBuilder.append(']'); + return stringBuilder.toString(); + } + + private static class Node { + private Object data; + private Node next; + + public Node(Object data, Node next) { + this.data = data; + this.next = next; + } + + @Override + public String toString() { + return data.toString(); + } + } +} \ No newline at end of file diff --git a/group17/1264835468/src/assignment/MyQueue.java b/group17/1264835468/src/assignment/MyQueue.java new file mode 100644 index 0000000000..9df478bf77 --- /dev/null +++ b/group17/1264835468/src/assignment/MyQueue.java @@ -0,0 +1,35 @@ +package assignment; + +// +public class MyQueue { + private MyLinkedList elementData = new MyLinkedList(); + + public void enQueue(Object o) { + elementData.addLast(o); + } + + public Object deQueue() { + if (!isEmpty()) { + return elementData.remove(0); + } + throw new QueueIsEmptyException(); + } + + public boolean isEmpty() { + return elementData.size() == 0; + } + + public int size() { + return elementData.size(); + } +} + +class QueueIsEmptyException extends RuntimeException { + public QueueIsEmptyException() { + super(); + } + + public QueueIsEmptyException(String string) { + super(string); + } +} diff --git a/group17/1264835468/src/assignment/MyStack.java b/group17/1264835468/src/assignment/MyStack.java new file mode 100644 index 0000000000..038e830fa2 --- /dev/null +++ b/group17/1264835468/src/assignment/MyStack.java @@ -0,0 +1,40 @@ +package assignment; + +// +public class MyStack { + private MyArrayList elementData = new MyArrayList(); + + public void push(Object o) { + elementData.add(o); + } + + public Object pop() { + if (!isEmpty()) { + Object data = elementData.remove(elementData.size() - 1); + return data; + } + throw new StackIsEmptyException(); + } + + public Object peek() { + return elementData.get(elementData.size() - 1); + } + + public boolean isEmpty() { + return elementData.size() == 0; + } + + public int size() { + return elementData.size(); + } +} + +class StackIsEmptyException extends RuntimeException { + public StackIsEmptyException() { + super(); + } + + public StackIsEmptyException(String string) { + super(string); + } +} From a00469a64935dab0705726ffecd6e14ca0f86338 Mon Sep 17 00:00:00 2001 From: Li Han Date: Fri, 24 Feb 2017 08:08:38 +0800 Subject: [PATCH 042/216] =?UTF-8?q?=E5=AE=9E=E7=8E=B0ArrayList=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 0224-实现ArrayList数据结构 --- group16/502059278/.classpath | 6 + group16/502059278/.gitignore | 1 + group16/502059278/.project | 17 +++ .../502059278/src/cn/mark/MyArrayList.java | 144 ++++++++++++++++++ group16/502059278/src/cn/mark/MyList.java | 32 ++++ 5 files changed, 200 insertions(+) create mode 100644 group16/502059278/.classpath create mode 100644 group16/502059278/.gitignore create mode 100644 group16/502059278/.project create mode 100644 group16/502059278/src/cn/mark/MyArrayList.java create mode 100644 group16/502059278/src/cn/mark/MyList.java diff --git a/group16/502059278/.classpath b/group16/502059278/.classpath new file mode 100644 index 0000000000..fb5011632c --- /dev/null +++ b/group16/502059278/.classpath @@ -0,0 +1,6 @@ + + + + + + diff --git a/group16/502059278/.gitignore b/group16/502059278/.gitignore new file mode 100644 index 0000000000..ae3c172604 --- /dev/null +++ b/group16/502059278/.gitignore @@ -0,0 +1 @@ +/bin/ diff --git a/group16/502059278/.project b/group16/502059278/.project new file mode 100644 index 0000000000..72a951f7c1 --- /dev/null +++ b/group16/502059278/.project @@ -0,0 +1,17 @@ + + + DataStructure + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git a/group16/502059278/src/cn/mark/MyArrayList.java b/group16/502059278/src/cn/mark/MyArrayList.java new file mode 100644 index 0000000000..9e0e406274 --- /dev/null +++ b/group16/502059278/src/cn/mark/MyArrayList.java @@ -0,0 +1,144 @@ +package cn.mark; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +/** + * 自定义实现ArrayList的数据结构 + * @author hilih + * + */ +public class MyArrayList implements MyList{ + + private int size = 0; + + private Object[] elementData; + + public MyArrayList(){ + //默认容量初始化为10 + this(10); + } + + /** + * 初始即指定大小的构造方法 + * @param size 集合容量 + */ + public MyArrayList(int size){ + if ( size < 0 ){ + System.out.println("不合法的容量输入"); + return; + } + elementData = new Object[size]; + } + + /** + * 集合增容 + * @param minSize + */ + private void ensureSize(int minSize){ + int oldSize = elementData.length; + if(minSize > oldSize){ + int newSize = 3 * oldSize / 2 + 1; + if(minSize > newSize){ + newSize = minSize; + } + elementData = Arrays.copyOf(elementData, newSize); + } + } + + /** + * 下标范围判断 + * @param index + */ + private boolean rangeCheck(int index){ + if ( index >= size || index < 0 ){ + System.out.println("索引不合法!"); + return false; + } + return true; + } + + @Override + public boolean add(Object o) { + ensureSize(size+1); + elementData[size++] = o; + return true; + } + + @Override + public boolean add(int index, Object o) { + if (!rangeCheck(index)){ + return false; + } + ensureSize(size + 1); + System.arraycopy(elementData, index, elementData, index + 1, size - index); + elementData[index] = o; + size++; + return true; + } + + @Override + public Object get(int index) { + if (!rangeCheck(index)){ + return null; + } + Object o = elementData[index]; + return o; + } + + @Override + public Object remove(int index) { + if (!rangeCheck(index)){ + return null; + } + Object oldValue = elementData[index]; + int numMoved = size - index - 1; + if( numMoved > 0 ){ + System.arraycopy(elementData, index + 1, elementData, index, numMoved); + } + return oldValue; + } + + @Override + public int size() { + return size; + } + + + + @Override + public String toString() { + StringBuilder s = new StringBuilder(); + s.append("["); + for (int i = 0; i < size; i++){ + Object o = elementData[i]; + s.append(o.toString()); + if( i < size-1 ){ + s.append(","); + } + } + s.append("]"); + return s.toString(); + } + + /** + * 判断当前集合是否为空 + * @return + */ + public boolean isEmpty(){ + return size == 0; + } + + public static void main(String[] args) { + MyList list = new MyArrayList(); + list.add("a"); + list.add("b"); + list.add("c"); + list.add(2,"d"); + Object o = list.get(5); + System.out.println(o); + System.out.println(list.size()); + System.out.println(list); + } +} diff --git a/group16/502059278/src/cn/mark/MyList.java b/group16/502059278/src/cn/mark/MyList.java new file mode 100644 index 0000000000..19bc3f92fe --- /dev/null +++ b/group16/502059278/src/cn/mark/MyList.java @@ -0,0 +1,32 @@ +package cn.mark; + +public interface MyList { + /** + * 向集合中增加元素 + * @param o + */ + public boolean add(Object o); + /** + * 向集合指定的位置中增加元素 + * @param index 下标 + * @param o 元素 + */ + public boolean add(int index, Object o); + /** + * 从集合指定位置取出元素 + * @param index 下标 + * @return + */ + public Object get(int index); + /** + * 从集合中删除指定位置的元素 + * @param index 下标 + * @return + */ + public Object remove(int index); + /** + * 当前集合的元素个数 + * @return + */ + public int size(); +} \ No newline at end of file From b60144d4acde43e99e55ce306bcaf3d5e527bfd1 Mon Sep 17 00:00:00 2001 From: 240094626 Date: Fri, 24 Feb 2017 08:32:29 +0800 Subject: [PATCH 043/216] workspace of 240094626 --- group17/240094626/.gitignore | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 group17/240094626/.gitignore diff --git a/group17/240094626/.gitignore b/group17/240094626/.gitignore new file mode 100644 index 0000000000..e59106a7ab --- /dev/null +++ b/group17/240094626/.gitignore @@ -0,0 +1,22 @@ +*.class + +# Mobile Tools for Java (J2ME) +.mtj.tmp/ + +# Package Files # +*.jar +*.war +*.ear + +# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml +hs_err_pid* + +#ide config +.metadata +.recommenders + +*.settings +*.project +*.classpath +*/.settings +/**/target/**/* From 032bca58b03126ee7888255b3c3e05a849f31027 Mon Sep 17 00:00:00 2001 From: wanghongdi56 <313001956@qq.com> Date: Fri, 24 Feb 2017 08:48:02 +0800 Subject: [PATCH 044/216] test --- group16/313001956/.classpath | 12 ++++++ group16/313001956/.gitignore | 1 + group16/313001956/.project | 36 ++++++++++++++++++ group16/313001956/.settings/.jsdtscope | 12 ++++++ .../.settings/org.eclipse.jdt.core.prefs | 7 ++++ .../org.eclipse.wst.common.component | 8 ++++ ....eclipse.wst.common.project.facet.core.xml | 9 +++++ ...rg.eclipse.wst.jsdt.ui.superType.container | 1 + .../org.eclipse.wst.jsdt.ui.superType.name | 1 + .../313001956/WebContent/META-INF/MANIFEST.MF | 3 ++ group16/313001956/src/test/testclass.java | Bin 0 -> 56 bytes 11 files changed, 90 insertions(+) create mode 100644 group16/313001956/.classpath create mode 100644 group16/313001956/.gitignore create mode 100644 group16/313001956/.project create mode 100644 group16/313001956/.settings/.jsdtscope create mode 100644 group16/313001956/.settings/org.eclipse.jdt.core.prefs create mode 100644 group16/313001956/.settings/org.eclipse.wst.common.component create mode 100644 group16/313001956/.settings/org.eclipse.wst.common.project.facet.core.xml create mode 100644 group16/313001956/.settings/org.eclipse.wst.jsdt.ui.superType.container create mode 100644 group16/313001956/.settings/org.eclipse.wst.jsdt.ui.superType.name create mode 100644 group16/313001956/WebContent/META-INF/MANIFEST.MF create mode 100644 group16/313001956/src/test/testclass.java diff --git a/group16/313001956/.classpath b/group16/313001956/.classpath new file mode 100644 index 0000000000..b42037dde2 --- /dev/null +++ b/group16/313001956/.classpath @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/group16/313001956/.gitignore b/group16/313001956/.gitignore new file mode 100644 index 0000000000..84c048a73c --- /dev/null +++ b/group16/313001956/.gitignore @@ -0,0 +1 @@ +/build/ diff --git a/group16/313001956/.project b/group16/313001956/.project new file mode 100644 index 0000000000..c70f2b6986 --- /dev/null +++ b/group16/313001956/.project @@ -0,0 +1,36 @@ + + + test + + + + + + org.eclipse.wst.jsdt.core.javascriptValidator + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.wst.common.project.facet.core.builder + + + + + org.eclipse.wst.validation.validationbuilder + + + + + + org.eclipse.jem.workbench.JavaEMFNature + org.eclipse.wst.common.modulecore.ModuleCoreNature + org.eclipse.wst.common.project.facet.core.nature + org.eclipse.jdt.core.javanature + org.eclipse.wst.jsdt.core.jsNature + + diff --git a/group16/313001956/.settings/.jsdtscope b/group16/313001956/.settings/.jsdtscope new file mode 100644 index 0000000000..92e666d77d --- /dev/null +++ b/group16/313001956/.settings/.jsdtscope @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/group16/313001956/.settings/org.eclipse.jdt.core.prefs b/group16/313001956/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000000..c537b63063 --- /dev/null +++ b/group16/313001956/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,7 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6 +org.eclipse.jdt.core.compiler.compliance=1.6 +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.6 diff --git a/group16/313001956/.settings/org.eclipse.wst.common.component b/group16/313001956/.settings/org.eclipse.wst.common.component new file mode 100644 index 0000000000..ebe14cd246 --- /dev/null +++ b/group16/313001956/.settings/org.eclipse.wst.common.component @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/group16/313001956/.settings/org.eclipse.wst.common.project.facet.core.xml b/group16/313001956/.settings/org.eclipse.wst.common.project.facet.core.xml new file mode 100644 index 0000000000..611d2dfa73 --- /dev/null +++ b/group16/313001956/.settings/org.eclipse.wst.common.project.facet.core.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/group16/313001956/.settings/org.eclipse.wst.jsdt.ui.superType.container b/group16/313001956/.settings/org.eclipse.wst.jsdt.ui.superType.container new file mode 100644 index 0000000000..3bd5d0a480 --- /dev/null +++ b/group16/313001956/.settings/org.eclipse.wst.jsdt.ui.superType.container @@ -0,0 +1 @@ +org.eclipse.wst.jsdt.launching.baseBrowserLibrary \ No newline at end of file diff --git a/group16/313001956/.settings/org.eclipse.wst.jsdt.ui.superType.name b/group16/313001956/.settings/org.eclipse.wst.jsdt.ui.superType.name new file mode 100644 index 0000000000..05bd71b6ec --- /dev/null +++ b/group16/313001956/.settings/org.eclipse.wst.jsdt.ui.superType.name @@ -0,0 +1 @@ +Window \ No newline at end of file diff --git a/group16/313001956/WebContent/META-INF/MANIFEST.MF b/group16/313001956/WebContent/META-INF/MANIFEST.MF new file mode 100644 index 0000000000..254272e1c0 --- /dev/null +++ b/group16/313001956/WebContent/META-INF/MANIFEST.MF @@ -0,0 +1,3 @@ +Manifest-Version: 1.0 +Class-Path: + diff --git a/group16/313001956/src/test/testclass.java b/group16/313001956/src/test/testclass.java new file mode 100644 index 0000000000000000000000000000000000000000..6bb509e442e986399a96fa83edcd0274d77cebbb GIT binary patch literal 56 zcmXRHQBDdV6%@&o0Jr?v&nzF3!>JTrL*{ L|4ntebUhvb?&1{I literal 0 HcmV?d00001 From 5cef24d0aef4d851e8118abb453c17c0b5eed50e Mon Sep 17 00:00:00 2001 From: liuh <770164810@qq.com> Date: Fri, 24 Feb 2017 10:30:40 +0800 Subject: [PATCH 045/216] test --- group07/770164810/test.txt | 1 + 1 file changed, 1 insertion(+) create mode 100644 group07/770164810/test.txt diff --git a/group07/770164810/test.txt b/group07/770164810/test.txt new file mode 100644 index 0000000000..7c4a013e52 --- /dev/null +++ b/group07/770164810/test.txt @@ -0,0 +1 @@ +aaa \ No newline at end of file From a3b368b6a06ef8cd7a61631c7f64a3f7617605e9 Mon Sep 17 00:00:00 2001 From: earliest Date: Thu, 23 Feb 2017 18:35:44 -0800 Subject: [PATCH 046/216] add QQ directory --- group17/1282579502/.classpath | 6 ++++++ group17/1282579502/.gitignore | 1 + group17/1282579502/.project | 17 +++++++++++++++++ 3 files changed, 24 insertions(+) create mode 100644 group17/1282579502/.classpath create mode 100644 group17/1282579502/.gitignore create mode 100644 group17/1282579502/.project diff --git a/group17/1282579502/.classpath b/group17/1282579502/.classpath new file mode 100644 index 0000000000..fb5011632c --- /dev/null +++ b/group17/1282579502/.classpath @@ -0,0 +1,6 @@ + + + + + + diff --git a/group17/1282579502/.gitignore b/group17/1282579502/.gitignore new file mode 100644 index 0000000000..ae3c172604 --- /dev/null +++ b/group17/1282579502/.gitignore @@ -0,0 +1 @@ +/bin/ diff --git a/group17/1282579502/.project b/group17/1282579502/.project new file mode 100644 index 0000000000..0b4748644a --- /dev/null +++ b/group17/1282579502/.project @@ -0,0 +1,17 @@ + + + 1282579502Learning + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + From 1082e16acd903052fd3578bbfc1e8428e8ad31c2 Mon Sep 17 00:00:00 2001 From: zhan2016 Date: Fri, 24 Feb 2017 10:39:22 +0800 Subject: [PATCH 047/216] 20170224 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 完成单元测试编写 未完成 迭代器 --- .../2562124714/.idea/dictionaries/zhangwj.xml | 3 + group16/2562124714/.idea/misc.xml | 22 + group16/2562124714/.idea/modules.xml | 8 + group16/2562124714/.idea/workspace.xml | 780 ++++++++++++++++++ group16/2562124714/2562124714.iml | 21 + .../2562124714/src/Test/ArrayListTest.java | 70 ++ .../src/Test/BinaryTreeNodeTest.java | 100 +++ .../2562124714/src/Test/LinkedListTest.java | 81 ++ group16/2562124714/src/Test/QueueTest.java | 58 ++ group16/2562124714/src/Test/StackTest.java | 57 ++ group16/2562124714/src/Test/TestRunner.java | 19 + .../src/com/coding/basic/BinaryTreeNode.java | 29 +- .../src/com/coding/basic/LinkedList.java | 7 +- .../src/com/coding/basic/Stack.java | 2 +- .../src/com/coding/basic/TestJunit.java | 17 + .../src/com/coding/basic/TestRunner.java | 25 + .../src/com/coding/basic/TreeData.java | 2 + 17 files changed, 1298 insertions(+), 3 deletions(-) create mode 100644 group16/2562124714/.idea/dictionaries/zhangwj.xml create mode 100644 group16/2562124714/.idea/misc.xml create mode 100644 group16/2562124714/.idea/modules.xml create mode 100644 group16/2562124714/.idea/workspace.xml create mode 100644 group16/2562124714/2562124714.iml create mode 100644 group16/2562124714/src/Test/ArrayListTest.java create mode 100644 group16/2562124714/src/Test/BinaryTreeNodeTest.java create mode 100644 group16/2562124714/src/Test/LinkedListTest.java create mode 100644 group16/2562124714/src/Test/QueueTest.java create mode 100644 group16/2562124714/src/Test/StackTest.java create mode 100644 group16/2562124714/src/Test/TestRunner.java create mode 100644 group16/2562124714/src/com/coding/basic/TestJunit.java create mode 100644 group16/2562124714/src/com/coding/basic/TestRunner.java diff --git a/group16/2562124714/.idea/dictionaries/zhangwj.xml b/group16/2562124714/.idea/dictionaries/zhangwj.xml new file mode 100644 index 0000000000..d07fd80ae1 --- /dev/null +++ b/group16/2562124714/.idea/dictionaries/zhangwj.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/group16/2562124714/.idea/misc.xml b/group16/2562124714/.idea/misc.xml new file mode 100644 index 0000000000..e97ef03f44 --- /dev/null +++ b/group16/2562124714/.idea/misc.xml @@ -0,0 +1,22 @@ + + + + + + + + + + 1.7 + + + + + + + + \ No newline at end of file diff --git a/group16/2562124714/.idea/modules.xml b/group16/2562124714/.idea/modules.xml new file mode 100644 index 0000000000..c3fdba38f0 --- /dev/null +++ b/group16/2562124714/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/group16/2562124714/.idea/workspace.xml b/group16/2562124714/.idea/workspace.xml new file mode 100644 index 0000000000..d357c0f9a1 --- /dev/null +++ b/group16/2562124714/.idea/workspace.xml @@ -0,0 +1,780 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + binaryTree.PriOder + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1487640652721 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/group16/2562124714/2562124714.iml b/group16/2562124714/2562124714.iml new file mode 100644 index 0000000000..3a8ffcf1f5 --- /dev/null +++ b/group16/2562124714/2562124714.iml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/group16/2562124714/src/Test/ArrayListTest.java b/group16/2562124714/src/Test/ArrayListTest.java new file mode 100644 index 0000000000..9bd8f2aeca --- /dev/null +++ b/group16/2562124714/src/Test/ArrayListTest.java @@ -0,0 +1,70 @@ +package Test; + +import com.coding.basic.ArrayList; +import org.junit.After; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Test; + +import static org.junit.Assert.*; + +/** + * Created by zhangwj on 2017/2/23. + */ +public class ArrayListTest { + private static ArrayList arraylist = new ArrayList(); + @BeforeClass + public static void setUp() throws Exception { + + System.out.println("初始化变量"); + for (Integer i = 0; i < 5; i++) + { + arraylist.add(i); + } + + + } + + @After + public void tearDown() throws Exception { + + } + + @Test + public void add() throws Exception { + Integer i = arraylist.size(); + Integer AddElement = 999; + arraylist.add(AddElement); + assertEquals(i + 1, arraylist.size()); + assertEquals(AddElement, arraylist.get(arraylist.size())); + arraylist.remove(arraylist.size()); + } + + @Test + public void add1() throws Exception { + Integer AddElement = 999; + arraylist.add(1, AddElement); + assertEquals(AddElement, arraylist.get(1)); + arraylist.remove(1); + } + + @Test + public void get() throws Exception { + assertEquals(null, arraylist.get(9999)); + } + + @Test + public void remove() throws Exception { + Integer i = (Integer)arraylist.get(1); + assertEquals(i, arraylist.remove(1)); + arraylist.add(1, i); + + } + + @Test + public void size() throws Exception { + assertEquals(5, arraylist.size()); + + } + +} \ No newline at end of file diff --git a/group16/2562124714/src/Test/BinaryTreeNodeTest.java b/group16/2562124714/src/Test/BinaryTreeNodeTest.java new file mode 100644 index 0000000000..7d8f4fdd01 --- /dev/null +++ b/group16/2562124714/src/Test/BinaryTreeNodeTest.java @@ -0,0 +1,100 @@ +package Test; + +import com.coding.basic.BinaryTreeNode; +import com.coding.basic.TreeData; +import com.sun.org.apache.bcel.internal.generic.NEW; +import org.junit.Before; +import org.junit.Test; + +import static org.junit.Assert.*; + +/** + * Created by zhangwj on 2017/2/23. + */ +public class BinaryTreeNodeTest { + private BinaryTreeNode binaryTree = new BinaryTreeNode(); + @Before + public void setUp() throws Exception { + //System.out.println("初始化二叉树,5, 4, 7"); + TreeData element = new TreeData(); + element.setT((Integer)5); + binaryTree.insert(element); + TreeData element2 = new TreeData(); + element2.setT((Integer)4); + binaryTree.insert(element2); + TreeData element3 = new TreeData(); + element3.setT((Integer)7); + binaryTree.insert(element3); +// binaryTree.PriOder(this.binaryTree); + } + + @Test + public void getData() throws Exception { + assertEquals(5, binaryTree.getData().getT()); + + } + + @Test + public void setData() throws Exception { + TreeData element = new TreeData(); + element.setT(6); + binaryTree.setData(element); + assertEquals(6, binaryTree.getData().getT()); +// binaryTree.PriOder(this.binaryTree); + + } + + @Test + public void getLeft() throws Exception { + assertEquals(4, binaryTree.getLeft().getData().getT()); + + } + + @Test + public void setLeft() throws Exception { + TreeData element = new TreeData(); + element.setT(2); + BinaryTreeNode NewTreeNode = new BinaryTreeNode(); + NewTreeNode.setData(element); + binaryTree.setLeft(NewTreeNode); + assertEquals(2, binaryTree.getLeft().getData().getT()); +// binaryTree.PriOder(this.binaryTree); + } + + @Test + public void getRight() throws Exception { + assertEquals(7, binaryTree.getRight().getData().getT()); + + } + + @Test + public void setRight() throws Exception { + TreeData element = new TreeData(); + element.setT(9); + BinaryTreeNode NewTreeNode = new BinaryTreeNode(); + NewTreeNode.setData(element); + binaryTree.setRight(NewTreeNode); + assertEquals(9, binaryTree.getRight().getData().getT()); + } + + @Test + public void priOder() throws Exception { + + + } + + @Test + public void insert() throws Exception { + TreeData element = new TreeData(); + element.setT(2); + binaryTree.insert(element); + binaryTree.PriOder(this.binaryTree); + element.setT(9); + binaryTree.insert(element); + binaryTree.PriOder(this.binaryTree); + element.setT(8); +// binaryTree.PriOder(this.binaryTree); + + } + +} \ No newline at end of file diff --git a/group16/2562124714/src/Test/LinkedListTest.java b/group16/2562124714/src/Test/LinkedListTest.java new file mode 100644 index 0000000000..276b389f15 --- /dev/null +++ b/group16/2562124714/src/Test/LinkedListTest.java @@ -0,0 +1,81 @@ +package Test; + +import com.coding.basic.LinkedList; +import org.junit.Before; +import org.junit.Test; + +import static org.junit.Assert.*; + +/** + * Created by zhangwj on 2017/2/23. + */ +public class LinkedListTest { + private LinkedList linkedlist = new LinkedList(); + + @Before + public void Init() + { + System.out.println("初始化"); + linkedlist.add(9.9); + linkedlist.add(9.99); + } + + + @Test + public void add() throws Exception { + linkedlist.add(8.8); + assertEquals(3, linkedlist.size()); + System.out.println("after add size is " + linkedlist.size()); + System.out.println("after add last element is " + linkedlist.get(linkedlist.size())); + + } + + @Test + public void add1() throws Exception { + linkedlist.add(2, 7.7); + assertEquals(3, linkedlist.size()); + System.out.println("after add in 2th size is " + linkedlist.size()); + System.out.println("after add 2th element is " + linkedlist.get(2)); + } + + @Test + public void get() throws Exception { + assertEquals(9.9, linkedlist.get(1)); + } + + @Test + public void remove() throws Exception { + assertEquals(9.9, linkedlist.remove(1)); + } + + @Test + public void size() throws Exception { + assertEquals(2, linkedlist.size()); + + } + + @Test + public void addFirst() throws Exception { + linkedlist.addFirst(3.3); + assertEquals(3.3, linkedlist.get(1)); +// System.out.println(); + } + + @Test + public void addLast() throws Exception { + linkedlist.addLast(3.3); + assertEquals(3.3, linkedlist.get(linkedlist.size())); + + } + + @Test + public void removeFirst() throws Exception { + assertEquals(9.9, linkedlist.removeFirst()); + } + + @Test + public void removeLast() throws Exception { + assertEquals(9.99, linkedlist.removeLast()); + } + +} \ No newline at end of file diff --git a/group16/2562124714/src/Test/QueueTest.java b/group16/2562124714/src/Test/QueueTest.java new file mode 100644 index 0000000000..3f0557f262 --- /dev/null +++ b/group16/2562124714/src/Test/QueueTest.java @@ -0,0 +1,58 @@ +package Test; + +import com.coding.basic.Queue; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +import static org.junit.Assert.*; + +/** + * Created by zhangwj on 2017/2/23. + */ +public class QueueTest { + private Queue queue = new Queue(); + @Before + public void setUp() throws Exception { + System.out.println("初始化队列,元素为a,b,c,d"); + + String[] s = {"a", "b","c","d"}; + for (String a:s + ) { + queue.enQueue(a); + } + + } + + @After + public void tearDown() throws Exception { + + } + + @Test + public void enQueue() throws Exception { + queue.enQueue("dasdas"); + assertEquals(5, queue.size()); +// assertEquals("dasdas", queue.); + } + + @Test + public void deQueue() throws Exception { + assertEquals("a",queue.deQueue()); + assertEquals(3, queue.size()); + + } + + @Test + public void isEmpty() throws Exception { + assertEquals(false, queue.isEmpty()); + + } + + @Test + public void size() throws Exception { + assertEquals(4, queue.size()); + + } + +} \ No newline at end of file diff --git a/group16/2562124714/src/Test/StackTest.java b/group16/2562124714/src/Test/StackTest.java new file mode 100644 index 0000000000..0a36d4dc0f --- /dev/null +++ b/group16/2562124714/src/Test/StackTest.java @@ -0,0 +1,57 @@ +package Test; + +import com.coding.basic.Stack; +import org.junit.Before; +import org.junit.Test; + +import static org.junit.Assert.*; + +/** + * Created by zhangwj on 2017/2/23. + */ +public class StackTest { + private Stack stack = new Stack(); + @Before + public void setUp() throws Exception { + System.out.println("初始化栈,元素为a,b,c,d"); + + String[] s = {"a", "b","c","d"}; + for (String a:s + ) { + stack.push(a); + } + + } + + @Test + public void push() throws Exception { + stack.push("aaa"); + assertEquals(5, stack.size()); + assertEquals("aaa", stack.peek()); + + } + + @Test + public void pop() throws Exception { + assertEquals("d", stack.pop()); + assertEquals(3, stack.size()); + + } + + @Test + public void peek() throws Exception { + assertEquals("d", stack.peek()); + assertEquals(4, stack.size()); + } + + @Test + public void isEmpty() throws Exception { + assertEquals(false, stack.isEmpty()); + } + + @Test + public void size() throws Exception { + assertEquals(4, stack.size()); + } + +} \ No newline at end of file diff --git a/group16/2562124714/src/Test/TestRunner.java b/group16/2562124714/src/Test/TestRunner.java new file mode 100644 index 0000000000..2bf465f832 --- /dev/null +++ b/group16/2562124714/src/Test/TestRunner.java @@ -0,0 +1,19 @@ +package Test; + +import org.junit.runner.JUnitCore; +import org.junit.runner.notification.Failure; + +import javax.xml.transform.Result; + +/** + * Created by zhangwj on 2017/2/23. 调用测试类 可重复使用 + */ +public class TestRunner { + public static void main(String[] args) { + org.junit.runner.Result result = JUnitCore.runClasses(BinaryTreeNodeTest.class); + for (Failure failure:result.getFailures()) { + System.out.println(failure.toString()); + } + System.out.println(result.wasSuccessful()); + } +} diff --git a/group16/2562124714/src/com/coding/basic/BinaryTreeNode.java b/group16/2562124714/src/com/coding/basic/BinaryTreeNode.java index 680c20c419..a703ad3165 100644 --- a/group16/2562124714/src/com/coding/basic/BinaryTreeNode.java +++ b/group16/2562124714/src/com/coding/basic/BinaryTreeNode.java @@ -1,5 +1,7 @@ package com.coding.basic; +import java.util.Properties; + public class BinaryTreeNode { private TreeData treeData; @@ -25,11 +27,36 @@ public BinaryTreeNode getRight() { public void setRight(BinaryTreeNode right) { this.right = right; } + + public void PriOder(BinaryTreeNode Node) + { + if (Node.treeData != null) + { + System.out.println(Node.treeData.getT()); + if (Node.left != null) + { + PriOder(Node.left); + } + if (Node.right != null) + { + PriOder(Node.right); + } + } + + } + public BinaryTreeNode insert(TreeData o){ + if (this.treeData == null && this.left == null && this.right == null) + { + this.treeData = o; + this.left = null; + this.right = null; + return null; + } //遍历寻找元素应该插入的位置 - if (o.compareTo(this.treeData) < 0) + if (o.compareTo(this.treeData) <= 0) { if (this.left != null) { diff --git a/group16/2562124714/src/com/coding/basic/LinkedList.java b/group16/2562124714/src/com/coding/basic/LinkedList.java index 8ef49d108a..f1de0a6839 100644 --- a/group16/2562124714/src/com/coding/basic/LinkedList.java +++ b/group16/2562124714/src/com/coding/basic/LinkedList.java @@ -5,6 +5,11 @@ import java.awt.*; public class LinkedList implements List { + public LinkedList() + { + head = null; + this.Size = 0; + } private Node head; private int Size; @@ -98,7 +103,7 @@ public int size(){ } public void addFirst(Object o){ - Node NewNode = new Node(0); + Node NewNode = new Node(o); if (null == this.head) { diff --git a/group16/2562124714/src/com/coding/basic/Stack.java b/group16/2562124714/src/com/coding/basic/Stack.java index 61c92b2fe7..9dba3befa5 100644 --- a/group16/2562124714/src/com/coding/basic/Stack.java +++ b/group16/2562124714/src/com/coding/basic/Stack.java @@ -9,7 +9,7 @@ public class Stack { // } public void push(Object o){ - elementData.add(0); + elementData.add(o); } public Object pop(){ diff --git a/group16/2562124714/src/com/coding/basic/TestJunit.java b/group16/2562124714/src/com/coding/basic/TestJunit.java new file mode 100644 index 0000000000..59ef43a992 --- /dev/null +++ b/group16/2562124714/src/com/coding/basic/TestJunit.java @@ -0,0 +1,17 @@ +package com.coding.basic; +import org.junit.Test; +import static org.junit.Assert.assertEquals; + +/** + * Created by zhangwj on 2017/2/23. + */ +public class TestJunit { + @Test + + public void testAdd() + { + String str = "Junit is working fine"; + assertEquals("Junit is working fine", str); + } + +} diff --git a/group16/2562124714/src/com/coding/basic/TestRunner.java b/group16/2562124714/src/com/coding/basic/TestRunner.java new file mode 100644 index 0000000000..625ace52c6 --- /dev/null +++ b/group16/2562124714/src/com/coding/basic/TestRunner.java @@ -0,0 +1,25 @@ +package com.coding.basic; + +import com.sun.net.httpserver.Authenticator; +import org.junit.runner.JUnitCore; +import org.junit.runner.notification.Failure; +import org.junit.runners.model.TestClass; + +import javax.xml.transform.Result; + +/** + * Created by zhangwj on 2017/2/23. + */ +public class TestRunner { + public static void main(String[] args) + { + org.junit.runner.Result result = JUnitCore.runClasses(TestJunit.class); + + for (Failure failure : result.getFailures()) + { + System.out.println(failure.toString()); + } + + System.out.println(result.wasSuccessful()); + } +} diff --git a/group16/2562124714/src/com/coding/basic/TreeData.java b/group16/2562124714/src/com/coding/basic/TreeData.java index 3c39539b28..e79b7bd450 100644 --- a/group16/2562124714/src/com/coding/basic/TreeData.java +++ b/group16/2562124714/src/com/coding/basic/TreeData.java @@ -12,6 +12,8 @@ public T getT() return t; } + public void setT(T o) { t = o;} + @Override public int compareTo(TreeData o) { return getT().compareTo(o.getT()); From ffba0ce27c81eef67ad3c6fdac9c9f72c0d1fb0f Mon Sep 17 00:00:00 2001 From: earliest Date: Thu, 23 Feb 2017 18:59:53 -0800 Subject: [PATCH 048/216] add first test class --- .../src/com/wusa/assignment1/TestDriver.java | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 group17/1282579502/src/com/wusa/assignment1/TestDriver.java diff --git a/group17/1282579502/src/com/wusa/assignment1/TestDriver.java b/group17/1282579502/src/com/wusa/assignment1/TestDriver.java new file mode 100644 index 0000000000..9d150fc01a --- /dev/null +++ b/group17/1282579502/src/com/wusa/assignment1/TestDriver.java @@ -0,0 +1,10 @@ +package com.wusa.assignment1; + +public class TestDriver { + + public static void main(String[] args) { + // TODO Auto-generated method stub + System.out.println("Hello World"); + } + +} From 4dd5aaee3607aae91aa7680f3b2ea2641f641ec4 Mon Sep 17 00:00:00 2001 From: Erli Suo Date: Thu, 23 Feb 2017 19:08:48 -0800 Subject: [PATCH 049/216] test commit from company box --- group17/1282579502/src/com/wusa/assignment1/TestDriver.java | 1 + 1 file changed, 1 insertion(+) diff --git a/group17/1282579502/src/com/wusa/assignment1/TestDriver.java b/group17/1282579502/src/com/wusa/assignment1/TestDriver.java index 9d150fc01a..d757ac09cd 100644 --- a/group17/1282579502/src/com/wusa/assignment1/TestDriver.java +++ b/group17/1282579502/src/com/wusa/assignment1/TestDriver.java @@ -5,6 +5,7 @@ public class TestDriver { public static void main(String[] args) { // TODO Auto-generated method stub System.out.println("Hello World"); + System.out.println("hello back"); } } From 640f11ee6a5cd655bf30387d95c1788d8bfc074c Mon Sep 17 00:00:00 2001 From: wanghongdi56 <313001956@qq.com> Date: Fri, 24 Feb 2017 13:05:46 +0800 Subject: [PATCH 050/216] test2 --- group16/313001956/src/test/test2.java | Bin 0 -> 52 bytes group16/313001956/src/test/testclass.java | Bin 56 -> 59 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 group16/313001956/src/test/test2.java diff --git a/group16/313001956/src/test/test2.java b/group16/313001956/src/test/test2.java new file mode 100644 index 0000000000000000000000000000000000000000..d3ea89f94c14c6ba5240c69bc1d1f9e907ff5c45 GIT binary patch literal 52 zcmXRHQBLJ!P-6fBMpxbVEt#kH>r@+staGVNV1Ijb;?FL|<(>8?gO)o_5;0Mqrkys) HbkPL>vnF_d&>jiEA From 9f9c4d9689d33555e5eaf35f1e88522d24c43207 Mon Sep 17 00:00:00 2001 From: Weiyin Date: Thu, 23 Feb 2017 22:10:00 -0700 Subject: [PATCH 051/216] assignment 1 draft --- .../src/com/coding/basic/ArrayList.java | 122 +++++++++++++++ .../src/com/coding/basic/BinaryTreeNode.java | 32 ++++ .../src/com/coding/basic/Iterator.java | 7 + .../src/com/coding/basic/LinkedList.java | 148 ++++++++++++++++++ .../src/com/coding/basic/List.java | 9 ++ .../src/com/coding/basic/Queue.java | 30 ++++ .../src/com/coding/basic/Stack.java | 37 +++++ 7 files changed, 385 insertions(+) create mode 100644 group20/331798361/assignment1/src/com/coding/basic/ArrayList.java create mode 100644 group20/331798361/assignment1/src/com/coding/basic/BinaryTreeNode.java create mode 100644 group20/331798361/assignment1/src/com/coding/basic/Iterator.java create mode 100644 group20/331798361/assignment1/src/com/coding/basic/LinkedList.java create mode 100644 group20/331798361/assignment1/src/com/coding/basic/List.java create mode 100644 group20/331798361/assignment1/src/com/coding/basic/Queue.java create mode 100644 group20/331798361/assignment1/src/com/coding/basic/Stack.java diff --git a/group20/331798361/assignment1/src/com/coding/basic/ArrayList.java b/group20/331798361/assignment1/src/com/coding/basic/ArrayList.java new file mode 100644 index 0000000000..0d960ee3d8 --- /dev/null +++ b/group20/331798361/assignment1/src/com/coding/basic/ArrayList.java @@ -0,0 +1,122 @@ +package com.coding.basic; + +import java.util.Arrays; + +public class ArrayList implements List { + + + private int size = 0; + + private Object[] elementData = new Object[100]; + + public void add(Object o){ + int n = elementData.length; + int i = 0; + while (elementData[i] != null) { + i++; + } + if (i < n) { + elementData[i] = o; + } else { + Object[] temp = Arrays.copyOf(elementData, n + 1); + temp[n] = o; + elementData = temp; + } + size++; + } + public void add(int index, Object o){ + int n = elementData.length; + int i = 0; + while (elementData[i] != null) { + i++; + } + if (index < 0 || index > i) { + System.out.println(index + " is invalid index!"); + return; + } + if (i < n) { + for (int j = i; j > index; j--) { + elementData[j] = elementData[j - 1]; + } + elementData[index] = o; + } else { + Object[] temp = Arrays.copyOf(elementData, n + 1); + for (int j = i; j > index; j--) { + temp[j] = temp[j - 1]; + } + temp[index] = o; + elementData = temp; + } + size++; + } + + public Object get(int index){ + int i = 0; + while (elementData[i] != null) { + i++; + } + if (index < 0 || index >= i) { + System.out.println(index + " is invalid index!"); + return null; + } else { + return elementData[index]; + } + } + + public Object remove(int index){ + int i = 0; + while (elementData[i] != null) { + i++; + } + if (index < 0 || index >= i) { + System.out.println(index + " is invalid index!"); + return null; + } + Object result = elementData[index]; + for (int j = index; j < i; j++) { + elementData[j] = elementData[j + 1]; + } + size--; + return result; + } + + public int size(){ + return size; + } + + public String toString() { + int i = 0; + while (elementData[i] != null) { + i++; + } + String result = ""; + for (int j = 0; j < i - 1; j++) { + result += elementData[j].toString() + ", "; + } + result += elementData[size - 1].toString(); + return result; + } + + public Iterator iterator(){ + return null; + } + + public static void main(String args[]){ + ArrayList list1 = new ArrayList(); + list1.add("a"); + list1.add("b"); + list1.add("c"); + System.out.println(list1.toString()); + list1.add(5, "d"); + list1.add(1, "d"); + System.out.println(list1.toString()); + list1.add(4, "e"); + System.out.println(list1.toString()); + list1.get(5); + System.out.println(list1.get(0)); + list1.remove(2); + System.out.println(list1.toString()); + System.out.println(list1.size()); + } + +} diff --git a/group20/331798361/assignment1/src/com/coding/basic/BinaryTreeNode.java b/group20/331798361/assignment1/src/com/coding/basic/BinaryTreeNode.java new file mode 100644 index 0000000000..266eff3d56 --- /dev/null +++ b/group20/331798361/assignment1/src/com/coding/basic/BinaryTreeNode.java @@ -0,0 +1,32 @@ +package com.coding.basic; + +public class BinaryTreeNode { + + private Object data; + private BinaryTreeNode left; + private BinaryTreeNode right; + + 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){ + return null; + } + +} diff --git a/group20/331798361/assignment1/src/com/coding/basic/Iterator.java b/group20/331798361/assignment1/src/com/coding/basic/Iterator.java new file mode 100644 index 0000000000..dbe8b9afb2 --- /dev/null +++ b/group20/331798361/assignment1/src/com/coding/basic/Iterator.java @@ -0,0 +1,7 @@ +package com.coding.basic; + +public interface Iterator { + public boolean hasNext(); + public Object next(); + +} diff --git a/group20/331798361/assignment1/src/com/coding/basic/LinkedList.java b/group20/331798361/assignment1/src/com/coding/basic/LinkedList.java new file mode 100644 index 0000000000..e029beaeb4 --- /dev/null +++ b/group20/331798361/assignment1/src/com/coding/basic/LinkedList.java @@ -0,0 +1,148 @@ +package com.coding.basic; + +public class LinkedList implements List { + + private Node head; + private int size; + + public void add(Object o){ + if (head.data == null) { + head.data = o; + head.next = null; + size++; + return; + } + Node node = new Node(o); + Node curr = head; + while (curr.next != null) { + curr = curr.next; + } + curr.next = node; + size++; + } + public void add(int index , Object o){ + + if (index < 0 || index > size) { + System.out.println(index + " is invalid index!"); + return; + } + if (head.data == null) { + if (index == 0) { + head.data = o; + head.next = null; + size++; + return; + } else { + System.out.println("invalid index!"); + return; + } + } + Node node = new Node(o); + Node curr = head; + for (int i = 0; i < index - 1; i++) { + curr = curr.next; + } + Node temp = curr.next; + curr.next = node; + node.next = temp; + size++; + } + public Object get(int index){ + if (index < 0 || index > size) { + System.out.println(index + " is invalid index!"); + return null; + } + Node result = head; + for (int i = 0; i < index; i++) { + result = result.next; + } + return result; + } + public Object remove(int index){ + if (index < 0 || index > size) { + System.out.println(index + " is invalid index!"); + return null; + } + Node curr = head; + for (int i = 0; i < index - 1; i++) { + curr = curr.next; + } + Node result = curr.next; + curr.next = curr.next.next; + size--; + return result; + } + + public int size(){ + return size; + } + + public void addFirst(Object o){ + if (head.data == null) { + head.data = o; + head.next = null; + size++; + return; + } + Node temp = head; + head = new Node(o); + head.next = temp; + size++; + } + + public void addLast(Object o){ + if (head.data == null) { + head.data = o; + head.next = null; + size++; + return; + } + Node node = new Node(o); + Node curr = head; + while (curr.next != null) { + curr = curr.next; + } + curr.next = node; + size++; + } + + public Object removeFirst(){ + if (head.data == null) { + return null; + } + Node result = head; + head = head.next; + size--; + return result; + } + + public Object removeLast(){ + if (head.data == null) { + return null; + } + Node curr = head; + for (int i = 0; i < size - 1; i++) { + curr = curr.next; + } + Node result = curr.next; + curr.next = null; + size--; + return result; + } + + public Iterator iterator(){ + return null; + } + + + private static class Node{ + Object data; + Node next; + + Node(Object o) { + data = o; + next = null; + } + + } +} diff --git a/group20/331798361/assignment1/src/com/coding/basic/List.java b/group20/331798361/assignment1/src/com/coding/basic/List.java new file mode 100644 index 0000000000..396b1f6416 --- /dev/null +++ b/group20/331798361/assignment1/src/com/coding/basic/List.java @@ -0,0 +1,9 @@ +package com.coding.basic; + +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(); +} diff --git a/group20/331798361/assignment1/src/com/coding/basic/Queue.java b/group20/331798361/assignment1/src/com/coding/basic/Queue.java new file mode 100644 index 0000000000..c4991a07f5 --- /dev/null +++ b/group20/331798361/assignment1/src/com/coding/basic/Queue.java @@ -0,0 +1,30 @@ +package com.coding.basic; + + +public class Queue { + private LinkedList list = new LinkedList(); + + public void enQueue(Object o){ + list.add(o); + } + + public Object deQueue(){ + int length = list.size(); + if (length == 0) { + return null; + } + return list.removeFirst(); + } + + public boolean isEmpty(){ + if (list.size() == 0) { + return true; + } else { + return false; + } + } + + public int size(){ + return list.size(); + } +} diff --git a/group20/331798361/assignment1/src/com/coding/basic/Stack.java b/group20/331798361/assignment1/src/com/coding/basic/Stack.java new file mode 100644 index 0000000000..0a48545cea --- /dev/null +++ b/group20/331798361/assignment1/src/com/coding/basic/Stack.java @@ -0,0 +1,37 @@ +package com.coding.basic; + +public class Stack { + private ArrayList elementData = new ArrayList(); + + public void push(Object o) { + elementData.add(o); + } + + public Object pop(){ + int length = elementData.size(); + if (length == 0) { + return null; + } + return elementData.remove(length - 1); + } + + public Object peek(){ + int length = elementData.size(); + if (length == 0) { + return null; + } + return elementData.get(length - 1); + } + + public boolean isEmpty(){ + if (elementData.size() != 0) { + return false; + } else { + return true; + } + } + + public int size(){ + return elementData.size(); + } +} From 3dd4ea97a602fd26cfe3a59109e4b9f45a18e987 Mon Sep 17 00:00:00 2001 From: zj <2258659044@qq.com> Date: Fri, 24 Feb 2017 13:17:53 +0800 Subject: [PATCH 052/216] =?UTF-8?q?=E4=BA=8C=E5=8F=89=E6=A0=91=E5=AE=9E?= =?UTF-8?q?=E7=8E=B0=E6=9B=B4=E6=96=B0=E4=BB=A5=E5=8F=8A=E5=8D=95=E5=85=83?= =?UTF-8?q?=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/com/coding/basic/ArrayList.java | 200 +++++++++--------- .../src/com/coding/basic/BinaryTree.java | 64 ++++++ .../src/com/coding/basic/BinaryTreeNode.java | 118 ++++------- .../test/com/coding/basic/BinaryTreeTest.java | 58 +++++ .../src/test/com/coding/basic/QueueTest.java | 64 ++++++ .../src/test/com/coding/basic/StackTest.java | 76 +++++++ 6 files changed, 399 insertions(+), 181 deletions(-) create mode 100644 group12/2258659044/zj-2017/src/com/coding/basic/BinaryTree.java create mode 100644 group12/2258659044/zj-2017/src/test/com/coding/basic/BinaryTreeTest.java create mode 100644 group12/2258659044/zj-2017/src/test/com/coding/basic/QueueTest.java create mode 100644 group12/2258659044/zj-2017/src/test/com/coding/basic/StackTest.java diff --git a/group12/2258659044/zj-2017/src/com/coding/basic/ArrayList.java b/group12/2258659044/zj-2017/src/com/coding/basic/ArrayList.java index 16cd3a0fc1..d08cf467eb 100644 --- a/group12/2258659044/zj-2017/src/com/coding/basic/ArrayList.java +++ b/group12/2258659044/zj-2017/src/com/coding/basic/ArrayList.java @@ -1,100 +1,100 @@ -package com.coding.basic; - -import java.util.NoSuchElementException; - -public class ArrayList implements List { - - private int size = 0; - /*扩容因子*/ - private static final int GENE = 10; - - private Object[] elementData = new Object[10]; - /*扩容引用*/ - private Object[] newElementData; - - public void add(Object o){ - if(size>=elementData.length){//扩容 - grow(); - } - elementData[size] = o; - size ++; - } - public void add(int index, Object o){ - - if(index>size){ - throw new IndexOutOfBoundsException("Index: "+index+",Size:"+size); - } - if(size>=elementData.length||index>=elementData.length-1){//长度不够需要扩容 - grow(); - } - if(indexsize){ - size = index+1; - }else{ - size ++; - } - } - - public Object get(int index){ - - if(index>=size){ - throw new IndexOutOfBoundsException("Index: "+index+",Size:"+size); - } - return elementData[index]; - } - - public Object remove(int index){ - - Object o = elementData[index]; - System.arraycopy(elementData, index+1, elementData, index, size-(index+1)); - size --; - return o; - } - - public int size(){ - return size; - } - - /** - * 扩容,扩容因子为10 - */ - private void grow(){ - - newElementData = new Object[size+GENE]; - System.arraycopy(elementData, 0, newElementData, 0, elementData.length); - elementData = newElementData; - } - - - public Iterator iterator(){ - - return new Itr(); - } - - private class Itr implements Iterator{ - - int cursor; - @Override - public boolean hasNext() { - return cursor != ArrayList.this.size; - } - - @Override - public Object next() { - - int i = this.cursor; - if (i >= ArrayList.this.size){ - throw new NoSuchElementException(); - } - this.cursor = (i + 1); - return ArrayList.this.elementData[i]; - } - - } -} +package com.coding.basic; + +import java.util.NoSuchElementException; + +public class ArrayList implements List { + + private int size = 0; + /*扩容因子*/ + private static final int GENE = 10; + + private Object[] elementData = new Object[10]; + /*扩容引用*/ + private Object[] newElementData; + + public void add(Object o){ + if(size>=elementData.length){//扩容 + grow(); + } + elementData[size] = o; + size ++; + } + public void add(int index, Object o){ + + if(index>size){ + throw new IndexOutOfBoundsException("Index: "+index+",Size:"+size); + } + if(size>=elementData.length||index>=elementData.length-1){//长度不够需要扩容 + grow(); + } + if(indexsize){ + size = index+1; + }else{ + size ++; + } + } + + public Object get(int index){ + + if(index>size){ + throw new IndexOutOfBoundsException("Index: "+index+",Size:"+size); + } + return elementData[index]; + } + + public Object remove(int index){ + + Object o = elementData[index]; + System.arraycopy(elementData, index+1, elementData, index, size-(index+1)); + size --; + return o; + } + + public int size(){ + return size; + } + + /** + * 扩容,扩容因子为10 + */ + private void grow(){ + + newElementData = new Object[size+GENE]; + System.arraycopy(elementData, 0, newElementData, 0, elementData.length); + elementData = newElementData; + } + + + public Iterator iterator(){ + + return new Itr(); + } + + private class Itr implements Iterator{ + + int cursor; + @Override + public boolean hasNext() { + return cursor != ArrayList.this.size; + } + + @Override + public Object next() { + + int i = this.cursor; + if (i >= ArrayList.this.size){ + throw new NoSuchElementException(); + } + this.cursor = (i + 1); + return ArrayList.this.elementData[i]; + } + + } +} diff --git a/group12/2258659044/zj-2017/src/com/coding/basic/BinaryTree.java b/group12/2258659044/zj-2017/src/com/coding/basic/BinaryTree.java new file mode 100644 index 0000000000..e5fae50203 --- /dev/null +++ b/group12/2258659044/zj-2017/src/com/coding/basic/BinaryTree.java @@ -0,0 +1,64 @@ +package com.coding.basic; + +public class BinaryTree { + + //根节点 + private BinaryTreeNode root; + + @SuppressWarnings({ "rawtypes", "unchecked" }) + public > BinaryTreeNode insert(T o){ + + BinaryTreeNode treeNode = new BinaryTreeNode(); + treeNode.setData(o); + if(root == null){ + root = treeNode; + }else{ + BinaryTreeNode currentNode = root; + BinaryTreeNode parent; + while(true){ + parent = currentNode; + if(((Comparable)currentNode.getData()).compareTo(o)>0){//向左放 + currentNode = currentNode.getLeft(); + if(currentNode == null){ + parent.setLeft(treeNode); + treeNode.setParent(parent); + break; + } + }else{//向右放 + currentNode = currentNode.getRight(); + if(currentNode == null){ + parent.setRight(treeNode); + treeNode.setParent(parent); + break; + } + } + } + } + return treeNode; + } + + /** + * 先序遍历 + * @param node + * @return + */ + public List traversalBefore(BinaryTreeNode node){ + //所有数据集合 + List datas = new ArrayList(); + return traversal(node,datas); + } + private List traversal(BinaryTreeNode node,List datas){ + + if(node !=null){ + datas.add(node.getData()); + traversal(node.getLeft(),datas); + traversal(node.getRight(),datas); + } + return datas; + } + + public BinaryTreeNode getRoot() { + return root; + } + +} diff --git a/group12/2258659044/zj-2017/src/com/coding/basic/BinaryTreeNode.java b/group12/2258659044/zj-2017/src/com/coding/basic/BinaryTreeNode.java index c167c877c3..557728a02a 100644 --- a/group12/2258659044/zj-2017/src/com/coding/basic/BinaryTreeNode.java +++ b/group12/2258659044/zj-2017/src/com/coding/basic/BinaryTreeNode.java @@ -1,81 +1,37 @@ -package com.coding.basic; -public class BinaryTreeNode { - - private Object data; - //根节点 - private BinaryTreeNode root; - //父节点 - private BinaryTreeNode parent; - private BinaryTreeNode left; - private BinaryTreeNode right; - //所有数据集合 - private final List datas = new ArrayList(); - 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; - } - - @SuppressWarnings({ "rawtypes", "unchecked" }) - public > BinaryTreeNode insert(T o){ - - BinaryTreeNode treeNode = new BinaryTreeNode(); - treeNode.data = o; - if(root == null){ - root = treeNode; - root.root = treeNode; - }else{ - BinaryTreeNode currentNode = root; - while(true){ - parent = currentNode; - if(((Comparable)currentNode.data).compareTo(o)>0){//向左放 - currentNode = currentNode.getLeft(); - if(currentNode == null){ - parent.left = treeNode; - treeNode.parent = parent; - treeNode.root = root; - break; - } - }else{//向右放 - currentNode = currentNode.getRight(); - if(currentNode == null){ - parent.right = treeNode; - treeNode.parent = parent; - treeNode.root = root; - break; - } - } - } - } - return treeNode; - } - - /** - * 先序遍历 - * @param node - * @return - */ - public List traversal(BinaryTreeNode node){ - - if(node !=null){ - datas.add(node.data); - traversal(node.left); - traversal(node.right); - } - return datas; - } - -} +package com.coding.basic; +public class BinaryTreeNode { + + private Object data; + //父节点 + private BinaryTreeNode parent; + private BinaryTreeNode left; + private BinaryTreeNode right; + + 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 getParent() { + return parent; + } + public void setParent(BinaryTreeNode parent) { + this.parent = parent; + } +} diff --git a/group12/2258659044/zj-2017/src/test/com/coding/basic/BinaryTreeTest.java b/group12/2258659044/zj-2017/src/test/com/coding/basic/BinaryTreeTest.java new file mode 100644 index 0000000000..0f343ed895 --- /dev/null +++ b/group12/2258659044/zj-2017/src/test/com/coding/basic/BinaryTreeTest.java @@ -0,0 +1,58 @@ +package test.com.coding.basic; + +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; + +import com.coding.basic.BinaryTree; +import com.coding.basic.BinaryTreeNode; +import com.coding.basic.List; + +public class BinaryTreeTest { + + BinaryTree tree ; + + @Before + public void setup() { + + tree = new BinaryTree(); + Assert.assertEquals(tree.getRoot(), null); + tree.insert(5); + tree.insert(2); + tree.insert(7); + tree.insert(1); + tree.insert(6); + } + @Test + public void insert(){ + + BinaryTreeNode node = tree.insert(4); + Assert.assertEquals(node.getParent().getData(), 2); + Assert.assertEquals(node.getParent().getLeft().getData(), 1); + + BinaryTreeNode node2 = tree.insert(8); + Assert.assertEquals(node2.getParent().getData(), 7); + Assert.assertEquals(node2.getParent().getLeft().getData(), 6); + } + + @Test + public void traversal(){ + + insert(); + //以根节点为起点先序遍历 + List treeList = tree.traversalBefore(tree.getRoot()); + //expected value + int[] exValue = {5,2,1,4,7,6,8}; + for (int i = 0; i < exValue.length; i++) { + Assert.assertEquals(treeList.get(i),exValue[i]); + } + + //以数据2位起点先序遍历 + List treeList2 = tree.traversalBefore(tree.getRoot().getLeft()); + //expected value + int[] exValue2 = {2,1,4}; + for (int i = 0; i < exValue2.length; i++) { + Assert.assertEquals(treeList2.get(i),exValue2[i]); + } + } +} diff --git a/group12/2258659044/zj-2017/src/test/com/coding/basic/QueueTest.java b/group12/2258659044/zj-2017/src/test/com/coding/basic/QueueTest.java new file mode 100644 index 0000000000..e688d9b41f --- /dev/null +++ b/group12/2258659044/zj-2017/src/test/com/coding/basic/QueueTest.java @@ -0,0 +1,64 @@ +package test.com.coding.basic; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; + +import com.coding.basic.Queue; + +public class QueueTest { + + Queue qe ; + + @Before + public void setup() { + qe = new Queue(); + for (int i = 0; i < 10; i++) { + qe.enQueue(i); + } + } + + @Test + public void enQueue(){ + + Assert.assertEquals(qe.size(), 10); + qe.enQueue("abcd"); + Assert.assertEquals(qe.size(), 11); + } + + @Test//(expected = IndexOutOfBoundsException.class) + public void deQueue(){ + + Assert.assertEquals(qe.size(), 10); + for (int i = 0; i < 10; i++) { + Assert.assertEquals(qe.deQueue(), i); + } + Assert.assertEquals(qe.size(), 0); + //打开下列语句与期望异常测试 + //qe.deQueue(); + } + + public void isEmpty(){ + + Assert.assertEquals(qe.isEmpty(),false); + for (int i = 0; i < 10; i++) { + qe.deQueue(); + } + Assert.assertEquals(qe.isEmpty(),true); + Queue qe1 = new Queue(); + Assert.assertEquals(qe1.isEmpty(), true); + } + + public void size(){ + + Assert.assertEquals(qe.size(),10); + qe.enQueue("lk"); + qe.enQueue('h'); + Assert.assertEquals(qe.size(),12); + for (int i = 0; i < 12; i++) { + qe.deQueue(); + } + Assert.assertEquals(qe.size(),0); + Queue qe1 = new Queue(); + Assert.assertEquals(qe1.size(), 0); + } +} diff --git a/group12/2258659044/zj-2017/src/test/com/coding/basic/StackTest.java b/group12/2258659044/zj-2017/src/test/com/coding/basic/StackTest.java new file mode 100644 index 0000000000..a0875c8f3c --- /dev/null +++ b/group12/2258659044/zj-2017/src/test/com/coding/basic/StackTest.java @@ -0,0 +1,76 @@ +package test.com.coding.basic; + +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; + +import com.coding.basic.Stack; + +public class StackTest { + + Stack st ; + + @Before + public void setup() { + st = new Stack(); + for (int i = 0; i < 10; i++) { + st.push(i); + } + } + + @Test + public void push(){ + + Assert.assertEquals(st.size(), 10); + st.push(10); + st.push('a'); + Assert.assertEquals(st.size(), 12); + } + + @Test//(expected = IndexOutOfBoundsException.class) + public void pop(){ + + Assert.assertEquals(st.size(), 10); + for (int i = 9; i >= 0; i--) { + Assert.assertEquals(st.pop(), i); + } + //打开下列语句抛出期望异常 + //st.pop(); + } + + @Test + public void peek(){ + + Assert.assertEquals(st.size(), 10); + Assert.assertEquals(st.peek(), 9); + Assert.assertEquals(st.size(), 10); + } + + @Test + public void isEmpty(){ + + Assert.assertEquals(st.isEmpty(), false); + for (int i = 0; i < 10; i++) { + st.pop(); + } + Assert.assertEquals(st.isEmpty(), true); + Stack st1 = new Stack(); + Assert.assertEquals(st1.isEmpty(), true); + } + + public void size(){ + + Assert.assertEquals(st.size(),10); + st.push("lk"); + st.push('h'); + Assert.assertEquals(st.size(),12); + for (int i = 0; i < 12; i++) { + st.pop(); + } + Assert.assertEquals(st.size(),0); + st.peek(); + Assert.assertEquals(st.size(),0); + Stack st1 = new Stack(); + Assert.assertEquals(st1.size(), 0); + } +} From 3f7749da54b58224b44622e570e988355b22ea1b Mon Sep 17 00:00:00 2001 From: wzy <1264835468@qq.com> Date: Fri, 24 Feb 2017 13:46:35 +0800 Subject: [PATCH 053/216] =?UTF-8?q?=E3=80=82=E3=80=82=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../1264835468/src/assignment/BinaryTree.java | 94 ++++++++++++++----- .../src/assignment/BinaryTreeNode.java | 32 +++---- .../1264835468/src/assignment/Iterator.java | 4 +- .../src/assignment/MyArrayList.java | 43 +++++---- .../src/assignment/MyLinkedList.java | 76 ++++++++++----- .../1264835468/src/assignment/MyQueue.java | 8 +- .../1264835468/src/assignment/MyStack.java | 12 +-- 7 files changed, 176 insertions(+), 93 deletions(-) diff --git a/group17/1264835468/src/assignment/BinaryTree.java b/group17/1264835468/src/assignment/BinaryTree.java index 2550a8631e..dcc13e5849 100644 --- a/group17/1264835468/src/assignment/BinaryTree.java +++ b/group17/1264835468/src/assignment/BinaryTree.java @@ -1,18 +1,18 @@ package assignment; -public class BinaryTree { - private BinaryTreeNode root; +public class BinaryTree> implements Iterable> { + private BinaryTreeNode root; - public BinaryTree(Comparable data) { - root = new BinaryTreeNode(data); + public BinaryTree(T data) { + root = new BinaryTreeNode(data); } - public BinaryTree(BinaryTreeNode root) { + public BinaryTree(BinaryTreeNode root) { this.root = root; } - public BinaryTreeNode insert(Comparable data) { - BinaryTreeNode node = new BinaryTreeNode(data); + public BinaryTreeNode insert(T data) { + BinaryTreeNode node = new BinaryTreeNode(data); if (root == null) root = node; else @@ -20,13 +20,13 @@ public BinaryTreeNode insert(Comparable data) { return node; } - public BinaryTreeNode insert(BinaryTreeNode node) { + public BinaryTreeNode insert(BinaryTreeNode node) { return insert(node.getData()); } - private void insert(BinaryTreeNode current, BinaryTreeNode node) { + private void insert(BinaryTreeNode current, BinaryTreeNode node) { - if (current.compareTo(node) >= 0) { + if (current.getData().compareTo(node.getData()) >= 0) { if (current.getLeft() == null) current.setLeft(node); else @@ -52,44 +52,90 @@ public String toString() { * */ private class BFSNodeQueue { - private MyQueue nodeQueue; + private MyQueue> nodeQueue; public BFSNodeQueue() { - nodeQueue = new MyQueue(); - enQueue(root); + nodeQueue = new MyQueue<>(); } public boolean isEmpty() { return nodeQueue.isEmpty(); } - public void enQueue(BinaryTreeNode node) { + public void enQueue(BinaryTreeNode node) { if (node != null) nodeQueue.enQueue(node); } // 出队同时把子节点入队 - public BinaryTreeNode deQueue() { - BinaryTreeNode first = (BinaryTreeNode) nodeQueue.deQueue(); - enQueue(first.getLeft()); - enQueue(first.getRight()); - return first; + public BinaryTreeNode deQueue() { + if (!isEmpty()) { + BinaryTreeNode first = nodeQueue.deQueue(); + enQueue(first.getLeft()); + enQueue(first.getRight()); + return first; + } + throw new QueueIsEmptyException(); + } + + public MyQueue> getBFSNodeQueue() { + prepare(); + MyQueue> result = new MyQueue<>(); + while (!isEmpty()) { + result.enQueue(deQueue()); + } + return result; + } + + public void clearQueue() { + while (!isEmpty()) { + deQueue(); + } + } + + private void prepare() { + clearQueue(); + enQueue(root); } @Override public String toString() { StringBuilder stringBuilder = new StringBuilder(); - while (!nodeQueue.isEmpty()) { - BinaryTreeNode binaryTreeNode = deQueue(); - stringBuilder.append(binaryTreeNode + "\n"); + Iterator> iterator = iterator(); + while (iterator.hasNext()) { + stringBuilder.append(iterator.next() + "\n"); } return stringBuilder.toString(); } } + @Override + public Iterator> iterator() { + return new BFSIterator(); + } + + private class BFSIterator implements Iterator> { + MyQueue> BFSQueue = new BFSNodeQueue().getBFSNodeQueue(); + + @Override + public boolean hasNext() { + return !BFSQueue.isEmpty(); + } + + @Override + public BinaryTreeNode next() { + return BFSQueue.deQueue(); + } + } + public static void main(String[] args) { - BinaryTree binaryTree = new BinaryTree(4); + BinaryTree binaryTree = new BinaryTree<>(5); + binaryTree.insert(6); binaryTree.insert(7); - binaryTree.insert(8); + binaryTree.insert(4); + Iterator> iterator = binaryTree.iterator(); + while (iterator.hasNext()) { + System.out.println(iterator.next()); + } System.out.println(binaryTree); } } diff --git a/group17/1264835468/src/assignment/BinaryTreeNode.java b/group17/1264835468/src/assignment/BinaryTreeNode.java index bed851ab9f..5d3e3987e0 100644 --- a/group17/1264835468/src/assignment/BinaryTreeNode.java +++ b/group17/1264835468/src/assignment/BinaryTreeNode.java @@ -1,44 +1,39 @@ package assignment; // -public class BinaryTreeNode implements Comparable { - private Comparable data; - private BinaryTreeNode left; - private BinaryTreeNode right; +public class BinaryTreeNode> { + private T data; + private BinaryTreeNode left; + private BinaryTreeNode right; - public BinaryTreeNode(Comparable data) { + public BinaryTreeNode(T data) { this.data = data; } - public Comparable getData() { + public T getData() { return data; } - public void setData(Comparable data) { + public void setData(T data) { this.data = data; } - public BinaryTreeNode getLeft() { + public BinaryTreeNode getLeft() { return left; } - public void setLeft(BinaryTreeNode left) { + public void setLeft(BinaryTreeNode left) { this.left = left; } - public BinaryTreeNode getRight() { + public BinaryTreeNode getRight() { return right; } - public void setRight(BinaryTreeNode right) { + public void setRight(BinaryTreeNode right) { this.right = right; } - @Override - public int compareTo(BinaryTreeNode o) { - return data.compareTo(o.data); - } - @Override public String toString() { StringBuilder stringBuilder = new StringBuilder(); @@ -56,4 +51,9 @@ public String toString() { } return stringBuilder.toString(); } + + public static void main(String[] args) { + // BinaryTreeNode binaryTreeNode = new BinaryTreeNode<>(1); + } + } diff --git a/group17/1264835468/src/assignment/Iterator.java b/group17/1264835468/src/assignment/Iterator.java index 32ff3d2be4..d0f06972df 100644 --- a/group17/1264835468/src/assignment/Iterator.java +++ b/group17/1264835468/src/assignment/Iterator.java @@ -1,8 +1,8 @@ package assignment; // -public interface Iterator { +public interface Iterator { public boolean hasNext(); - public Object next(); + public E next(); } diff --git a/group17/1264835468/src/assignment/MyArrayList.java b/group17/1264835468/src/assignment/MyArrayList.java index 1e9db8471c..d7150b8aec 100644 --- a/group17/1264835468/src/assignment/MyArrayList.java +++ b/group17/1264835468/src/assignment/MyArrayList.java @@ -3,7 +3,7 @@ // import java.util.Arrays; -public class MyArrayList { +public class MyArrayList implements List, Iterable { private Object[] elementData; private static final int DEFAULT_SIZE = 10; private int size; @@ -13,7 +13,8 @@ public MyArrayList() { } public MyArrayList(int initSize) { - if (initSize <= DEFAULT_SIZE) { + if (initSize < 0) throw new IllegalArgumentException(initSize + " < 0"); + if (initSize == 0) { elementData = new Object[DEFAULT_SIZE]; } else { @@ -22,26 +23,27 @@ public MyArrayList(int initSize) { size = 0; } - public void add(Object o) { + public void add(E o) { growIfNeed(); elementData[size++] = o; } - public void add(int index, Object o) { + public void add(int index, E o) { growIfNeed(); System.arraycopy(elementData, index, elementData, index + 1, size - index); elementData[index] = o; size++; } - public Object get(int index) { + @SuppressWarnings("unchecked") + public E get(int index) { rangeCheck(index); - return elementData[index]; + return (E) elementData[index]; } - public Object remove(int index) { + public E remove(int index) { rangeCheck(index); - Object target = get(index); + E target = get(index); // moveForwardFrom(index + 1); System.arraycopy(elementData, index + 1, elementData, index, size - index - 1); size--; @@ -66,17 +68,26 @@ private void grow() { elementData = Arrays.copyOf(elementData, elementData.length * 2); } - private void moveBackwardFrom(int index) { - for (int i = size - 1; i >= index; i--) { - elementData[i + 1] = elementData[i]; - } + @Override + public Iterator iterator() { + return new ArrayIterator<>(); } - private void moveForwardFrom(int index) { - for (int i = index; i < size; i++) { - elementData[i - 1] = elementData[i]; + private class ArrayIterator implements Iterator { + private int currentPos = 0; + + @Override + public boolean hasNext() { + return currentPos < size; } - elementData[size] = null; + + @SuppressWarnings("unchecked") + @Override + public E next() { + rangeCheck(currentPos); + return (E) elementData[currentPos++]; + } + } @Override diff --git a/group17/1264835468/src/assignment/MyLinkedList.java b/group17/1264835468/src/assignment/MyLinkedList.java index fbd73192d6..e364dc0c93 100644 --- a/group17/1264835468/src/assignment/MyLinkedList.java +++ b/group17/1264835468/src/assignment/MyLinkedList.java @@ -1,62 +1,62 @@ package assignment; // -public class MyLinkedList { - private Node head; +public class MyLinkedList implements List, Iterable { + private Node head; private int size; public MyLinkedList() { size = 0; } - public void add(Object o) { + public void add(E o) { if (head == null) addFirst(o); else addLast(o); } - public void addFirst(Object o) { - Node oldFirst = head; - head = new Node(o, oldFirst); + public void addFirst(E o) { + Node oldFirst = head; + head = new Node<>(o, oldFirst); size++; } - public void addLast(Object o) { + public void addLast(E o) { if (head == null) { addFirst(o); } else { - Node oldLast = movePtrTo(size - 1); - oldLast.next = new Node(o, null); + Node oldLast = movePtrTo(size - 1); + oldLast.next = new Node<>(o, null); size++; } } - public void add(int index, Object o) { + public void add(int index, E o) { rangeCheck(index - 1); if (index == 0) { addFirst(o); return; } - Node temp = movePtrTo(index - 1); - Node oldNext = temp.next; - Node newNext = new Node(o, oldNext); + Node temp = movePtrTo(index - 1); + Node oldNext = temp.next; + Node newNext = new Node<>(o, oldNext); temp.next = newNext; size++; } - public Object remove(int index) { + public E remove(int index) { rangeCheck(index); - Object data; + E data; if (index == 0) { data = head.data; head = head.next; } else { - Node pre = movePtrTo(index - 1); - Node target = pre.next; + Node pre = movePtrTo(index - 1); + Node target = pre.next; pre.next = target.next; data = target.data; } @@ -64,7 +64,7 @@ public Object remove(int index) { return data; } - public Object get(int index) { + public E get(int index) { return movePtrTo(index).data; } @@ -72,8 +72,8 @@ public int size() { return size; } - private Node movePtrTo(int index) { - Node resultNode = head; + private Node movePtrTo(int index) { + Node resultNode = head; for (int i = 0; i < index; i++) { resultNode = resultNode.next; } @@ -89,7 +89,7 @@ private void rangeCheck(int index) { @Override public String toString() { StringBuilder stringBuilder = new StringBuilder('['); - Node temp = head; + Node temp = head; while (temp != null) { stringBuilder.append(String.valueOf(temp.toString()) + ","); temp = temp.next; @@ -99,11 +99,11 @@ public String toString() { return stringBuilder.toString(); } - private static class Node { - private Object data; - private Node next; + private static class Node { + private T data; + private Node next; - public Node(Object data, Node next) { + public Node(T data, Node next) { this.data = data; this.next = next; } @@ -113,4 +113,30 @@ public String toString() { return data.toString(); } } + + @Override + public Iterator iterator() { + return new ListIterator(); + } + + private class ListIterator implements Iterator { + Node currentNode; + + public ListIterator() { + currentNode = head; + } + + @Override + public boolean hasNext() { + return currentNode.next != null; + } + + @Override + public E next() { + Node temp = currentNode; + currentNode = currentNode.next; + return temp.data; + } + + } } \ No newline at end of file diff --git a/group17/1264835468/src/assignment/MyQueue.java b/group17/1264835468/src/assignment/MyQueue.java index 9df478bf77..91e8f08091 100644 --- a/group17/1264835468/src/assignment/MyQueue.java +++ b/group17/1264835468/src/assignment/MyQueue.java @@ -1,14 +1,14 @@ package assignment; // -public class MyQueue { - private MyLinkedList elementData = new MyLinkedList(); +public class MyQueue { + private MyLinkedList elementData = new MyLinkedList<>(); - public void enQueue(Object o) { + public void enQueue(T o) { elementData.addLast(o); } - public Object deQueue() { + public T deQueue() { if (!isEmpty()) { return elementData.remove(0); } diff --git a/group17/1264835468/src/assignment/MyStack.java b/group17/1264835468/src/assignment/MyStack.java index 038e830fa2..ad086caa55 100644 --- a/group17/1264835468/src/assignment/MyStack.java +++ b/group17/1264835468/src/assignment/MyStack.java @@ -1,22 +1,22 @@ package assignment; // -public class MyStack { - private MyArrayList elementData = new MyArrayList(); +public class MyStack { + private MyArrayList elementData = new MyArrayList<>(); - public void push(Object o) { + public void push(T o) { elementData.add(o); } - public Object pop() { + public T pop() { if (!isEmpty()) { - Object data = elementData.remove(elementData.size() - 1); + T data = elementData.remove(elementData.size() - 1); return data; } throw new StackIsEmptyException(); } - public Object peek() { + public T peek() { return elementData.get(elementData.size() - 1); } From a5cf6ccc24f91d20118d45bb8579d65d07708b77 Mon Sep 17 00:00:00 2001 From: 240094626 Date: Fri, 24 Feb 2017 14:00:37 +0800 Subject: [PATCH 054/216] commit --- group17/240094626/warm-up/.gitignore | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 group17/240094626/warm-up/.gitignore diff --git a/group17/240094626/warm-up/.gitignore b/group17/240094626/warm-up/.gitignore new file mode 100644 index 0000000000..c7b6e44e1d --- /dev/null +++ b/group17/240094626/warm-up/.gitignore @@ -0,0 +1,4 @@ +/bin/ +*.classpath +*.project +/.settings/ From 182865b66de23455a2e3811333bcdb1dadbd8c8a Mon Sep 17 00:00:00 2001 From: Alvin Date: Thu, 23 Feb 2017 22:34:36 -0800 Subject: [PATCH 055/216] Practice code & basic data structure implementation #1 --- .../com/basic/datastructure/ArrayList.java | 108 ++++++++++++++++++ .../com/basic/datastructure/LinkedList.java | 53 +++++++++ .../src/com/basic/datastructure/List.java | 10 ++ .../com/basic/practice/PolymorphicInJava.java | 41 +++++++ .../com/basic/practice/ValuePassInJava.java | 44 +++++++ 5 files changed, 256 insertions(+) create mode 100644 group20/404130810/src/com/basic/datastructure/ArrayList.java create mode 100644 group20/404130810/src/com/basic/datastructure/LinkedList.java create mode 100644 group20/404130810/src/com/basic/datastructure/List.java create mode 100644 group20/404130810/src/com/basic/practice/PolymorphicInJava.java create mode 100644 group20/404130810/src/com/basic/practice/ValuePassInJava.java diff --git a/group20/404130810/src/com/basic/datastructure/ArrayList.java b/group20/404130810/src/com/basic/datastructure/ArrayList.java new file mode 100644 index 0000000000..8aa4575882 --- /dev/null +++ b/group20/404130810/src/com/basic/datastructure/ArrayList.java @@ -0,0 +1,108 @@ +package com.basic.datastructure; + +public class ArrayList implements List { + + private Object[] elementData; + private int size; + + private int enableCapacity; + + public ArrayList() { + this.enableCapacity = 10; + this.elementData = new Object[enableCapacity]; + } + + @Override + public void add(Object o) { + growIfNeeded(); + elementData[size] = o; + this.size++; + } + + @Override + public void add(int index, Object o) { + rangeCheckForAdd(index); + growIfNeeded(); + + Object[] tmpObjects = new Object[elementData.length]; + System.arraycopy(elementData, 0, tmpObjects, 0, index); + tmpObjects[index] = o; + System.arraycopy(elementData, index, tmpObjects, index + 1, elementData.length - index - 1); + + elementData = tmpObjects; + + this.size++; + } + + @Override + public Object get(int index) { + if (index > size) { + throw new IndexOutOfBoundsException("Index: " + index + ", Size: " + size); + } + return elementData[index]; + } + + @Override + public Object remove(int index) { + Object removedObj = this.get(index); + rangeCheck(index); + Object[] tmpObjects = new Object[elementData.length]; + + System.arraycopy(elementData, 0, tmpObjects, 0, index); + System.arraycopy(elementData, index + 1, tmpObjects, index, elementData.length - index - 1); + + elementData = tmpObjects; + + return removedObj; + } + + @Override + public int size() { + return size; + } + + @Override + public String toString() { + for (int i = 0; i < elementData.length; i++) { + System.out.print(elementData[i] + ","); + } + return ""; + } + + private void rangeCheck(int paramInt) { + if ((paramInt < 0) || (paramInt >= size)) { + throw new IndexOutOfBoundsException(outOfBoundsMsg(paramInt)); + } + } + + private void rangeCheckForAdd(int paramInt) { + if ((paramInt < 0) || (paramInt > size)) { + throw new IndexOutOfBoundsException(outOfBoundsMsg(paramInt)); + } + } + + private String outOfBoundsMsg(int paramInt) { + return "Index: " + paramInt + ", Size: " + size; + } + + private Object[] growIfNeeded() { + if (enableCapacity <= this.size) { + enableCapacity = enableCapacity * 2; + Object[] largerElementData = new Object[enableCapacity]; + System.arraycopy(elementData, 0, largerElementData, 0, elementData.length); + elementData = largerElementData; + } + return elementData; + } + + public static void main(String[] args) { + ArrayList list = new ArrayList(); + for (int i = 1; i <= 11; i++) { + list.add(String.valueOf(i)); + } + list.add(10,"test"); + list.get(10); + list.remove(10); + System.out.println(list); + } +} diff --git a/group20/404130810/src/com/basic/datastructure/LinkedList.java b/group20/404130810/src/com/basic/datastructure/LinkedList.java new file mode 100644 index 0000000000..81d7b65165 --- /dev/null +++ b/group20/404130810/src/com/basic/datastructure/LinkedList.java @@ -0,0 +1,53 @@ +package com.basic.datastructure; + +public class LinkedList implements List{ + private Node first; + private Node last; + + private int size; + + public void add(Object o){ + if(first == null){ + first = new Node(o,null); + } + size ++; + } + public void add(int index , Object o){ + + } + public Object get(int index){ + return null; + } + public Object remove(int index){ + return null; + } + + public int size(){ + return size; + } + + public void addFirst(Object o){ + + } + public void addLast(Object o){ + + } + public Object removeFirst(){ + return null; + } + public Object removeLast(){ + return null; + } + + + private static class Node{ + Object item; + Node next; + Node(Object item, Node next){ + this.item = item; + this.next = next; + } + } + +} + diff --git a/group20/404130810/src/com/basic/datastructure/List.java b/group20/404130810/src/com/basic/datastructure/List.java new file mode 100644 index 0000000000..13fc25acfd --- /dev/null +++ b/group20/404130810/src/com/basic/datastructure/List.java @@ -0,0 +1,10 @@ +package com.basic.datastructure; + +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(); + +} diff --git a/group20/404130810/src/com/basic/practice/PolymorphicInJava.java b/group20/404130810/src/com/basic/practice/PolymorphicInJava.java new file mode 100644 index 0000000000..6bf9996da3 --- /dev/null +++ b/group20/404130810/src/com/basic/practice/PolymorphicInJava.java @@ -0,0 +1,41 @@ +package com.basic.practice; + +/** + * + * @author Wu Alvin + * Java Polymorphic Only represent in method level + * + */ + +class Fruit{ + String name = "Fruit"; + public void print(int i){ + System.out.println("Fruit" + i); + } +} + + +class Apple extends Fruit{ + String name = "Apple"; + public void print(int i){ + System.out.println("Apple" + i); + } +} + + +public class PolymorphicInJava { + + public static void main(String[] args) { + Apple apple = new Apple(); + apple.print(100); + //Apple100 + System.out.println(apple.name); + //Apple + Fruit fruit = apple; + fruit.print(100); + //Apple100 + System.out.println(fruit.name); + //Fruit + } + +} diff --git a/group20/404130810/src/com/basic/practice/ValuePassInJava.java b/group20/404130810/src/com/basic/practice/ValuePassInJava.java new file mode 100644 index 0000000000..6187b5e0fc --- /dev/null +++ b/group20/404130810/src/com/basic/practice/ValuePassInJava.java @@ -0,0 +1,44 @@ +package com.basic.practice; + +public class ValuePassInJava { + + /* + * Pass the Simple value, etc int String... + * Change will NOT happened + * + */ + public static void main(String[] args) { + String s = new String("123"); + int i = 1; + changeVal(i); + System.out.println(i); + + } + + private static void changeVal(int i){ + i = 2; + } + + /* + * Pass whole OBJECT, but change the Member variable + * Change will happened + */ + + /* + public static void main(String[] args) { + Person p = new Person(); + p.age = 10; + changeAge(p); + System.out.println(p.age); + } + + private static void changeAge(Person p){ + p.age = 20; + } + */ + +} + +class Person{ + int age; +} From 276413e9366b49a3aafa6f595f407f85d1c56f96 Mon Sep 17 00:00:00 2001 From: wanghongdi56 <313001956@qq.com> Date: Fri, 24 Feb 2017 15:26:30 +0800 Subject: [PATCH 056/216] delete --- group16/313001956/src/test/test2.java | Bin 52 -> 0 bytes group16/313001956/src/test/testclass.java | Bin 59 -> 0 bytes 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 group16/313001956/src/test/test2.java delete mode 100644 group16/313001956/src/test/testclass.java diff --git a/group16/313001956/src/test/test2.java b/group16/313001956/src/test/test2.java deleted file mode 100644 index d3ea89f94c14c6ba5240c69bc1d1f9e907ff5c45..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 52 zcmXRHQBLJ!P-6fBMpxbVEt#kH>r@+staGVNV1Ijb;?FL|<(>8?gO)o_5;0Mqrkys) HbkPL>vdV6%@&o0Jr?v&nzF3!>JTrL*{ O{}tY6ydFQdZaDxi(H27h From 03c1b55b9fc0641bc4d03d2a57dbc56badc30a61 Mon Sep 17 00:00:00 2001 From: wanghongdi56 <313001956@qq.com> Date: Fri, 24 Feb 2017 16:06:50 +0800 Subject: [PATCH 057/216] Delete .jsdtscope --- group16/313001956/.settings/.jsdtscope | 12 ------------ 1 file changed, 12 deletions(-) delete mode 100644 group16/313001956/.settings/.jsdtscope diff --git a/group16/313001956/.settings/.jsdtscope b/group16/313001956/.settings/.jsdtscope deleted file mode 100644 index 92e666d77d..0000000000 --- a/group16/313001956/.settings/.jsdtscope +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - From b2da64d0a1e531c620944020e05792aa8767cd78 Mon Sep 17 00:00:00 2001 From: wanghongdi56 <313001956@qq.com> Date: Fri, 24 Feb 2017 16:10:52 +0800 Subject: [PATCH 058/216] Delete .project --- group16/313001956/.project | 36 ------------------------------------ 1 file changed, 36 deletions(-) delete mode 100644 group16/313001956/.project diff --git a/group16/313001956/.project b/group16/313001956/.project deleted file mode 100644 index c70f2b6986..0000000000 --- a/group16/313001956/.project +++ /dev/null @@ -1,36 +0,0 @@ - - - test - - - - - - org.eclipse.wst.jsdt.core.javascriptValidator - - - - - org.eclipse.jdt.core.javabuilder - - - - - org.eclipse.wst.common.project.facet.core.builder - - - - - org.eclipse.wst.validation.validationbuilder - - - - - - org.eclipse.jem.workbench.JavaEMFNature - org.eclipse.wst.common.modulecore.ModuleCoreNature - org.eclipse.wst.common.project.facet.core.nature - org.eclipse.jdt.core.javanature - org.eclipse.wst.jsdt.core.jsNature - - From ac23391664bc730cc375b9ee41985f1ce5dee433 Mon Sep 17 00:00:00 2001 From: wanghongdi56 <313001956@qq.com> Date: Fri, 24 Feb 2017 16:16:08 +0800 Subject: [PATCH 059/216] Delete .gitignore --- group16/313001956/.gitignore | 1 - 1 file changed, 1 deletion(-) delete mode 100644 group16/313001956/.gitignore diff --git a/group16/313001956/.gitignore b/group16/313001956/.gitignore deleted file mode 100644 index 84c048a73c..0000000000 --- a/group16/313001956/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/build/ From 957e9d80981c110a13d16c8781ce9a90ecd43a7e Mon Sep 17 00:00:00 2001 From: wanghongdi56 <313001956@qq.com> Date: Fri, 24 Feb 2017 16:16:18 +0800 Subject: [PATCH 060/216] Delete .classpath --- group16/313001956/.classpath | 12 ------------ 1 file changed, 12 deletions(-) delete mode 100644 group16/313001956/.classpath diff --git a/group16/313001956/.classpath b/group16/313001956/.classpath deleted file mode 100644 index b42037dde2..0000000000 --- a/group16/313001956/.classpath +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - From 4f0a341d7607e9a5bef67660b9a1f515ed87a345 Mon Sep 17 00:00:00 2001 From: wanghongdi56 <313001956@qq.com> Date: Fri, 24 Feb 2017 16:16:48 +0800 Subject: [PATCH 061/216] Delete MANIFEST.MF --- group16/313001956/WebContent/META-INF/MANIFEST.MF | 3 --- 1 file changed, 3 deletions(-) delete mode 100644 group16/313001956/WebContent/META-INF/MANIFEST.MF diff --git a/group16/313001956/WebContent/META-INF/MANIFEST.MF b/group16/313001956/WebContent/META-INF/MANIFEST.MF deleted file mode 100644 index 254272e1c0..0000000000 --- a/group16/313001956/WebContent/META-INF/MANIFEST.MF +++ /dev/null @@ -1,3 +0,0 @@ -Manifest-Version: 1.0 -Class-Path: - From 1dbc8085f9442fad36aba9682a16e9d1c760b1bd Mon Sep 17 00:00:00 2001 From: wanghongdi56 <313001956@qq.com> Date: Fri, 24 Feb 2017 16:17:41 +0800 Subject: [PATCH 062/216] Delete org.eclipse.jdt.core.prefs --- group16/313001956/.settings/org.eclipse.jdt.core.prefs | 7 ------- 1 file changed, 7 deletions(-) delete mode 100644 group16/313001956/.settings/org.eclipse.jdt.core.prefs diff --git a/group16/313001956/.settings/org.eclipse.jdt.core.prefs b/group16/313001956/.settings/org.eclipse.jdt.core.prefs deleted file mode 100644 index c537b63063..0000000000 --- a/group16/313001956/.settings/org.eclipse.jdt.core.prefs +++ /dev/null @@ -1,7 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6 -org.eclipse.jdt.core.compiler.compliance=1.6 -org.eclipse.jdt.core.compiler.problem.assertIdentifier=error -org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.source=1.6 From be1ec647bebca7a687fc0093c5522d496dde63f1 Mon Sep 17 00:00:00 2001 From: wanghongdi56 <313001956@qq.com> Date: Fri, 24 Feb 2017 16:18:05 +0800 Subject: [PATCH 063/216] Delete org.eclipse.wst.common.component --- .../313001956/.settings/org.eclipse.wst.common.component | 8 -------- 1 file changed, 8 deletions(-) delete mode 100644 group16/313001956/.settings/org.eclipse.wst.common.component diff --git a/group16/313001956/.settings/org.eclipse.wst.common.component b/group16/313001956/.settings/org.eclipse.wst.common.component deleted file mode 100644 index ebe14cd246..0000000000 --- a/group16/313001956/.settings/org.eclipse.wst.common.component +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - From 9dfc7527692a29d6cd9fe644dbd9fbcb4e9e4f81 Mon Sep 17 00:00:00 2001 From: wanghongdi56 <313001956@qq.com> Date: Fri, 24 Feb 2017 16:18:23 +0800 Subject: [PATCH 064/216] Delete org.eclipse.wst.common.project.facet.core.xml --- .../org.eclipse.wst.common.project.facet.core.xml | 9 --------- 1 file changed, 9 deletions(-) delete mode 100644 group16/313001956/.settings/org.eclipse.wst.common.project.facet.core.xml diff --git a/group16/313001956/.settings/org.eclipse.wst.common.project.facet.core.xml b/group16/313001956/.settings/org.eclipse.wst.common.project.facet.core.xml deleted file mode 100644 index 611d2dfa73..0000000000 --- a/group16/313001956/.settings/org.eclipse.wst.common.project.facet.core.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - From bfbeffbc14aa24910fa37fa549f600969192d312 Mon Sep 17 00:00:00 2001 From: wanghongdi56 <313001956@qq.com> Date: Fri, 24 Feb 2017 16:18:39 +0800 Subject: [PATCH 065/216] Delete org.eclipse.wst.jsdt.ui.superType.container --- .../.settings/org.eclipse.wst.jsdt.ui.superType.container | 1 - 1 file changed, 1 deletion(-) delete mode 100644 group16/313001956/.settings/org.eclipse.wst.jsdt.ui.superType.container diff --git a/group16/313001956/.settings/org.eclipse.wst.jsdt.ui.superType.container b/group16/313001956/.settings/org.eclipse.wst.jsdt.ui.superType.container deleted file mode 100644 index 3bd5d0a480..0000000000 --- a/group16/313001956/.settings/org.eclipse.wst.jsdt.ui.superType.container +++ /dev/null @@ -1 +0,0 @@ -org.eclipse.wst.jsdt.launching.baseBrowserLibrary \ No newline at end of file From b2ab641a96ecba33d50890bf4a3e5d7741e29f73 Mon Sep 17 00:00:00 2001 From: wanghongdi56 <313001956@qq.com> Date: Fri, 24 Feb 2017 16:18:53 +0800 Subject: [PATCH 066/216] Delete org.eclipse.wst.jsdt.ui.superType.name --- .../313001956/.settings/org.eclipse.wst.jsdt.ui.superType.name | 1 - 1 file changed, 1 deletion(-) delete mode 100644 group16/313001956/.settings/org.eclipse.wst.jsdt.ui.superType.name diff --git a/group16/313001956/.settings/org.eclipse.wst.jsdt.ui.superType.name b/group16/313001956/.settings/org.eclipse.wst.jsdt.ui.superType.name deleted file mode 100644 index 05bd71b6ec..0000000000 --- a/group16/313001956/.settings/org.eclipse.wst.jsdt.ui.superType.name +++ /dev/null @@ -1 +0,0 @@ -Window \ No newline at end of file From 879f3631c4ae0a9fe4cb736e5ebfeef7f8ddc944 Mon Sep 17 00:00:00 2001 From: guodongym Date: Fri, 24 Feb 2017 16:35:27 +0800 Subject: [PATCH 067/216] add add --- .../com/guodong/datastructure/LinkedList.java | 42 ++++++++++++++++--- 1 file changed, 37 insertions(+), 5 deletions(-) diff --git a/group12/377401843/learning_1/src/com/guodong/datastructure/LinkedList.java b/group12/377401843/learning_1/src/com/guodong/datastructure/LinkedList.java index 7616768930..fc3c1ef42d 100644 --- a/group12/377401843/learning_1/src/com/guodong/datastructure/LinkedList.java +++ b/group12/377401843/learning_1/src/com/guodong/datastructure/LinkedList.java @@ -34,9 +34,9 @@ public void add(int index, Object o) { linkLast(o); } else { Node prevNode = getNodeByIndex(index - 1); // 取到当前下标的前一个节点 - Node currentNode = getNodeByIndex(index); // 取到当前下标节点 - Node newNode = new Node(o, currentNode); // 创建新节点,新节点的下一个节点为当前下标节点 - + Node currentNode = getNodeByIndex(index); // 取到当前下标节点 + Node newNode = new Node(o, currentNode); // 创建新节点,新节点的下一个节点为当前下标节点 + if (prevNode == null) { // 如果前一个节点为空,说明从头部插入 head = newNode; } else { @@ -59,14 +59,46 @@ public Object get(int index) { return getNodeByIndex(index).data; } + /** + * 根据下标移除链表元素 + * + * @Method remove + * @param index + * @return + * @see com.guodong.datastructure.List#remove(int) + */ public Object remove(int index) { - return null; + checkIndexForGet(index); + + Node prevNode = getNodeByIndex(index - 1); // 获取当前index前一个元素 + Node currentNode = null; + if (prevNode == null) { + currentNode = getNodeByIndex(index); // 如果前一个为空,则把下一个元素赋值给链表头 + head = currentNode.next; + } else { + currentNode = prevNode.next; // 如果不为空,则把前一个节点跟后一个节点链接 + prevNode.next = currentNode.next; + } + Node nextNode = currentNode.next; + + if (nextNode == null) { // 如果后一个节点为空,则把链尾赋值为前一个节点 + last = prevNode; + } else { + currentNode.next = null; // 如果后一个节点不为空,不做任何处理,只打断当前节点的链接 + } + Object data = currentNode.data; + currentNode.data = null; // 清空当前节点的值,等待垃圾回收 + + size--; + + return data; } public int size() { return size; } + public void addFirst(Object o) { } @@ -140,7 +172,7 @@ private void checkIndexForAdd(int index) { throw new IndexOutOfBoundsException("Index:" + index + ",Size:" + size); } } - + /** * 检查下标是否合法 * From 28b222da254ba8c482d3926ed4c0e636c60dfa45 Mon Sep 17 00:00:00 2001 From: wanghongdi56 <313001956@qq.com> Date: Fri, 24 Feb 2017 16:39:17 +0800 Subject: [PATCH 068/216] 02_26 --- group16/313001956/.classpath | 12 ++++++ group16/313001956/.gitignore | 1 + group16/313001956/.project | 36 ++++++++++++++++++ group16/313001956/.settings/.jsdtscope | 12 ++++++ .../.settings/org.eclipse.jdt.core.prefs | 7 ++++ .../org.eclipse.wst.common.component | 8 ++++ ....eclipse.wst.common.project.facet.core.xml | 9 +++++ ...rg.eclipse.wst.jsdt.ui.superType.container | 1 + .../org.eclipse.wst.jsdt.ui.superType.name | 1 + .../313001956/WebContent/META-INF/MANIFEST.MF | 3 ++ .../src/com/coding/basic/ArrayList.java | Bin 0 -> 453 bytes 11 files changed, 90 insertions(+) create mode 100644 group16/313001956/.classpath create mode 100644 group16/313001956/.gitignore create mode 100644 group16/313001956/.project create mode 100644 group16/313001956/.settings/.jsdtscope create mode 100644 group16/313001956/.settings/org.eclipse.jdt.core.prefs create mode 100644 group16/313001956/.settings/org.eclipse.wst.common.component create mode 100644 group16/313001956/.settings/org.eclipse.wst.common.project.facet.core.xml create mode 100644 group16/313001956/.settings/org.eclipse.wst.jsdt.ui.superType.container create mode 100644 group16/313001956/.settings/org.eclipse.wst.jsdt.ui.superType.name create mode 100644 group16/313001956/WebContent/META-INF/MANIFEST.MF create mode 100644 group16/313001956/src/com/coding/basic/ArrayList.java diff --git a/group16/313001956/.classpath b/group16/313001956/.classpath new file mode 100644 index 0000000000..b42037dde2 --- /dev/null +++ b/group16/313001956/.classpath @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/group16/313001956/.gitignore b/group16/313001956/.gitignore new file mode 100644 index 0000000000..84c048a73c --- /dev/null +++ b/group16/313001956/.gitignore @@ -0,0 +1 @@ +/build/ diff --git a/group16/313001956/.project b/group16/313001956/.project new file mode 100644 index 0000000000..16d7526efa --- /dev/null +++ b/group16/313001956/.project @@ -0,0 +1,36 @@ + + + assignment + + + + + + org.eclipse.wst.jsdt.core.javascriptValidator + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.wst.common.project.facet.core.builder + + + + + org.eclipse.wst.validation.validationbuilder + + + + + + org.eclipse.jem.workbench.JavaEMFNature + org.eclipse.wst.common.modulecore.ModuleCoreNature + org.eclipse.wst.common.project.facet.core.nature + org.eclipse.jdt.core.javanature + org.eclipse.wst.jsdt.core.jsNature + + diff --git a/group16/313001956/.settings/.jsdtscope b/group16/313001956/.settings/.jsdtscope new file mode 100644 index 0000000000..92e666d77d --- /dev/null +++ b/group16/313001956/.settings/.jsdtscope @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/group16/313001956/.settings/org.eclipse.jdt.core.prefs b/group16/313001956/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000000..c537b63063 --- /dev/null +++ b/group16/313001956/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,7 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6 +org.eclipse.jdt.core.compiler.compliance=1.6 +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.6 diff --git a/group16/313001956/.settings/org.eclipse.wst.common.component b/group16/313001956/.settings/org.eclipse.wst.common.component new file mode 100644 index 0000000000..2a267dc19d --- /dev/null +++ b/group16/313001956/.settings/org.eclipse.wst.common.component @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/group16/313001956/.settings/org.eclipse.wst.common.project.facet.core.xml b/group16/313001956/.settings/org.eclipse.wst.common.project.facet.core.xml new file mode 100644 index 0000000000..611d2dfa73 --- /dev/null +++ b/group16/313001956/.settings/org.eclipse.wst.common.project.facet.core.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/group16/313001956/.settings/org.eclipse.wst.jsdt.ui.superType.container b/group16/313001956/.settings/org.eclipse.wst.jsdt.ui.superType.container new file mode 100644 index 0000000000..3bd5d0a480 --- /dev/null +++ b/group16/313001956/.settings/org.eclipse.wst.jsdt.ui.superType.container @@ -0,0 +1 @@ +org.eclipse.wst.jsdt.launching.baseBrowserLibrary \ No newline at end of file diff --git a/group16/313001956/.settings/org.eclipse.wst.jsdt.ui.superType.name b/group16/313001956/.settings/org.eclipse.wst.jsdt.ui.superType.name new file mode 100644 index 0000000000..05bd71b6ec --- /dev/null +++ b/group16/313001956/.settings/org.eclipse.wst.jsdt.ui.superType.name @@ -0,0 +1 @@ +Window \ No newline at end of file diff --git a/group16/313001956/WebContent/META-INF/MANIFEST.MF b/group16/313001956/WebContent/META-INF/MANIFEST.MF new file mode 100644 index 0000000000..254272e1c0 --- /dev/null +++ b/group16/313001956/WebContent/META-INF/MANIFEST.MF @@ -0,0 +1,3 @@ +Manifest-Version: 1.0 +Class-Path: + diff --git a/group16/313001956/src/com/coding/basic/ArrayList.java b/group16/313001956/src/com/coding/basic/ArrayList.java new file mode 100644 index 0000000000000000000000000000000000000000..eaaa690fa6b76c4f36483531b915bbdd3a22c926 GIT binary patch literal 453 zcmYciQBK{;Ai&7Lz`*FL8=RPy>X%vqB&Io6+f!T&{DNEEJ+9t=qX%X>Rb^71zNsCDZ;)ah#cI$db@Y1P*6ufr=>-#%}- zPWr9Z;mu|T1P*?CzB=KPo$-#vy#mu^em_yZw5+1eM0dX1ul&R8hkox({Pclu`sW`% z8$4!6c5qp}Tae&?%)9)hufE`o&p{V*X0mA1?qojh*~ocv<}1H~8*|-~^Ud^b^||pp z@3%cLML=_tW_LSVCiAQRhYvlOeO*H^^M}Fev|oAhpKi$uhwUq#uDde1QKhuB_hs!p zcCHA6omu7EI~V({bLHs{SevF=W?;xSEmvxF_^ORDaY4=-x%>7PijuAfJwmhoy6w~W0RZ({nMMEr literal 0 HcmV?d00001 From 25ef1aff558352df83365d4739219f38ab60b794 Mon Sep 17 00:00:00 2001 From: Alvin Date: Fri, 24 Feb 2017 00:56:43 -0800 Subject: [PATCH 069/216] LinkedList implementation #1 --- .../com/basic/datastructure/LinkedList.java | 124 +++++++++++++----- 1 file changed, 94 insertions(+), 30 deletions(-) diff --git a/group20/404130810/src/com/basic/datastructure/LinkedList.java b/group20/404130810/src/com/basic/datastructure/LinkedList.java index 81d7b65165..c0981aa8c4 100644 --- a/group20/404130810/src/com/basic/datastructure/LinkedList.java +++ b/group20/404130810/src/com/basic/datastructure/LinkedList.java @@ -1,53 +1,117 @@ package com.basic.datastructure; -public class LinkedList implements List{ +public class LinkedList implements List { private Node first; private Node last; - + private int size; - - public void add(Object o){ - if(first == null){ - first = new Node(o,null); - } - size ++; + + public void add(Object o) { + addLast(o); } - public void add(int index , Object o){ - + + public void add(int index, Object o) { + checkRange(index); + if (index == 0) { + addFirst(o); + } else if (index == size) { + addLast(o); + } else { + + } } - public Object get(int index){ + + public Object get(int index) { + checkRange(index); + if(size > 0){ + int loopTimes = 0; + Node p = first; + while(index > loopTimes){ + p = p.next; + loopTimes ++; + } + return p; + } + return null; } - public Object remove(int index){ + + public Object remove(int index) { return null; } - - public int size(){ + + public int size() { return size; } - - public void addFirst(Object o){ - + + private void addFirst(Object o) { + if (size == 0) { + first = new Node(o); + last = first; + } else { + Node tmpNode = new Node(o); + tmpNode.next = first; + first = tmpNode; + } + size++; } - public void addLast(Object o){ - + + private void addLast(Object o) { + if (size == 0) { + first = new Node(o); + last = first; + } else { + last.next = new Node(o); + last = last.next; + } + size++; } - public Object removeFirst(){ - return null; + + public Object removeFirst() { + Node tmpNode = first; + first = first.next; + size--; + return tmpNode; } - public Object removeLast(){ + + public Object removeLast() { + Node tmpNode = last; + return null; } - - - private static class Node{ - Object item; - Node next; - Node(Object item, Node next){ + + private void checkRange(int index) { + if (index > size || index < 0) { + throw new IndexOutOfBoundsException("Index: " + index + "Size: " + size); + } + } + + public String toString() { + StringBuilder sb = new StringBuilder(); + Node p = first; + while (p != null) { + sb.append(p.item + "\n"); + p = p.next; + } + return sb.toString(); + } + + private static class Node { + private Object item; + private Node next; + + Node(Object item) { this.item = item; - this.next = next; } } -} + public static void main(String[] args) { + LinkedList list = new LinkedList(); + for (int i = 0; i < 5; i++) { + list.add(i); + } + list.get(5); + System.out.println(list); + } +} From dbd3902161a57a1a410bb6506766ce5539b4ce40 Mon Sep 17 00:00:00 2001 From: earliest Date: Fri, 24 Feb 2017 01:02:15 -0800 Subject: [PATCH 070/216] array list implementation and ut --- .../src/com/coding/basic/ArrayList.java | 86 +++++++++++++++ .../src/com/coding/basic/BinaryTreeNode.java | 32 ++++++ .../src/com/coding/basic/Iterator.java | 7 ++ .../src/com/coding/basic/LinkedList.java | 46 ++++++++ .../1282579502/src/com/coding/basic/List.java | 9 ++ .../src/com/coding/basic/Queue.java | 19 ++++ .../src/com/coding/basic/Stack.java | 22 ++++ .../com/coding/basic/ut/ArrayListTest.java | 100 ++++++++++++++++++ .../src/com/wusa/assignment1/TestDriver.java | 13 +++ 9 files changed, 334 insertions(+) create mode 100644 group17/1282579502/src/com/coding/basic/ArrayList.java create mode 100644 group17/1282579502/src/com/coding/basic/BinaryTreeNode.java create mode 100644 group17/1282579502/src/com/coding/basic/Iterator.java create mode 100644 group17/1282579502/src/com/coding/basic/LinkedList.java create mode 100644 group17/1282579502/src/com/coding/basic/List.java create mode 100644 group17/1282579502/src/com/coding/basic/Queue.java create mode 100644 group17/1282579502/src/com/coding/basic/Stack.java create mode 100644 group17/1282579502/src/com/coding/basic/ut/ArrayListTest.java diff --git a/group17/1282579502/src/com/coding/basic/ArrayList.java b/group17/1282579502/src/com/coding/basic/ArrayList.java new file mode 100644 index 0000000000..db8e918503 --- /dev/null +++ b/group17/1282579502/src/com/coding/basic/ArrayList.java @@ -0,0 +1,86 @@ +package com.coding.basic; + +import java.util.Arrays; + +public class ArrayList implements List { + + private int size = 0; + + private Object[] elementData = new Object[8]; + + public int test = 10; + + public void add(Object o){ + if(size + 1 >elementData.length){ + expand(); + } + elementData[size] = o; + size++; + } + /** + * Parameters: + * index index at which the specified element is to be inserted + * element element to be inserted + * Throws: + * IndexOutOfBoundsException - if the index is out of range (index < 0 || index > size()) + */ + + public void add(int index, Object o){ + if(index <0 || index > size()) throw new IndexOutOfBoundsException(index + ": Invalid Index"); + if(size()+1>elementData.length){ + expand(); + } + if(index < size()) + System.arraycopy(elementData, index, elementData, index+1, size() - index); + elementData[index] = o; + size ++; + } + + public Object get(int index){ + if(index <0 || index >= size()) throw new ArrayIndexOutOfBoundsException(index + ": Invalid Index."); + return elementData[index]; + } + + public Object remove(int index) { + if(index <0 || index >= size()) throw new ArrayIndexOutOfBoundsException(index + ": Invalid Index."); + Object item = elementData[index]; + if(index Date: Fri, 24 Feb 2017 18:14:36 +0800 Subject: [PATCH 071/216] Iterator(The madman implementation) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 定义 Iterator 接口 --- .../com/ikook/basic_data_structure/MyIterator.java | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 group18/935542673/Coding/src/com/ikook/basic_data_structure/MyIterator.java diff --git a/group18/935542673/Coding/src/com/ikook/basic_data_structure/MyIterator.java b/group18/935542673/Coding/src/com/ikook/basic_data_structure/MyIterator.java new file mode 100644 index 0000000000..c102b32801 --- /dev/null +++ b/group18/935542673/Coding/src/com/ikook/basic_data_structure/MyIterator.java @@ -0,0 +1,11 @@ +package com.ikook.basic_data_structure; + +public interface MyIterator { + + public boolean hesNext(); // 判断是否有元素没有被遍历 + + public Object next(); // 返回游标当前位置的元素并将游标移动到下一个位置 + + public void remove(); // 删除游标左边的元素,在执行完 next 之后该操作只能执行一次 + +} From 953230b44d3c8ca90726a39d8b3ff1f3fe0cf555 Mon Sep 17 00:00:00 2001 From: yc <755659358@qq.com> Date: Fri, 24 Feb 2017 18:18:08 +0800 Subject: [PATCH 072/216] =?UTF-8?q?755659358=E6=8F=90=E4=BA=A4=E7=AC=AC?= =?UTF-8?q?=E4=B8=80=E5=91=A8=E6=95=B0=E6=8D=AE=E7=BB=93=E6=9E=84=E4=BD=9C?= =?UTF-8?q?=E4=B8=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/liuxincourse/ArrayList.java | 56 ++++++++ .../src/liuxincourse/LinkedList.java | 120 ++++++++++++++++++ .../src/liuxincourse/List.java | 10 ++ .../src/liuxincourse/Queue.java | 25 ++++ .../src/liuxincourse/Stack.java | 27 ++++ .../test/liuxincourse/ArrayListTest.java | 53 ++++++++ .../test/liuxincourse/LinkedListTest.java | 69 ++++++++++ .../test/liuxincourse/QueueTest.java | 27 ++++ .../test/liuxincourse/StackTest.java | 26 ++++ .../test/liuxincourse/SuiteTest.java | 14 ++ 10 files changed, 427 insertions(+) create mode 100644 group20/755659358/liuxincourse_datastructure/src/liuxincourse/ArrayList.java create mode 100644 group20/755659358/liuxincourse_datastructure/src/liuxincourse/LinkedList.java create mode 100644 group20/755659358/liuxincourse_datastructure/src/liuxincourse/List.java create mode 100644 group20/755659358/liuxincourse_datastructure/src/liuxincourse/Queue.java create mode 100644 group20/755659358/liuxincourse_datastructure/src/liuxincourse/Stack.java create mode 100644 group20/755659358/liuxincourse_datastructure/test/liuxincourse/ArrayListTest.java create mode 100644 group20/755659358/liuxincourse_datastructure/test/liuxincourse/LinkedListTest.java create mode 100644 group20/755659358/liuxincourse_datastructure/test/liuxincourse/QueueTest.java create mode 100644 group20/755659358/liuxincourse_datastructure/test/liuxincourse/StackTest.java create mode 100644 group20/755659358/liuxincourse_datastructure/test/liuxincourse/SuiteTest.java diff --git a/group20/755659358/liuxincourse_datastructure/src/liuxincourse/ArrayList.java b/group20/755659358/liuxincourse_datastructure/src/liuxincourse/ArrayList.java new file mode 100644 index 0000000000..8a4434041f --- /dev/null +++ b/group20/755659358/liuxincourse_datastructure/src/liuxincourse/ArrayList.java @@ -0,0 +1,56 @@ +package liuxincourse; + +import java.util.Arrays; + + +public class ArrayList implements List{ + + private int size=0; + + private Object [] elementDataObjects = new Object[3]; + + public void add (Object o){ + if (size>=elementDataObjects.length) { + elementDataObjects=Arrays.copyOf(elementDataObjects, elementDataObjects.length+50); + } + elementDataObjects[size]=o; + size++; + } + + public void add (int index ,Object o){ + if (index>=size||index<0) { + throw new IndexOutOfBoundsException(); + } + if (size>=elementDataObjects.length) { + elementDataObjects=Arrays.copyOf(elementDataObjects, elementDataObjects.length+50); + } + System.arraycopy(elementDataObjects, index, elementDataObjects, index+1, size-index); + elementDataObjects[index]=o; + size++; + } + + public Object get (int index){ + if (index>=size||index<0) { + throw new IndexOutOfBoundsException(); + } + return elementDataObjects[index]; + } + + public Object remove(int index){ + if (index>=size||index<0) { + throw new IndexOutOfBoundsException(); + } + Object rem=elementDataObjects[index]; + System.arraycopy(elementDataObjects, index+1, elementDataObjects, index, size-index-1); + size--; + return rem; + } + + public int size(){ + return size; + } + +// public Iterator iterator(){ +// +// } +} diff --git a/group20/755659358/liuxincourse_datastructure/src/liuxincourse/LinkedList.java b/group20/755659358/liuxincourse_datastructure/src/liuxincourse/LinkedList.java new file mode 100644 index 0000000000..36e46e6412 --- /dev/null +++ b/group20/755659358/liuxincourse_datastructure/src/liuxincourse/LinkedList.java @@ -0,0 +1,120 @@ +package liuxincourse; + + +public class LinkedList implements List{ + + private Node head; + + private int size=0; + + + public void add(Object o){ + if (size==0) { + head=new Node(); + head.data=o; + size++; + return; + } + Node last=head; + for (int i = 0; i < size-1; i++) { + last=last.next; + } + Node added=new Node(); + last.next=added; + added.data=o; + size++; + } + + public void add(int index,Object o){ + if (index<0||index>size) { + throw new IndexOutOfBoundsException(); + } + Node pre=getNode(index-1); + Node next=getNode(index); + Node addedNode=new Node(); + addedNode.data=o; + pre.next=addedNode; + addedNode.next=next; + size++; + } + + private Node getNode(int index){ + Node node=head; + + for (int i = 0; i < index; i++) { + node=node.next; + } + + return node; + } + + public Object get(int index){ + if (index<0||index>size-1) { + throw new IndexOutOfBoundsException(); + } + if (index==0&&head==null) { + return null; + } + return getNode(index).data; + + } + + public Object remove(int index) { + if (index<0||index>size-1) { + throw new IndexOutOfBoundsException(); + } + Node pre=getNode(index-1); + Node next=getNode(index+1); + pre.next=next; + return getNode(index); + } + + public int size(){ + return size; + } + + public void addFirst(Object o){ + if (head==null) { + head=new Node(); + head.data=o; + size++; + return; + } + Node addNode=new Node(); + addNode.data=o; + addNode.next=head; + head=addNode; + size++; + } + + public void addLast(Object o){ + Node preLast=getNode(size-1); + Node addNode=new Node(); + addNode.data=o; + preLast.next=addNode; + size++; + } + + public Object removeFirst(){ + Node preHead=head; + head=head.next; + size--; + return preHead.data; + } + + public Object removeLast(){ + Node preLast=getNode(size-1); + Node last=getNode(size-2); + last.next=null; + size--; + return preLast.data; + } + + private static class Node{ + + Object data; + Node next; + + } + +} diff --git a/group20/755659358/liuxincourse_datastructure/src/liuxincourse/List.java b/group20/755659358/liuxincourse_datastructure/src/liuxincourse/List.java new file mode 100644 index 0000000000..c4eaa0a02c --- /dev/null +++ b/group20/755659358/liuxincourse_datastructure/src/liuxincourse/List.java @@ -0,0 +1,10 @@ +package liuxincourse; + +public interface List { + + void add(Object o); + void add(int index,Object o); + Object get(int index); + Object remove(int index); + int size(); +} diff --git a/group20/755659358/liuxincourse_datastructure/src/liuxincourse/Queue.java b/group20/755659358/liuxincourse_datastructure/src/liuxincourse/Queue.java new file mode 100644 index 0000000000..bbe11c043d --- /dev/null +++ b/group20/755659358/liuxincourse_datastructure/src/liuxincourse/Queue.java @@ -0,0 +1,25 @@ +package liuxincourse; + +public class Queue { + + LinkedList list=new LinkedList(); + + public void enQueue(Object o){ + list.add(o); + } + + public Object deQueue(){ + + return list.removeFirst(); + } + + public boolean isEmpty() { + + return size()==0?true:false; + } + + public int size(){ + return list.size(); + } + +} diff --git a/group20/755659358/liuxincourse_datastructure/src/liuxincourse/Stack.java b/group20/755659358/liuxincourse_datastructure/src/liuxincourse/Stack.java new file mode 100644 index 0000000000..552d8c9f9e --- /dev/null +++ b/group20/755659358/liuxincourse_datastructure/src/liuxincourse/Stack.java @@ -0,0 +1,27 @@ +package liuxincourse; + +public class Stack { + + private LinkedList elementData=new LinkedList(); + + public void push (Object o){ + elementData.addFirst(o); + } + + public Object pop() { + return elementData.removeFirst(); + } + + public Object peek(){ + return elementData.get(0); + } + + public boolean isEmpty(){ + return size()==0?true:false; + } + + public int size() { + return elementData.size(); + } + +} diff --git a/group20/755659358/liuxincourse_datastructure/test/liuxincourse/ArrayListTest.java b/group20/755659358/liuxincourse_datastructure/test/liuxincourse/ArrayListTest.java new file mode 100644 index 0000000000..8b8d82b3b1 --- /dev/null +++ b/group20/755659358/liuxincourse_datastructure/test/liuxincourse/ArrayListTest.java @@ -0,0 +1,53 @@ +package liuxincourse; + +import static org.junit.Assert.*; + +import org.junit.Test; + +public class ArrayListTest { + + + @Test + public void testAdd(){ + ArrayList list=new ArrayList(); + list.add(12); + list.add(2); + list.add(8); + assertEquals(8, list.get(2)); + } + + @Test + public void testAddIndex(){ + ArrayList list=new ArrayList(); + list.add(12); + list.add(2); + list.add(8); + list.add(1,33); + list.add(6); + list.add(7); + assertEquals(8, list.get(3)); + } + + @Test + public void testRemove(){ + ArrayList list=new ArrayList(); + list.add(12); + list.add(2); + list.add(8); + list.add(1,33); + list.remove(1); + assertEquals(2, list.get(1)); + } + + @Test + public void testSize(){ + ArrayList list=new ArrayList(); + list.add(12); + list.add(2); + list.add(8); + list.add(9); + list.add(77); + assertEquals(5, list.size()); + } + +} diff --git a/group20/755659358/liuxincourse_datastructure/test/liuxincourse/LinkedListTest.java b/group20/755659358/liuxincourse_datastructure/test/liuxincourse/LinkedListTest.java new file mode 100644 index 0000000000..69857b0e29 --- /dev/null +++ b/group20/755659358/liuxincourse_datastructure/test/liuxincourse/LinkedListTest.java @@ -0,0 +1,69 @@ +package liuxincourse; + +import static org.junit.Assert.*; + +import org.junit.Test; + +public class LinkedListTest { + + @Test + public void testAdd() { + LinkedList list=new LinkedList(); + list.add(33); + list.add(44); + list.add(55); + list.add(88); + assertEquals(88, list.get(3)); + } + + @Test + public void testAddIndex() { + LinkedList list=new LinkedList(); + list.add(33); + list.add(44); + list.add(55); + list.add(1, 88); + assertEquals(55, list.get(3)); + } + + @Test + public void testAddFirst() { + LinkedList list=new LinkedList(); + list.add(33); + list.add(44); + list.add(55); + list.addFirst(88); + assertEquals(88, list.get(0)); + } + + @Test + public void testAddLast() { + LinkedList list=new LinkedList(); + list.add(33); + list.add(44); + list.add(55); + list.addFirst(88); + list.addLast(00); + assertEquals(00, list.get(list.size()-1)); + } + + @Test + public void testRemoveFirst() { + LinkedList list=new LinkedList(); + list.add(33); + list.add(44); + list.add(55); + list.addFirst(88); + assertEquals(88, list.removeFirst()); + } + + @Test + public void testRemoveLast() { + LinkedList list=new LinkedList(); + list.add(33); + list.add(44); + list.add(55); + list.addFirst(88); + assertEquals(55, list.removeLast()); + } +} diff --git a/group20/755659358/liuxincourse_datastructure/test/liuxincourse/QueueTest.java b/group20/755659358/liuxincourse_datastructure/test/liuxincourse/QueueTest.java new file mode 100644 index 0000000000..613df89fc3 --- /dev/null +++ b/group20/755659358/liuxincourse_datastructure/test/liuxincourse/QueueTest.java @@ -0,0 +1,27 @@ +package liuxincourse; + +import static org.junit.Assert.*; + +import org.junit.Test; + +public class QueueTest { + + @Test + public void testEnqueue() { + Queue queue=new Queue(); + queue.enQueue(11); + queue.enQueue(22); + assertEquals(11, queue.deQueue()); + } + + @Test + public void testIsempty() { + Queue queue=new Queue(); + queue.enQueue(11); + queue.enQueue(22); + queue.deQueue(); + queue.deQueue(); + assertEquals(true, queue.isEmpty()); + } + +} diff --git a/group20/755659358/liuxincourse_datastructure/test/liuxincourse/StackTest.java b/group20/755659358/liuxincourse_datastructure/test/liuxincourse/StackTest.java new file mode 100644 index 0000000000..9f1175ffea --- /dev/null +++ b/group20/755659358/liuxincourse_datastructure/test/liuxincourse/StackTest.java @@ -0,0 +1,26 @@ +package liuxincourse; + +import static org.junit.Assert.*; + +import org.junit.Test; + +public class StackTest { + + @Test + public void testPush() { + Stack stack=new Stack(); + stack.push(22); + stack.push(33); + assertEquals(33, stack.pop()); + } + + @Test + public void testIsempty() { + Stack stack=new Stack(); + stack.push(22); + stack.push(33); + stack.pop(); + assertEquals(false, stack.isEmpty()); + } + +} diff --git a/group20/755659358/liuxincourse_datastructure/test/liuxincourse/SuiteTest.java b/group20/755659358/liuxincourse_datastructure/test/liuxincourse/SuiteTest.java new file mode 100644 index 0000000000..5c12e657b6 --- /dev/null +++ b/group20/755659358/liuxincourse_datastructure/test/liuxincourse/SuiteTest.java @@ -0,0 +1,14 @@ +package liuxincourse; + +import static org.junit.Assert.*; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Suite; +import org.junit.runners.Suite.SuiteClasses; + +@RunWith(Suite.class) +@SuiteClasses({ArrayListTest.class,LinkedListTest.class,QueueTest.class,StackTest.class}) +public class SuiteTest { + +} From b273a57ea2abf4a555e4d18fc6858fd9abd4504a Mon Sep 17 00:00:00 2001 From: ikook <935542673@qq.com> Date: Fri, 24 Feb 2017 18:20:15 +0800 Subject: [PATCH 073/216] ArrayList(The madman implementation) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 添加了 Iterator 实现类以及 Iterator 实现类的测试用例 --- .../basic_data_structure/MyArrayListTest.java | 17 ++++++ .../basic_data_structure/MyArrayList.java | 57 +++++++++++++++++++ 2 files changed, 74 insertions(+) diff --git a/group18/935542673/Coding/junit/com/ikook/basic_data_structure/MyArrayListTest.java b/group18/935542673/Coding/junit/com/ikook/basic_data_structure/MyArrayListTest.java index b1094f3583..8f6ece70d2 100644 --- a/group18/935542673/Coding/junit/com/ikook/basic_data_structure/MyArrayListTest.java +++ b/group18/935542673/Coding/junit/com/ikook/basic_data_structure/MyArrayListTest.java @@ -51,6 +51,7 @@ public void testIsEmpty() { @Test public void testGet() { + assertEquals("111", list.get(0)); assertEquals(new Date(), list.get(4)); } @@ -71,5 +72,21 @@ public void testSet() { assertEquals(33, list.set(2, "333")); assertEquals("333", list.get(2)); } + + @Test + public void testIterator() { + int i = 0; + for(MyIterator iter = list.iterator(); iter.hesNext();) { + Object str = (Object) iter.next(); + assertEquals(list.get(i++), str); + } + + int j = list.size(); + for(MyIterator iter = list.iterator(); iter.hesNext();) { + iter.next(); + iter.remove(); + assertEquals( --j , list.size()); + } + } } diff --git a/group18/935542673/Coding/src/com/ikook/basic_data_structure/MyArrayList.java b/group18/935542673/Coding/src/com/ikook/basic_data_structure/MyArrayList.java index 39de481f0f..3792438f42 100644 --- a/group18/935542673/Coding/src/com/ikook/basic_data_structure/MyArrayList.java +++ b/group18/935542673/Coding/src/com/ikook/basic_data_structure/MyArrayList.java @@ -1,5 +1,8 @@ package com.ikook.basic_data_structure; +import java.util.ConcurrentModificationException; +import java.util.NoSuchElementException; + /** * @author ikook; QQ号码: 935542673 */ @@ -155,4 +158,58 @@ private void rangeCheck(int index) { } } } + + /** + * 返回一个迭代器的实现 + * @return + */ + public MyIterator iterator() { + return new Iter(); + } + + /** + * 迭代器的实现类 + * @author ikook + */ + private class Iter implements MyIterator { + + int cursor; // 返回下一个元素的索引 + int lastRet = -1; // 返回最后一个元素的索引(始终指向刚遍历完的元素),如果没有元素了,则为 -1 + + @Override + public boolean hesNext() { + return cursor != size; // cursor 等于 size 则集合遍历完。 + } + + @Override + public Object next() { + + try{ + int i = cursor; + Object next = get(i); + lastRet = i; + cursor = i + 1; + return next; + } catch (IndexOutOfBoundsException e) { + throw new NoSuchElementException("没有找到指定的元素, 迭代器遍历失败"); + } + + } + + @Override + public void remove() { + if (lastRet < 0) { + throw new IllegalStateException("非法状态异常,删除失败"); + } + + try{ + MyArrayList.this.remove(lastRet); + cursor = lastRet; + lastRet = -1; + } catch (IndexOutOfBoundsException e) { + throw new ConcurrentModificationException("竞争者改变异常,删除失败"); + } + } + + } } \ No newline at end of file From 0a63798779bcf9453b9d49f3ce85b81f0a77c867 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?ikook-=E7=8E=8B=E4=BD=B3=E8=B1=AA?= <935542673@qq.com> Date: Fri, 24 Feb 2017 18:22:48 +0800 Subject: [PATCH 074/216] Update MyArrayListTest.java --- .../junit/com/ikook/basic_data_structure/MyArrayListTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/group18/935542673/Coding/junit/com/ikook/basic_data_structure/MyArrayListTest.java b/group18/935542673/Coding/junit/com/ikook/basic_data_structure/MyArrayListTest.java index 8f6ece70d2..f877809cb3 100644 --- a/group18/935542673/Coding/junit/com/ikook/basic_data_structure/MyArrayListTest.java +++ b/group18/935542673/Coding/junit/com/ikook/basic_data_structure/MyArrayListTest.java @@ -83,7 +83,7 @@ public void testIterator() { int j = list.size(); for(MyIterator iter = list.iterator(); iter.hesNext();) { - iter.next(); + iter.next(); iter.remove(); assertEquals( --j , list.size()); } From 7e8872eaa028cd7a82e51f669fee2f3d43eb5620 Mon Sep 17 00:00:00 2001 From: yc <755659358@qq.com> Date: Fri, 24 Feb 2017 18:28:00 +0800 Subject: [PATCH 075/216] =?UTF-8?q?=E6=8F=90=E4=BA=A4blogs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...234\272\351\203\250\344\273\266\347\220\206\350\247\243.txt" | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 "group20/755659358/blogs/\350\256\241\347\256\227\346\234\272\351\203\250\344\273\266\347\220\206\350\247\243.txt" diff --git "a/group20/755659358/blogs/\350\256\241\347\256\227\346\234\272\351\203\250\344\273\266\347\220\206\350\247\243.txt" "b/group20/755659358/blogs/\350\256\241\347\256\227\346\234\272\351\203\250\344\273\266\347\220\206\350\247\243.txt" new file mode 100644 index 0000000000..4e82875042 --- /dev/null +++ "b/group20/755659358/blogs/\350\256\241\347\256\227\346\234\272\351\203\250\344\273\266\347\220\206\350\247\243.txt" @@ -0,0 +1,2 @@ + 对计算机硬件的激烈 + 计算机中cpu是核心部件,cpu是主要的计算部件,所有的逻辑运算和算术运算都是由cpu来玩成的。但cpu只管运算,怎么运算,何时运算,运算什么这些cpu都是不管的,这些其实就是一个个的指令,指令用来表示所有运算的信息,包括做什么运算,运算什么,运算结果如何处置等。这些指令都是存在内存当中的,cpu按照一定的顺序从内存当中读取指令,执行指令做运算,然后按照相应的指令输出结果。这就是一个简单的程序运行过程。内存空间是有限的,另外,内存上的指令也不能持久化的保存,断电之后就没有了。所以需要一个硬件保存大的二进制资源以及持久化的保存指令,所以就有了硬盘。所以计算机先从硬盘中读取指令和资源到内存当中来,然后cpu再从内存当中读取指令和资源,做运算,运算完之后再按照指令将输出保存在内存中或者硬盘中,程序执行完毕。 From e8ba36e56e4b41272edf8cc2bf80bab6eb452a40 Mon Sep 17 00:00:00 2001 From: yc <755659358@qq.com> Date: Fri, 24 Feb 2017 18:38:37 +0800 Subject: [PATCH 076/216] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E9=94=99=E5=88=AB?= =?UTF-8?q?=E5=AD=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...234\272\351\203\250\344\273\266\347\220\206\350\247\243.txt" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/group20/755659358/blogs/\350\256\241\347\256\227\346\234\272\351\203\250\344\273\266\347\220\206\350\247\243.txt" "b/group20/755659358/blogs/\350\256\241\347\256\227\346\234\272\351\203\250\344\273\266\347\220\206\350\247\243.txt" index 4e82875042..155001683a 100644 --- "a/group20/755659358/blogs/\350\256\241\347\256\227\346\234\272\351\203\250\344\273\266\347\220\206\350\247\243.txt" +++ "b/group20/755659358/blogs/\350\256\241\347\256\227\346\234\272\351\203\250\344\273\266\347\220\206\350\247\243.txt" @@ -1,2 +1,2 @@ - 对计算机硬件的激烈 + 对计算机硬件的理解 计算机中cpu是核心部件,cpu是主要的计算部件,所有的逻辑运算和算术运算都是由cpu来玩成的。但cpu只管运算,怎么运算,何时运算,运算什么这些cpu都是不管的,这些其实就是一个个的指令,指令用来表示所有运算的信息,包括做什么运算,运算什么,运算结果如何处置等。这些指令都是存在内存当中的,cpu按照一定的顺序从内存当中读取指令,执行指令做运算,然后按照相应的指令输出结果。这就是一个简单的程序运行过程。内存空间是有限的,另外,内存上的指令也不能持久化的保存,断电之后就没有了。所以需要一个硬件保存大的二进制资源以及持久化的保存指令,所以就有了硬盘。所以计算机先从硬盘中读取指令和资源到内存当中来,然后cpu再从内存当中读取指令和资源,做运算,运算完之后再按照指令将输出保存在内存中或者硬盘中,程序执行完毕。 From 2dcf310fd3fa54645305ddbd62c25bedf41556b4 Mon Sep 17 00:00:00 2001 From: ikook <935542673@qq.com> Date: Fri, 24 Feb 2017 18:58:34 +0800 Subject: [PATCH 077/216] ArrayList(The madman implementation) --- .../junit/com/ikook/basic_data_structure/MyArrayListTest.java | 4 ++-- .../src/com/ikook/basic_data_structure/MyArrayList.java | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/group18/935542673/Coding/junit/com/ikook/basic_data_structure/MyArrayListTest.java b/group18/935542673/Coding/junit/com/ikook/basic_data_structure/MyArrayListTest.java index f877809cb3..f8bb390595 100644 --- a/group18/935542673/Coding/junit/com/ikook/basic_data_structure/MyArrayListTest.java +++ b/group18/935542673/Coding/junit/com/ikook/basic_data_structure/MyArrayListTest.java @@ -76,13 +76,13 @@ public void testSet() { @Test public void testIterator() { int i = 0; - for(MyIterator iter = list.iterator(); iter.hesNext();) { + for(MyIterator iter = list.iterator(); iter.hasNext();) { Object str = (Object) iter.next(); assertEquals(list.get(i++), str); } int j = list.size(); - for(MyIterator iter = list.iterator(); iter.hesNext();) { + for(MyIterator iter = list.iterator(); iter.hasNext();) { iter.next(); iter.remove(); assertEquals( --j , list.size()); diff --git a/group18/935542673/Coding/src/com/ikook/basic_data_structure/MyArrayList.java b/group18/935542673/Coding/src/com/ikook/basic_data_structure/MyArrayList.java index 3792438f42..6891a76879 100644 --- a/group18/935542673/Coding/src/com/ikook/basic_data_structure/MyArrayList.java +++ b/group18/935542673/Coding/src/com/ikook/basic_data_structure/MyArrayList.java @@ -177,7 +177,7 @@ private class Iter implements MyIterator { int lastRet = -1; // 返回最后一个元素的索引(始终指向刚遍历完的元素),如果没有元素了,则为 -1 @Override - public boolean hesNext() { + public boolean hasNext() { return cursor != size; // cursor 等于 size 则集合遍历完。 } From bf125434e935b0053477a14e6797c31e46f861fa Mon Sep 17 00:00:00 2001 From: ikook <935542673@qq.com> Date: Fri, 24 Feb 2017 18:58:45 +0800 Subject: [PATCH 078/216] Iterator(The madman implementation) --- .../Coding/src/com/ikook/basic_data_structure/MyIterator.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/group18/935542673/Coding/src/com/ikook/basic_data_structure/MyIterator.java b/group18/935542673/Coding/src/com/ikook/basic_data_structure/MyIterator.java index c102b32801..45135ba334 100644 --- a/group18/935542673/Coding/src/com/ikook/basic_data_structure/MyIterator.java +++ b/group18/935542673/Coding/src/com/ikook/basic_data_structure/MyIterator.java @@ -2,7 +2,7 @@ public interface MyIterator { - public boolean hesNext(); // 判断是否有元素没有被遍历 + public boolean hasNext(); // 判断是否有元素没有被遍历 public Object next(); // 返回游标当前位置的元素并将游标移动到下一个位置 From a207f7c2ba0eebc3230709777f9d56a36199c32a Mon Sep 17 00:00:00 2001 From: ikook <935542673@qq.com> Date: Fri, 24 Feb 2017 18:59:01 +0800 Subject: [PATCH 079/216] LinkedList(The madman implementation) --- .../Coding/src/com/ikook/basic_data_structure/MyLinkedList.java | 1 - 1 file changed, 1 deletion(-) diff --git a/group18/935542673/Coding/src/com/ikook/basic_data_structure/MyLinkedList.java b/group18/935542673/Coding/src/com/ikook/basic_data_structure/MyLinkedList.java index 2377509c27..c48fa2567f 100644 --- a/group18/935542673/Coding/src/com/ikook/basic_data_structure/MyLinkedList.java +++ b/group18/935542673/Coding/src/com/ikook/basic_data_structure/MyLinkedList.java @@ -294,7 +294,6 @@ private static class Node { Node next; // 下一个节点 public Node(Node previous, Object data, Node next) { - super(); this.previous = previous; this.data = data; this.next = next; From 808a997fbd35c9e5b971759f48bf02ef8dd67a42 Mon Sep 17 00:00:00 2001 From: ikook <935542673@qq.com> Date: Fri, 24 Feb 2017 19:43:23 +0800 Subject: [PATCH 080/216] LinkedList(The madman implementation) --- .../MyLinkedListTest.java | 16 ++++++ .../basic_data_structure/MyLinkedList.java | 57 +++++++++++++++++++ 2 files changed, 73 insertions(+) diff --git a/group18/935542673/Coding/junit/com/ikook/basic_data_structure/MyLinkedListTest.java b/group18/935542673/Coding/junit/com/ikook/basic_data_structure/MyLinkedListTest.java index 4e3a5d7a22..d479408183 100644 --- a/group18/935542673/Coding/junit/com/ikook/basic_data_structure/MyLinkedListTest.java +++ b/group18/935542673/Coding/junit/com/ikook/basic_data_structure/MyLinkedListTest.java @@ -111,5 +111,21 @@ public void testRemoveInt() { assertEquals("333", list.get(1)); } + + @Test + public void testIterator() { + int i = 0; + for(MyIterator iter = list.iterator(); iter.hasNext();) { + Object str = (Object) iter.next(); + assertEquals(list.get(i++), str); + } + + int j = list.size(); + for(MyIterator iter = list.iterator(); iter.hasNext();) { + iter.next(); + iter.remove(); + assertEquals( --j , list.size()); + } + } } diff --git a/group18/935542673/Coding/src/com/ikook/basic_data_structure/MyLinkedList.java b/group18/935542673/Coding/src/com/ikook/basic_data_structure/MyLinkedList.java index c48fa2567f..a255657911 100644 --- a/group18/935542673/Coding/src/com/ikook/basic_data_structure/MyLinkedList.java +++ b/group18/935542673/Coding/src/com/ikook/basic_data_structure/MyLinkedList.java @@ -299,4 +299,61 @@ public Node(Node previous, Object data, Node next) { this.next = next; } } + + /** + * 返回一个迭代器的实现类 + * @return + */ + public MyIterator iterator() { + return new LinkIter(); + } + + /** + * 迭代器的实现类 + * @author ikook + */ + private class LinkIter implements MyIterator { + private Node lastRet; //始终指向刚遍历完的节点 + private Node next; // 当前指向的节点 + private int nextIndex; //当前节点的索引值 + + LinkIter () { + next = node(0); + nextIndex = 0; + } + + @Override + public boolean hasNext() { + return nextIndex < size; + } + + @Override + public Object next() { + if(!hasNext()) { + throw new NoSuchElementException("没有找到指定的元素, 迭代器遍历失败"); + } + + lastRet = next; + next = next.next; + nextIndex++; + return lastRet.data; + } + + @Override + public void remove() { + if(lastRet == null) { + throw new IllegalStateException("非法状态异常,删除失败"); + } + + Node lastNext = lastRet.next; + deleteElement(lastRet); + if(next == lastRet) { + next = lastNext; + } else { + nextIndex--; + } + lastRet = null; + } + + } } From 54fe271c4bf0d447e4be7baaf26becee09cafe3e Mon Sep 17 00:00:00 2001 From: Great Date: Fri, 24 Feb 2017 19:55:03 +0800 Subject: [PATCH 081/216] update group08 --- group08/108621969/README.md | 7 ++ group08/1144989424/Readme.md | 3 + group08/1144989424/firstPractice/readme.md | 4 ++ .../firstPractice/src/basic/MyArrayList.java | 69 +++++++++++++++++++ .../src/basic/MyBinaryTreeNode.java | 32 +++++++++ .../firstPractice/src/basic/MyIterator.java | 7 ++ .../firstPractice/src/basic/MyLinkedList.java | 46 +++++++++++++ .../firstPractice/src/basic/MyList.java | 9 +++ .../firstPractice/src/basic/MyQueue.java | 19 +++++ .../firstPractice/src/basic/MyStack.java | 22 ++++++ group08/121027265/README.md | 3 + group08/1226637491/haha.txt | 1 + group08/125980622/125980622.js | 1 + group08/1277959541/1277959541 | 1 + group08/1287324781/1287324781 | 1 + group08/1425809544/1425809544.md | 1 + group08/1509102580/zzk.md | 1 + group08/283677872/test | 1 + group08/286060098/286060098.md | 0 group08/406166841/406166841.md | 1 + group08/529757467/.classpath | 6 ++ group08/529757467/.gitignore | 1 + group08/529757467/.project | 17 +++++ group08/619057560/CHHSAlex.md | 1 + group08/648354678/README.md | 4 ++ group08/649859235/README.md | 1 + group08/729770920/729770920.md | 0 group08/769638826/769638826.md | 2 + group08/782476895/.classpath | 6 ++ group08/782476895/.gitignore | 1 + group08/782476895/.project | 17 +++++ group08/782476895/782476895.txt | 0 group08/875325254/875325254.md | 1 + 33 files changed, 286 insertions(+) create mode 100644 group08/108621969/README.md create mode 100644 group08/1144989424/Readme.md create mode 100644 group08/1144989424/firstPractice/readme.md create mode 100644 group08/1144989424/firstPractice/src/basic/MyArrayList.java create mode 100644 group08/1144989424/firstPractice/src/basic/MyBinaryTreeNode.java create mode 100644 group08/1144989424/firstPractice/src/basic/MyIterator.java create mode 100644 group08/1144989424/firstPractice/src/basic/MyLinkedList.java create mode 100644 group08/1144989424/firstPractice/src/basic/MyList.java create mode 100644 group08/1144989424/firstPractice/src/basic/MyQueue.java create mode 100644 group08/1144989424/firstPractice/src/basic/MyStack.java create mode 100644 group08/121027265/README.md create mode 100644 group08/1226637491/haha.txt create mode 100644 group08/125980622/125980622.js create mode 100644 group08/1277959541/1277959541 create mode 100644 group08/1287324781/1287324781 create mode 100644 group08/1425809544/1425809544.md create mode 100644 group08/1509102580/zzk.md create mode 100644 group08/283677872/test create mode 100644 group08/286060098/286060098.md create mode 100644 group08/406166841/406166841.md create mode 100644 group08/529757467/.classpath create mode 100644 group08/529757467/.gitignore create mode 100644 group08/529757467/.project create mode 100644 group08/619057560/CHHSAlex.md create mode 100644 group08/648354678/README.md create mode 100644 group08/649859235/README.md create mode 100644 group08/729770920/729770920.md create mode 100644 group08/769638826/769638826.md create mode 100644 group08/782476895/.classpath create mode 100644 group08/782476895/.gitignore create mode 100644 group08/782476895/.project create mode 100644 group08/782476895/782476895.txt create mode 100644 group08/875325254/875325254.md diff --git a/group08/108621969/README.md b/group08/108621969/README.md new file mode 100644 index 0000000000..413f53e93a --- /dev/null +++ b/group08/108621969/README.md @@ -0,0 +1,7 @@ +# About Me +1. 姓名: 张加涛 +2. 性别: 男 +3. 状态: 实习 +4. 年龄: 22 +5. 职业: web前端 +6. 坐标: 上海浦东 diff --git a/group08/1144989424/Readme.md b/group08/1144989424/Readme.md new file mode 100644 index 0000000000..3a515bb88b --- /dev/null +++ b/group08/1144989424/Readme.md @@ -0,0 +1,3 @@ +### 目录说明 + +个人目录,他人勿动 diff --git a/group08/1144989424/firstPractice/readme.md b/group08/1144989424/firstPractice/readme.md new file mode 100644 index 0000000000..ac4feb57b8 --- /dev/null +++ b/group08/1144989424/firstPractice/readme.md @@ -0,0 +1,4 @@ +### 第一次作业: +1. 实现ArrayList, LinkedList, Queue, Stack +2. 有余力的同学可以实现 BinaryTree 和Iterator +3. 写一篇文章,建议: 描述CPU,内存, 硬盘,指令之间的关系。 \ No newline at end of file diff --git a/group08/1144989424/firstPractice/src/basic/MyArrayList.java b/group08/1144989424/firstPractice/src/basic/MyArrayList.java new file mode 100644 index 0000000000..365c2363cb --- /dev/null +++ b/group08/1144989424/firstPractice/src/basic/MyArrayList.java @@ -0,0 +1,69 @@ +package basic; + +public class MyArrayList implements MyList { + + private int size = 0; + + private Object[] elementData = new Object[10]; + + /** + * 往集合中添加一个元素 + */ + public void add(Object o){ + int length = elementData.length; + //1.比较元素个数和数组大小,判断是否需要扩大数组 + if(size == length){ + expandArray(); + } + //2.直接赋值给size,即最后一个元素 + elementData[size] = o; + size++; + } + + /** + * 往集合指定位置添加一个元素,该位置和其之后的元素向后移动一位。 + * 位置不合法时,抛出异常。 + */ + public void add(int index, Object o){ + int length = elementData.length; + //0.先对index的值进行判断,不能小于0,且不能大于size + if(index < 0 || index > size){ + throw new IndexOutOfBoundsException("插入的下标越界了:"+"插入的下标为:"+index+"集合大小为:"+size); + } + //1.比较元素个数和数组大小,判断是否需要扩大数组 + if(size == length){ + expandArray(); + } + //2.移动index之后的数组元素 + for(int i = size; i > index; i--){ + elementData[i] = elementData[i-1]; + } + elementData[index] = o; + size++; + } + + public Object get(int index){ + return null; + } + + public Object remove(int index){ + return null; + } + + public int size(){ + return -1; + } + + public MyIterator iterator(){ + return null; + } + + private void expandArray(){ + int length = elementData.length; + Object [] newArr = new Object[length * 2]; + for(int i = 0; i < length; i++){ + newArr[i] = elementData[i]; + } + elementData = newArr; + } +} diff --git a/group08/1144989424/firstPractice/src/basic/MyBinaryTreeNode.java b/group08/1144989424/firstPractice/src/basic/MyBinaryTreeNode.java new file mode 100644 index 0000000000..1cad28c4a8 --- /dev/null +++ b/group08/1144989424/firstPractice/src/basic/MyBinaryTreeNode.java @@ -0,0 +1,32 @@ +package basic; + +public class MyBinaryTreeNode { + + private Object data; + private MyBinaryTreeNode left; + private MyBinaryTreeNode right; + + public Object getData() { + return data; + } + public void setData(Object data) { + this.data = data; + } + public MyBinaryTreeNode getLeft() { + return left; + } + public void setLeft(MyBinaryTreeNode left) { + this.left = left; + } + public MyBinaryTreeNode getRight() { + return right; + } + public void setRight(MyBinaryTreeNode right) { + this.right = right; + } + + public MyBinaryTreeNode insert(Object o){ + return null; + } + +} diff --git a/group08/1144989424/firstPractice/src/basic/MyIterator.java b/group08/1144989424/firstPractice/src/basic/MyIterator.java new file mode 100644 index 0000000000..2aa1de62c4 --- /dev/null +++ b/group08/1144989424/firstPractice/src/basic/MyIterator.java @@ -0,0 +1,7 @@ +package basic; + +public interface MyIterator { + public boolean hasNext(); + public Object next(); + +} diff --git a/group08/1144989424/firstPractice/src/basic/MyLinkedList.java b/group08/1144989424/firstPractice/src/basic/MyLinkedList.java new file mode 100644 index 0000000000..a62e77bc92 --- /dev/null +++ b/group08/1144989424/firstPractice/src/basic/MyLinkedList.java @@ -0,0 +1,46 @@ +package basic; + +public class MyLinkedList implements MyList { + + private Node head; + + public void add(Object o){ + + } + public void add(int index , Object o){ + + } + public Object get(int index){ + return null; + } + public Object remove(int index){ + return null; + } + + public int size(){ + return -1; + } + + public void addFirst(Object o){ + + } + public void addLast(Object o){ + + } + public Object removeFirst(){ + return null; + } + public Object removeLast(){ + return null; + } + public MyIterator iterator(){ + return null; + } + + + private static class Node{ + Object data; + Node next; + + } +} diff --git a/group08/1144989424/firstPractice/src/basic/MyList.java b/group08/1144989424/firstPractice/src/basic/MyList.java new file mode 100644 index 0000000000..c017431b22 --- /dev/null +++ b/group08/1144989424/firstPractice/src/basic/MyList.java @@ -0,0 +1,9 @@ +package basic; + +public interface MyList { + 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(); +} diff --git a/group08/1144989424/firstPractice/src/basic/MyQueue.java b/group08/1144989424/firstPractice/src/basic/MyQueue.java new file mode 100644 index 0000000000..ee17135a2d --- /dev/null +++ b/group08/1144989424/firstPractice/src/basic/MyQueue.java @@ -0,0 +1,19 @@ +package basic; + +public class MyQueue { + + public void enQueue(Object o){ + } + + public Object deQueue(){ + return null; + } + + public boolean isEmpty(){ + return false; + } + + public int size(){ + return -1; + } +} diff --git a/group08/1144989424/firstPractice/src/basic/MyStack.java b/group08/1144989424/firstPractice/src/basic/MyStack.java new file mode 100644 index 0000000000..0460746cf7 --- /dev/null +++ b/group08/1144989424/firstPractice/src/basic/MyStack.java @@ -0,0 +1,22 @@ +package basic; + +public class MyStack { + private MyArrayList elementData = new MyArrayList(); + + public void push(Object o){ + } + + public Object pop(){ + return null; + } + + public Object peek(){ + return null; + } + public boolean isEmpty(){ + return false; + } + public int size(){ + return -1; + } +} diff --git a/group08/121027265/README.md b/group08/121027265/README.md new file mode 100644 index 0000000000..488916d101 --- /dev/null +++ b/group08/121027265/README.md @@ -0,0 +1,3 @@ +# 是标题 +* aaa +* bbb diff --git a/group08/1226637491/haha.txt b/group08/1226637491/haha.txt new file mode 100644 index 0000000000..e51c0a4a15 --- /dev/null +++ b/group08/1226637491/haha.txt @@ -0,0 +1 @@ +heiheihei~~ \ No newline at end of file diff --git a/group08/125980622/125980622.js b/group08/125980622/125980622.js new file mode 100644 index 0000000000..bcea502ef8 --- /dev/null +++ b/group08/125980622/125980622.js @@ -0,0 +1 @@ +console.log('Hello~Coding2017') diff --git a/group08/1277959541/1277959541 b/group08/1277959541/1277959541 new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/group08/1277959541/1277959541 @@ -0,0 +1 @@ + diff --git a/group08/1287324781/1287324781 b/group08/1287324781/1287324781 new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/group08/1287324781/1287324781 @@ -0,0 +1 @@ + diff --git a/group08/1425809544/1425809544.md b/group08/1425809544/1425809544.md new file mode 100644 index 0000000000..61de0edff4 --- /dev/null +++ b/group08/1425809544/1425809544.md @@ -0,0 +1 @@ +测试 \ No newline at end of file diff --git a/group08/1509102580/zzk.md b/group08/1509102580/zzk.md new file mode 100644 index 0000000000..19fffff42b --- /dev/null +++ b/group08/1509102580/zzk.md @@ -0,0 +1 @@ +I am zzk! diff --git a/group08/283677872/test b/group08/283677872/test new file mode 100644 index 0000000000..3d8158f431 --- /dev/null +++ b/group08/283677872/test @@ -0,0 +1 @@ +283677872 diff --git a/group08/286060098/286060098.md b/group08/286060098/286060098.md new file mode 100644 index 0000000000..e69de29bb2 diff --git a/group08/406166841/406166841.md b/group08/406166841/406166841.md new file mode 100644 index 0000000000..aef5098754 --- /dev/null +++ b/group08/406166841/406166841.md @@ -0,0 +1 @@ +406166841 \ No newline at end of file diff --git a/group08/529757467/.classpath b/group08/529757467/.classpath new file mode 100644 index 0000000000..fb5011632c --- /dev/null +++ b/group08/529757467/.classpath @@ -0,0 +1,6 @@ + + + + + + diff --git a/group08/529757467/.gitignore b/group08/529757467/.gitignore new file mode 100644 index 0000000000..ae3c172604 --- /dev/null +++ b/group08/529757467/.gitignore @@ -0,0 +1 @@ +/bin/ diff --git a/group08/529757467/.project b/group08/529757467/.project new file mode 100644 index 0000000000..dffcfb2808 --- /dev/null +++ b/group08/529757467/.project @@ -0,0 +1,17 @@ + + + 529757467 + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git a/group08/619057560/CHHSAlex.md b/group08/619057560/CHHSAlex.md new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/group08/619057560/CHHSAlex.md @@ -0,0 +1 @@ + diff --git a/group08/648354678/README.md b/group08/648354678/README.md new file mode 100644 index 0000000000..20b57abd22 --- /dev/null +++ b/group08/648354678/README.md @@ -0,0 +1,4 @@ +# 测试上传文件到git +## 第一次上传以作学习 +## QQ:648354678 +### 希望跟大家共同学习进步 \ No newline at end of file diff --git a/group08/649859235/README.md b/group08/649859235/README.md new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/group08/649859235/README.md @@ -0,0 +1 @@ + diff --git a/group08/729770920/729770920.md b/group08/729770920/729770920.md new file mode 100644 index 0000000000..e69de29bb2 diff --git a/group08/769638826/769638826.md b/group08/769638826/769638826.md new file mode 100644 index 0000000000..4573496090 --- /dev/null +++ b/group08/769638826/769638826.md @@ -0,0 +1,2 @@ +###自我介绍 + diff --git a/group08/782476895/.classpath b/group08/782476895/.classpath new file mode 100644 index 0000000000..fb5011632c --- /dev/null +++ b/group08/782476895/.classpath @@ -0,0 +1,6 @@ + + + + + + diff --git a/group08/782476895/.gitignore b/group08/782476895/.gitignore new file mode 100644 index 0000000000..ae3c172604 --- /dev/null +++ b/group08/782476895/.gitignore @@ -0,0 +1 @@ +/bin/ diff --git a/group08/782476895/.project b/group08/782476895/.project new file mode 100644 index 0000000000..4b7a2c3c01 --- /dev/null +++ b/group08/782476895/.project @@ -0,0 +1,17 @@ + + + 782476895learning + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git a/group08/782476895/782476895.txt b/group08/782476895/782476895.txt new file mode 100644 index 0000000000..e69de29bb2 diff --git a/group08/875325254/875325254.md b/group08/875325254/875325254.md new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/group08/875325254/875325254.md @@ -0,0 +1 @@ + From 16dfd34a181b2472e92173fd3bdc4489de53355e Mon Sep 17 00:00:00 2001 From: guodongym Date: Fri, 24 Feb 2017 20:09:56 +0800 Subject: [PATCH 082/216] 11 11 --- .../learning_1/src/com/guodong/datastructure/LinkedList.java | 1 - 1 file changed, 1 deletion(-) diff --git a/group12/377401843/learning_1/src/com/guodong/datastructure/LinkedList.java b/group12/377401843/learning_1/src/com/guodong/datastructure/LinkedList.java index fc3c1ef42d..2424a304dc 100644 --- a/group12/377401843/learning_1/src/com/guodong/datastructure/LinkedList.java +++ b/group12/377401843/learning_1/src/com/guodong/datastructure/LinkedList.java @@ -100,7 +100,6 @@ public int size() { public void addFirst(Object o) { - } public void addLast(Object o) { From dbd3f5c95d3fbf1697dbe1474b8b9913557708f5 Mon Sep 17 00:00:00 2001 From: zj <2258659044@qq.com> Date: Fri, 24 Feb 2017 20:38:36 +0800 Subject: [PATCH 083/216] =?UTF-8?q?=E4=BC=98=E5=8C=96ArrayList?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/com/coding/basic/ArrayList.java | 22 +++++++------------ 1 file changed, 8 insertions(+), 14 deletions(-) diff --git a/group12/2258659044/zj-2017/src/com/coding/basic/ArrayList.java b/group12/2258659044/zj-2017/src/com/coding/basic/ArrayList.java index d08cf467eb..5de89da950 100644 --- a/group12/2258659044/zj-2017/src/com/coding/basic/ArrayList.java +++ b/group12/2258659044/zj-2017/src/com/coding/basic/ArrayList.java @@ -13,9 +13,7 @@ public class ArrayList implements List { private Object[] newElementData; public void add(Object o){ - if(size>=elementData.length){//扩容 - grow(); - } + grow(); elementData[size] = o; size ++; } @@ -24,9 +22,7 @@ public void add(int index, Object o){ if(index>size){ throw new IndexOutOfBoundsException("Index: "+index+",Size:"+size); } - if(size>=elementData.length||index>=elementData.length-1){//长度不够需要扩容 - grow(); - } + grow(); if(indexsize){ - size = index+1; - }else{ - size ++; - } + size ++; } public Object get(int index){ @@ -66,9 +58,11 @@ public int size(){ */ private void grow(){ - newElementData = new Object[size+GENE]; - System.arraycopy(elementData, 0, newElementData, 0, elementData.length); - elementData = newElementData; + if(size>=elementData.length){//长度不够需要扩容 + newElementData = new Object[size+GENE]; + System.arraycopy(elementData, 0, newElementData, 0, elementData.length); + elementData = newElementData; + } } From 0ffdad68f5de126bc0542b0ae184b7d7b8de3948 Mon Sep 17 00:00:00 2001 From: xpc8848 <784140710@qq.com> Date: Fri, 24 Feb 2017 21:25:25 +0800 Subject: [PATCH 084/216] week01 --- group18/784140710/week01/.gitignore | 4 + .../src/com/coding/basic/ArrayList.java | 65 ++++++++++ .../src/com/coding/basic/BinaryTree.java | 65 ++++++++++ .../src/com/coding/basic/BinaryTreeNode.java | 66 ++++++++++ .../week01/src/com/coding/basic/Iterator.java | 7 ++ .../src/com/coding/basic/LinkedList.java | 114 ++++++++++++++++++ .../week01/src/com/coding/basic/List.java | 9 ++ .../week01/src/com/coding/basic/Queue.java | 21 ++++ .../week01/src/com/coding/basic/Stack.java | 23 ++++ .../week01/src/com/coding/test/Test01.java | 56 +++++++++ .../src/com/coding/test/TestBinaryTree.java | 20 +++ 11 files changed, 450 insertions(+) create mode 100644 group18/784140710/week01/.gitignore create mode 100644 group18/784140710/week01/src/com/coding/basic/ArrayList.java create mode 100644 group18/784140710/week01/src/com/coding/basic/BinaryTree.java create mode 100644 group18/784140710/week01/src/com/coding/basic/BinaryTreeNode.java create mode 100644 group18/784140710/week01/src/com/coding/basic/Iterator.java create mode 100644 group18/784140710/week01/src/com/coding/basic/LinkedList.java create mode 100644 group18/784140710/week01/src/com/coding/basic/List.java create mode 100644 group18/784140710/week01/src/com/coding/basic/Queue.java create mode 100644 group18/784140710/week01/src/com/coding/basic/Stack.java create mode 100644 group18/784140710/week01/src/com/coding/test/Test01.java create mode 100644 group18/784140710/week01/src/com/coding/test/TestBinaryTree.java diff --git a/group18/784140710/week01/.gitignore b/group18/784140710/week01/.gitignore new file mode 100644 index 0000000000..68bcada58d --- /dev/null +++ b/group18/784140710/week01/.gitignore @@ -0,0 +1,4 @@ +/bin/ +.settings +.classpath +.project diff --git a/group18/784140710/week01/src/com/coding/basic/ArrayList.java b/group18/784140710/week01/src/com/coding/basic/ArrayList.java new file mode 100644 index 0000000000..fb09da9b6c --- /dev/null +++ b/group18/784140710/week01/src/com/coding/basic/ArrayList.java @@ -0,0 +1,65 @@ +package com.coding.basic; + +import java.util.Arrays; + +public class ArrayList implements List { + + private int size = 0; + + private Object[] elementData = new Object[5]; + + public void add(Object o){ + if(++size > elementData.length){ + elementData = Arrays.copyOf(elementData, elementData.length*2); + } + elementData[size-1] = o; + + } + public void add(int index, Object o){ + Object[] tmp = new Object[elementData.length]; + + if(index<0 || index >elementData.length-1){ + return; + } + if(++size > elementData.length){ + elementData = Arrays.copyOf(elementData, elementData.length*2); + tmp = new Object[elementData.length]; + } + System.arraycopy(elementData, 0, tmp, 0, index); + System.arraycopy(elementData, index, tmp, index+1, size-index); + tmp[index] = o; + elementData=tmp; + + } + + public Object get(int index){ + if(index<0 || index >elementData.length-1){ + return null; + } + return elementData[index]; + } + + public Object remove(int index){ + Object o=null; + o = elementData[index]; + if(--size%5 == 0){ + elementData = Arrays.copyOf(elementData, elementData.length/2); + }else if(index == size-1){ + elementData[index] = null; + }else if(index == size-1){ + + System.arraycopy(elementData, index+1, elementData, index, size-index-1); + } + + return o; + } + + public int size(){ + return size; + } + + public Iterator iterator(){ + return null; + } + +} diff --git a/group18/784140710/week01/src/com/coding/basic/BinaryTree.java b/group18/784140710/week01/src/com/coding/basic/BinaryTree.java new file mode 100644 index 0000000000..01b7a90a43 --- /dev/null +++ b/group18/784140710/week01/src/com/coding/basic/BinaryTree.java @@ -0,0 +1,65 @@ +package com.coding.basic; + + +public class BinaryTree { + + private BinaryTreeNode root; + + public void insert(Integer o){ + BinaryTreeNode node = new BinaryTreeNode(o); + if(root == null){ + root = node; + }else{ + BinaryTreeNode current = root; + BinaryTreeNode parent; + + while(true){ + parent = current; + if(onode.getData()){ + node = node.getRight(); + }else{ + return node; + } + } + + return null; + } + + +} + + + + + + + + + + + + diff --git a/group18/784140710/week01/src/com/coding/basic/BinaryTreeNode.java b/group18/784140710/week01/src/com/coding/basic/BinaryTreeNode.java new file mode 100644 index 0000000000..15cbb94d28 --- /dev/null +++ b/group18/784140710/week01/src/com/coding/basic/BinaryTreeNode.java @@ -0,0 +1,66 @@ +package com.coding.basic; + + +public class BinaryTreeNode { + + private Integer data; + private BinaryTreeNode left; + private BinaryTreeNode right; + + public BinaryTreeNode(Integer data){ + this.data = data; + } + + public Integer getData() { + return data; + } + public void setData(Integer 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; + } + +} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/group18/784140710/week01/src/com/coding/basic/Iterator.java b/group18/784140710/week01/src/com/coding/basic/Iterator.java new file mode 100644 index 0000000000..06ef6311b2 --- /dev/null +++ b/group18/784140710/week01/src/com/coding/basic/Iterator.java @@ -0,0 +1,7 @@ +package com.coding.basic; + +public interface Iterator { + public boolean hasNext(); + public Object next(); + +} diff --git a/group18/784140710/week01/src/com/coding/basic/LinkedList.java b/group18/784140710/week01/src/com/coding/basic/LinkedList.java new file mode 100644 index 0000000000..98d5bf6b6e --- /dev/null +++ b/group18/784140710/week01/src/com/coding/basic/LinkedList.java @@ -0,0 +1,114 @@ +package com.coding.basic; + +public class LinkedList implements List { + + private Node head; + private int size = 0; + + public void add(Object o){ + ++size; + Node node = new Node(o); + + if(head == null){ + head = node; + return; + } + Node tmp = new Node(o); + tmp = head; + while(tmp.next!=null){ + tmp = tmp.next; + } + tmp.next = node; + } + public void add(int index , Object o){ + ++size; + Node node = new Node(o); + Node tmp = new Node(o); + tmp = head; + int i =0; + while(tmp.next!=null && i Date: Fri, 24 Feb 2017 21:33:39 +0800 Subject: [PATCH 085/216] Iterator(The madman implementation) --- .../Coding/src/com/ikook/basic_data_structure/MyIterator.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/group18/935542673/Coding/src/com/ikook/basic_data_structure/MyIterator.java b/group18/935542673/Coding/src/com/ikook/basic_data_structure/MyIterator.java index 45135ba334..1fe7a69fcb 100644 --- a/group18/935542673/Coding/src/com/ikook/basic_data_structure/MyIterator.java +++ b/group18/935542673/Coding/src/com/ikook/basic_data_structure/MyIterator.java @@ -1,5 +1,8 @@ package com.ikook.basic_data_structure; +/** + * @author ikook QQ号码: 935542673 + */ public interface MyIterator { public boolean hasNext(); // 判断是否有元素没有被遍历 From 9cf457869d8a59a574201ab83105d76cc7022d14 Mon Sep 17 00:00:00 2001 From: Mr Chen Date: Fri, 24 Feb 2017 21:37:31 +0800 Subject: [PATCH 086/216] txt test --- group07/2306826375/txt | 1 + 1 file changed, 1 insertion(+) create mode 100644 group07/2306826375/txt diff --git a/group07/2306826375/txt b/group07/2306826375/txt new file mode 100644 index 0000000000..d6459e0054 --- /dev/null +++ b/group07/2306826375/txt @@ -0,0 +1 @@ +xxx From a43468f72745c692e2f4c2817d2b1d11fcfdc1d3 Mon Sep 17 00:00:00 2001 From: 240094626 Date: Fri, 24 Feb 2017 21:38:11 +0800 Subject: [PATCH 087/216] warm-up code --- .../src/com/coding/basic/Iterator.java | 7 + .../warm-up/src/com/coding/basic/List.java | 9 + .../src/com/coding/basic/impl/ArrayList.java | 186 ++++++++++++++++++ 3 files changed, 202 insertions(+) create mode 100644 group17/240094626/warm-up/src/com/coding/basic/Iterator.java create mode 100644 group17/240094626/warm-up/src/com/coding/basic/List.java create mode 100644 group17/240094626/warm-up/src/com/coding/basic/impl/ArrayList.java diff --git a/group17/240094626/warm-up/src/com/coding/basic/Iterator.java b/group17/240094626/warm-up/src/com/coding/basic/Iterator.java new file mode 100644 index 0000000000..06ef6311b2 --- /dev/null +++ b/group17/240094626/warm-up/src/com/coding/basic/Iterator.java @@ -0,0 +1,7 @@ +package com.coding.basic; + +public interface Iterator { + public boolean hasNext(); + public Object next(); + +} diff --git a/group17/240094626/warm-up/src/com/coding/basic/List.java b/group17/240094626/warm-up/src/com/coding/basic/List.java new file mode 100644 index 0000000000..10d13b5832 --- /dev/null +++ b/group17/240094626/warm-up/src/com/coding/basic/List.java @@ -0,0 +1,9 @@ +package com.coding.basic; + +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(); +} diff --git a/group17/240094626/warm-up/src/com/coding/basic/impl/ArrayList.java b/group17/240094626/warm-up/src/com/coding/basic/impl/ArrayList.java new file mode 100644 index 0000000000..0deff37f2f --- /dev/null +++ b/group17/240094626/warm-up/src/com/coding/basic/impl/ArrayList.java @@ -0,0 +1,186 @@ +package com.coding.basic.impl; + +import java.util.Arrays; +import java.util.LinkedList; + +import com.coding.basic.Iterator; +import com.coding.basic.List; + +/** + * + * @描述: ArrayList简单实现 + * @作者:240094626 + * @创建日期:2017-2-20 + */ +public class ArrayList implements List { + + + /** + * @comment:元素数组 + */ + private Object data[] = null; + + /** + * @comment:数组元素个数 + */ + private int size = 0; + + /** + * 无参构造函数,初始化容量为10的空列表 + */ + public ArrayList(){ + this(10); + } + + /** + * @param length + * 构造函数,初始化容量为length的空列表 + */ + public ArrayList(int length){ + super(); + if(length < 0){ + throw new IllegalArgumentException("初始容量参数非法:"+length); + } + data = new Object[length]; + } + + + /** + * @createTime: 2017-2-21 下午1:32:28 + * @param length + * @return:void + * @comment:列表结构扩展容量,每次增加原来的1/2容量 + */ + private void grow(int length){ + int oldLength = data.length; + if(length > oldLength){ + Object oldData[] = data; + int newLength = oldLength*3/2 + 1; + if(newLength < length){ + newLength = length; + } + data = new Object[newLength]; + System.arraycopy(oldData, 0, data, 0, oldLength); + } + } + + /** + * @createTime: 2017-2-21 下午1:32:05 + * @param index + * @return:void + * @comment:检验下标参数是否超限 + */ + private void check(int index) { + if( index > data.length){ + throw new IndexOutOfBoundsException("Index:"+index+",size:"+size); + } + } + + @Override + public void add(Object o) { + grow(size+1); + data[size++]=o; + } + + @Override + public void add(int index, Object o) { + if( index > size || index < 0){ + throw new IndexOutOfBoundsException("Index:"+index); + } + grow(size+1); + System.arraycopy(data, index, data, index+1, size-index); + data[index] = o; + size++; + + } + + @Override + public Object get(int index) { + check(index); + return data[index]; + } + + + + @Override + public Object remove(int index) { + check(index); + Object remove = data[index]; + System.arraycopy(data, index+1, data, index, size-index); + data[--size] = null; + return remove; + } + + @Override + public int size() { + return size; + } + + + @Override + public String toString() { + return "ArrayList [data=" + Arrays.toString(data) + ", size=" + size + + "]"; + } + + public Iterator iterator(){ + return new ArrayListIterator(); + } + + /** + * @描述: 简单实现迭代器 + * @作者:240094626 + * @创建日期:2017-2-21 + */ + private class ArrayListIterator implements Iterator{ + + /** + * @column:index + * @comment:当前位置下标 + */ + private int index; + + /** + * 无参构造,初始化迭代器的下标为0 + */ + public ArrayListIterator(){ + index = 0; + } + + @Override + public boolean hasNext() { + if(index < size){ + return true; + } + return false; + } + + @Override + public Object next() { + Object o = data[index++]; + return o; + } + + } + + // Test + public static void main(String[] args) { + ArrayList list = new ArrayList(5); + System.out.println(list.size()); + list.add("1"); + list.add(1,"hei"); + + System.out.println(list.toString()); + Iterator i = list.iterator(); + while(i.hasNext()){ + System.out.println(i.next()); + } +// java.util.ArrayList a = new java.util.ArrayList(); +// Iterator iterator = (Iterator) a.iterator(); + } + + + +} + + From c2cad43b8305804d11af94905c44e3e4f04d9364 Mon Sep 17 00:00:00 2001 From: 240094626 Date: Fri, 24 Feb 2017 21:55:21 +0800 Subject: [PATCH 088/216] 'LinkedList.java' --- .../src/com/coding/basic/impl/LinkedList.java | 160 ++++++++++++++++++ 1 file changed, 160 insertions(+) create mode 100644 group17/240094626/warm-up/src/com/coding/basic/impl/LinkedList.java diff --git a/group17/240094626/warm-up/src/com/coding/basic/impl/LinkedList.java b/group17/240094626/warm-up/src/com/coding/basic/impl/LinkedList.java new file mode 100644 index 0000000000..958ac332bd --- /dev/null +++ b/group17/240094626/warm-up/src/com/coding/basic/impl/LinkedList.java @@ -0,0 +1,160 @@ +package com.coding.basic.impl; + +import java.util.NoSuchElementException; + +import com.coding.basic.Iterator; +import com.coding.basic.List; + +public class LinkedList implements List { + /**头节点(空的)*/ + private Node header = new Node(null, null, null); + /**链表节点长度*/ + private int size = 0; + + + /** + * 无参构造函数,初始化header节点,前后均指向header节点,形成环形链表 + * 环形链表:为了使链表节点的开头是header,结尾也是header; + * 由于实现了List,那么链表就是有序的,根据下标查询时可借助环形特点双向查找,提升效率; + */ + public LinkedList() { + header.next = header.pre = header; + } + + + /** + * 将Object o 添加到 节点n之前 + * @param o + * @param n + */ + private void addBefore(Object o, Node n) { + Node newNode = new Node(o, n.pre, n); + newNode.next.pre = newNode; + newNode.pre.next = newNode; + size++; + } + + /** + * 根据下标位置查找结点 + * @param index + * @return + */ + private Node getNode(int index) { + if(index < 0 || index >= size){ + throw new IndexOutOfBoundsException("index:"+index); + } + // 查找从header开始 + Node n = header; + if(index < (size >> 1)){ + // 往next方向找第index个节点 + for(int i=0; i < index; i++){ + n = n.next; + } + }else{ + // 往pre方向找第size-index个节点 + for(int i=size-index; i > 0; i--){ + n = n.pre; + } + } + return n; + } + + + /** + * 移除节点,从当前节点的前后节点间删除当前节点 + * @param n + * @return + */ + private Object remove(Node n){ + if(n == header){ + throw new NoSuchElementException("未找到节点"); + } + Object result = n.data; + n.pre.next = n.next; + n.next.pre = n.pre; + n.next = n.pre = null; + n.data = null; + size--; + return result; + } + + @Override + public void add(Object o) { + // 默认往header前添加 + addBefore(o,header); + } + + + @Override + public void add(int index, Object o) { + addBefore(o,index==size?header:getNode(index)); + } + + @Override + public Object get(int index) { + Node n = getNode(index); + return n.data; + } + + + @Override + public Object remove(int index) { + return remove(getNode(index)); + } + + + @Override + public int getSize() { + return size; + } + + public Iterator iterator(){ + + return new LinkedListIterator(); + } + + private static class Node{ + Object data; + Node pre; + Node next; + + /** + * 链表节点,带参构造函数 + * @param data 节点内容 + * @param pre 上一个节点 + * @param next 下一个节点 + */ + public Node(Object data, Node pre, Node next) { + super(); + this.data = data; + this.pre = pre; + this.next = next; + } + + } + + private class LinkedListIterator implements Iterator{ + int index ; + + public LinkedListIterator() { + index = 0; + } + + @Override + public boolean hasNext() { + if(index < size){ + return true; + } + return false; + } + + @Override + public Object next() { + Node n = getNode(index); + return n.data; + } + + } + + +} From 951e9911d375667d8d44b538093c86a97427e070 Mon Sep 17 00:00:00 2001 From: 240094626 Date: Fri, 24 Feb 2017 22:20:34 +0800 Subject: [PATCH 089/216] 'Stack.java --- .../src/com/coding/basic/impl/LinkedList.java | 6 ++- .../src/com/coding/basic/impl/Stack.java | 50 +++++++++++++++++++ 2 files changed, 55 insertions(+), 1 deletion(-) create mode 100644 group17/240094626/warm-up/src/com/coding/basic/impl/Stack.java diff --git a/group17/240094626/warm-up/src/com/coding/basic/impl/LinkedList.java b/group17/240094626/warm-up/src/com/coding/basic/impl/LinkedList.java index 958ac332bd..b50a80063e 100644 --- a/group17/240094626/warm-up/src/com/coding/basic/impl/LinkedList.java +++ b/group17/240094626/warm-up/src/com/coding/basic/impl/LinkedList.java @@ -5,6 +5,10 @@ import com.coding.basic.Iterator; import com.coding.basic.List; +/** + * 双向链表简单实现 + * @author 240094626 + */ public class LinkedList implements List { /**头节点(空的)*/ private Node header = new Node(null, null, null); @@ -104,7 +108,7 @@ public Object remove(int index) { @Override - public int getSize() { + public int size() { return size; } diff --git a/group17/240094626/warm-up/src/com/coding/basic/impl/Stack.java b/group17/240094626/warm-up/src/com/coding/basic/impl/Stack.java new file mode 100644 index 0000000000..7d31fdc275 --- /dev/null +++ b/group17/240094626/warm-up/src/com/coding/basic/impl/Stack.java @@ -0,0 +1,50 @@ +package com.coding.basic.impl; + +/** + * 栈的简单实现 + * @author 240094626 + */ +public class Stack { + /**长度可变的元素容器*/ + private ArrayList elementData = new ArrayList(); + + /** + * 压入栈 + * @param o + */ + public void push(Object o){ + elementData.add(o); + } + + /** + * 出栈(末尾元素),并移除 + * @return Object + */ + public Object pop(){ + return elementData.remove(elementData.size()-1); + } + + /** + * 取出栈(末尾元素),不移除 + * @return Object + */ + public Object peek(){ + return elementData.get(elementData.size()-1); + } + + /** + * 判断栈是否为空 + * @return boolean + */ + public boolean isEmpty(){ + return elementData.size() == 0 ? true : false; + } + + /** + * 栈的长度,既是容器ArrayList的长度 + * @return int + */ + public int size(){ + return elementData.size(); + } +} From 4093dcc3e639c1d6cca87efa206e2c252728da04 Mon Sep 17 00:00:00 2001 From: ikook <935542673@qq.com> Date: Fri, 24 Feb 2017 22:24:20 +0800 Subject: [PATCH 090/216] BinarySearchTree(The ikook implementation) --- .../com/ikook/basic_data_structure/MyBinarySearchTree.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/group18/935542673/Coding/src/com/ikook/basic_data_structure/MyBinarySearchTree.java b/group18/935542673/Coding/src/com/ikook/basic_data_structure/MyBinarySearchTree.java index 472745c4e5..d30be18a7a 100644 --- a/group18/935542673/Coding/src/com/ikook/basic_data_structure/MyBinarySearchTree.java +++ b/group18/935542673/Coding/src/com/ikook/basic_data_structure/MyBinarySearchTree.java @@ -139,7 +139,7 @@ else if (current.left != null && current.right != null) { * @param deleleNode * @return */ - public Node getSuccessor(Node deleleNode) { + private Node getSuccessor(Node deleleNode) { Node successsor = null; Node successsorParent = null; Node current = deleleNode.right; @@ -162,7 +162,7 @@ public Node getSuccessor(Node deleleNode) { * @param root * @param sb */ - public void display(Node root, StringBuilder sb) { + private void display(Node root, StringBuilder sb) { if (root != null) { display(root.left, sb); sb.append(root.data + " "); From da9b9c6eb12c12ec6cf5198a4afe57d6f002fc7e Mon Sep 17 00:00:00 2001 From: dongqihust Date: Fri, 24 Feb 2017 22:33:28 +0800 Subject: [PATCH 091/216] =?UTF-8?q?=E5=AE=8C=E6=88=90ArrayList=EF=BC=8Clin?= =?UTF-8?q?kedlist=EF=BC=8Cqueue=E5=92=8Cstack?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- group16/1325756593/.classpath | 7 + group16/1325756593/.gitignore | 1 + group16/1325756593/.project | 17 ++ .../src/com/dong/week1/ArrayList.java | 71 +++++++ .../src/com/dong/week1/ArrayListTest.java | 63 +++++++ .../src/com/dong/week1/BinaryTreeNode.java | 32 ++++ .../src/com/dong/week1/Iterator.java | 7 + .../src/com/dong/week1/LinkedList.java | 176 ++++++++++++++++++ .../1325756593/src/com/dong/week1/List.java | 9 + .../1325756593/src/com/dong/week1/Queue.java | 24 +++ .../1325756593/src/com/dong/week1/Stack.java | 31 +++ 11 files changed, 438 insertions(+) create mode 100644 group16/1325756593/.classpath create mode 100644 group16/1325756593/.gitignore create mode 100644 group16/1325756593/.project create mode 100644 group16/1325756593/src/com/dong/week1/ArrayList.java create mode 100644 group16/1325756593/src/com/dong/week1/ArrayListTest.java create mode 100644 group16/1325756593/src/com/dong/week1/BinaryTreeNode.java create mode 100644 group16/1325756593/src/com/dong/week1/Iterator.java create mode 100644 group16/1325756593/src/com/dong/week1/LinkedList.java create mode 100644 group16/1325756593/src/com/dong/week1/List.java create mode 100644 group16/1325756593/src/com/dong/week1/Queue.java create mode 100644 group16/1325756593/src/com/dong/week1/Stack.java diff --git a/group16/1325756593/.classpath b/group16/1325756593/.classpath new file mode 100644 index 0000000000..3e0fb272a8 --- /dev/null +++ b/group16/1325756593/.classpath @@ -0,0 +1,7 @@ + + + + + + + diff --git a/group16/1325756593/.gitignore b/group16/1325756593/.gitignore new file mode 100644 index 0000000000..ae3c172604 --- /dev/null +++ b/group16/1325756593/.gitignore @@ -0,0 +1 @@ +/bin/ diff --git a/group16/1325756593/.project b/group16/1325756593/.project new file mode 100644 index 0000000000..e3d07b6899 --- /dev/null +++ b/group16/1325756593/.project @@ -0,0 +1,17 @@ + + + DongqiHomeWork + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git a/group16/1325756593/src/com/dong/week1/ArrayList.java b/group16/1325756593/src/com/dong/week1/ArrayList.java new file mode 100644 index 0000000000..a1477a8dcc --- /dev/null +++ b/group16/1325756593/src/com/dong/week1/ArrayList.java @@ -0,0 +1,71 @@ +package com.dong.week1; + +import java.util.Arrays; + +public class ArrayList implements List { + + private int size = 0; + + private Object[] elementData = new Object[100]; + + public void add(Object o){ + /** + * жǷѾˣѾݴ + */ + if(elementData.length==size){ + elementData = Arrays.copyOf(elementData, elementData.length*2+1); + } + elementData[size++]=o; + + } + public void add(int index, Object o){ + if(index >size || index < 0 ){ + throw new ArrayIndexOutOfBoundsException("Խ,ǰ鳤"+size+",Ԫص:"+index); + } + /** + * Ѿˣ + */ + if(size==elementData.length){ + elementData = Arrays.copyOf(elementData, elementData.length*2+1); + } + Object[] elementDataClone = elementData.clone(); + System.arraycopy(elementData, index, elementDataClone, index+1, size-index); + elementDataClone[index++]=o; + size++; + elementData = elementDataClone; + } + + + public Object get(int index){ + if(index >=size || index < 0 ){ + throw new ArrayIndexOutOfBoundsException("Խ,ǰ鳤"+size+",Ԫص:"+index); + } + return elementData[index]; + } + + public Object remove(int index){ + if(index >=size || index < 0 ){ + throw new ArrayIndexOutOfBoundsException("Խ,ǰ鳤"+size+",ɾԪص:"+index); + } + elementData[index]=null; + size--; + Object[] elementDataClone = elementData.clone(); + System.arraycopy(elementData, index+1, elementDataClone, index, size-index-1); + elementData = elementDataClone; + return elementData[index]; + } + + public int size(){ + return size; + } + + public Iterator iterator(){ + return null; + } + @Override + public String toString() { + return "ArrayList [size=" + size + ", elementData=" + Arrays.toString(elementData) + "]"; + } + + +} diff --git a/group16/1325756593/src/com/dong/week1/ArrayListTest.java b/group16/1325756593/src/com/dong/week1/ArrayListTest.java new file mode 100644 index 0000000000..128130cfb2 --- /dev/null +++ b/group16/1325756593/src/com/dong/week1/ArrayListTest.java @@ -0,0 +1,63 @@ +package com.dong.week1; + +import static org.junit.Assert.*; + +import org.junit.Test; + +public class ArrayListTest { + + //@Test + public void testAddObject() { + ArrayList arrayList = new ArrayList(); + for(int i=0;i<=200;i++){ + arrayList.add(i); + } + System.out.println(arrayList); + } + + //@Test + public void testAddIntObject() { + ArrayList arrayList = new ArrayList(); + for(int i=0;i<=2;i++){ + arrayList.add(i); + } + arrayList.add(1,100); + arrayList.add(1, 1000); + System.out.println(arrayList); + } + +// @Test + public void testGet() { + ArrayList arrayList = new ArrayList(); + for(int i=0;i<=200;i++){ + arrayList.add(i); + } + //System.out.println(arrayList.get(-1)); + //System.out.println(arrayList.get(50)); + System.out.println(arrayList.get(200)); + //System.out.println(arrayList.get(300)); + + + } + + @Test + public void testRemove() { + ArrayList arrayList = new ArrayList(); + for(int i=0;i<=10;i++){ + arrayList.add(i); + } + arrayList.remove(1); + arrayList.remove(1); + System.out.println(arrayList); + } + +// @Test + public void testSize() { + ArrayList arrayList = new ArrayList(); + for(int i=0;i<=10;i++){ + arrayList.add(i); + } + System.out.println(arrayList.size()); + } + +} diff --git a/group16/1325756593/src/com/dong/week1/BinaryTreeNode.java b/group16/1325756593/src/com/dong/week1/BinaryTreeNode.java new file mode 100644 index 0000000000..7fe5033c8c --- /dev/null +++ b/group16/1325756593/src/com/dong/week1/BinaryTreeNode.java @@ -0,0 +1,32 @@ +package com.dong.week1; + +public class BinaryTreeNode { + + private Object data; + private BinaryTreeNode left; + private BinaryTreeNode right; + + 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){ + return null; + } + +} diff --git a/group16/1325756593/src/com/dong/week1/Iterator.java b/group16/1325756593/src/com/dong/week1/Iterator.java new file mode 100644 index 0000000000..9147ab8264 --- /dev/null +++ b/group16/1325756593/src/com/dong/week1/Iterator.java @@ -0,0 +1,7 @@ +package com.dong.week1; + +public interface Iterator { + public boolean hasNext(); + public Object next(); + +} diff --git a/group16/1325756593/src/com/dong/week1/LinkedList.java b/group16/1325756593/src/com/dong/week1/LinkedList.java new file mode 100644 index 0000000000..8291d00756 --- /dev/null +++ b/group16/1325756593/src/com/dong/week1/LinkedList.java @@ -0,0 +1,176 @@ +package com.dong.week1; + + +public class LinkedList implements List { + + private int size = 0; + private Node head; + private Node tail; + + + public void add(Object o){ + //һԪص߼dz򵥣ֻҪжheadǷΪաΪգֱӼӼ + Node node = new Node(o,null); + if(head ==null){ + head =node; + }else{ + tail.next=node; + } + tail=node; + size++; + + } + public void add(int index , Object o){ + if(index < 0){ + throw new ArrayIndexOutOfBoundsException("indexΪ"); + } + if(index > size){ + throw new ArrayIndexOutOfBoundsException("ǰlistΪ"+size+",ȡǣ"+index); + } + if(size==0){ + head=new Node(o, null); + tail=head; + return; + } + if(index==0){ + Node curNode =head; + Node newNode =new Node(o, curNode); + head=newNode; + return; + } + Node curNode =head; + Object retVal = null; + for(int i=0;i= size){ + throw new ArrayIndexOutOfBoundsException("ǰlistΪ"+size+",Ƴǣ"+index); + } + Node curNode = head; + for(int i=0;i= size){ + throw new ArrayIndexOutOfBoundsException("ǰlistΪ"+size+",ȡǣ"+index); + } + Object retVal = null; + if(index==0){ + retVal =head.data; + head=head.next; + return retVal; + } + Node curNode =head; + + for(int i=0;i Date: Fri, 24 Feb 2017 22:38:33 +0800 Subject: [PATCH 092/216] Add README.md --- .../com/ikook/basic_data_structure/README.md | 76 +++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 group18/935542673/Coding/src/com/ikook/basic_data_structure/README.md diff --git a/group18/935542673/Coding/src/com/ikook/basic_data_structure/README.md b/group18/935542673/Coding/src/com/ikook/basic_data_structure/README.md new file mode 100644 index 0000000000..c526f87de5 --- /dev/null +++ b/group18/935542673/Coding/src/com/ikook/basic_data_structure/README.md @@ -0,0 +1,76 @@ +## 2017编程提高社群作业:实现基本的数据结构(2017.2.19) + +1. 实现了ArrayList、LinkedList、Queue(依靠LinkedList实现)、Stack(依靠ArrayList实现) + 1.1 ArrayList实现了一下方法: + + ``` + (1)add(Object): 添加元素到集合; + (2)add(int, Object): 添加元素到集合的指定位置; + (3)size(): 返回集合的大小,类型为 int; + (4)isEmpty(): 判断集合是否为空,类型为 boolean; + (5)get(int): 获取集合指定位置的元素; + (6)remove(int): 删除指定位置的对象; + (7)remove(Object): 删除指定的对象; + (8)set(int, Object): 更改集合中指定位置的元素,并返回原来的对象; + (9)iterator(): 返回一个迭代器的实现类。 + ``` + + 1.2 LinkedList实现了一下方法: + + ``` + (1)addFirst(Object): 在链表头部插入新的元素; + (2)addLast(Object): 在链表尾部插入新的元素; + (3)add(Object): 在链表中插入新的元素; + (4)add(int, Object): 在链表指定位置插入新的元素; + (5)size(): 返回链表的大小,类型为 int; + (6)isEmpty(): 判断链表是否为空,类型为 boolean; + (7)getFirst(): 获取链表头部的元素; + (8)getLast(): 获取链表尾部的元素; + (9)get(int): 获取链表指定位置的元素; + (10)set(int, Object): 更改链表中指定位置的元素,并返回原来的对象。 + (11)removeFirst(): 删除链表头部的元素; + (12)removeLast(int): 删除链表尾部的元素; + (13)remove(Object): 删除指定元素; + (14)remove(int): 删除指定位置的元素; + (15)iterator(): 返回一个迭代器的实现类。 + ``` + + 1.3 Queue实现了一下方法: + + ``` + (1)enQueue(Object): 入队操作; + (2)deQueue(): 出队操作; + (3)size(): 返回队列的长度; + (4)isEmpty(): 判断队列是否为空。 + ``` + + 1.4 Stack实现了一下方法: + + ``` + (1)push(Object):入栈操作; + (2)pop():出栈操作; + (3)getTop():获取栈顶元素; + (4)isEmpty():判断栈是否为空; + (5)size():获取栈的深度。 + ``` + +2. 实现了BinarySearchTree、Iterator接口 + 1.1 BinarySearchTree实现了一下方法: + + ``` + (1)insert(int):插入操作; + (2)find(int):查找操作; + (3)delete(int):删除操作; + (4)inorderTraverse(Node):遍历操作,采用中序遍历。 + ``` + + 1.2 Iterator定义了一下方法: + + ``` + (1)hasNext():判断是否有元素没有被遍历; + (2)next():返回游标当前位置的元素并将游标移动到下一个位置; + (3)remove():删除游标左边的元素,在执行完 next 之后该操作只能执行一次。 + ``` + +3. 对应以上类做了单元测试 + 说明:由于作业以实现基本的数据结构为主,则在实现单元测试时,只对正常情况进行了测试,一些异常情况并进行编写测试用例。 \ No newline at end of file From b823370c5f5742d21ec9389a5d77269b24638cb9 Mon Sep 17 00:00:00 2001 From: ikook <935542673@qq.com> Date: Fri, 24 Feb 2017 22:40:33 +0800 Subject: [PATCH 093/216] Update README.md --- .../Coding/src/com/ikook/basic_data_structure/README.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/group18/935542673/Coding/src/com/ikook/basic_data_structure/README.md b/group18/935542673/Coding/src/com/ikook/basic_data_structure/README.md index c526f87de5..8896cf4f36 100644 --- a/group18/935542673/Coding/src/com/ikook/basic_data_structure/README.md +++ b/group18/935542673/Coding/src/com/ikook/basic_data_structure/README.md @@ -1,6 +1,9 @@ ## 2017编程提高社群作业:实现基本的数据结构(2017.2.19) 1. 实现了ArrayList、LinkedList、Queue(依靠LinkedList实现)、Stack(依靠ArrayList实现) + + ​ + 1.1 ArrayList实现了一下方法: ``` @@ -55,6 +58,9 @@ ``` 2. 实现了BinarySearchTree、Iterator接口 + + ​ + 1.1 BinarySearchTree实现了一下方法: ``` @@ -73,4 +79,7 @@ ``` 3. 对应以上类做了单元测试 + + ​ + 说明:由于作业以实现基本的数据结构为主,则在实现单元测试时,只对正常情况进行了测试,一些异常情况并进行编写测试用例。 \ No newline at end of file From 573356bac26651969a9df8d57491cb4c1e4cb632 Mon Sep 17 00:00:00 2001 From: ikook <935542673@qq.com> Date: Fri, 24 Feb 2017 22:44:33 +0800 Subject: [PATCH 094/216] Update README.md --- .../com/ikook/basic_data_structure/README.md | 20 ++++++++----------- 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/group18/935542673/Coding/src/com/ikook/basic_data_structure/README.md b/group18/935542673/Coding/src/com/ikook/basic_data_structure/README.md index 8896cf4f36..17ef17d9e8 100644 --- a/group18/935542673/Coding/src/com/ikook/basic_data_structure/README.md +++ b/group18/935542673/Coding/src/com/ikook/basic_data_structure/README.md @@ -2,9 +2,7 @@ 1. 实现了ArrayList、LinkedList、Queue(依靠LinkedList实现)、Stack(依靠ArrayList实现) - ​ - - 1.1 ArrayList实现了一下方法: + - ArrayList实现了一下方法: ``` (1)add(Object): 添加元素到集合; @@ -18,7 +16,7 @@ (9)iterator(): 返回一个迭代器的实现类。 ``` - 1.2 LinkedList实现了一下方法: + - LinkedList实现了一下方法: ``` (1)addFirst(Object): 在链表头部插入新的元素; @@ -38,7 +36,7 @@ (15)iterator(): 返回一个迭代器的实现类。 ``` - 1.3 Queue实现了一下方法: + - Queue实现了一下方法: ``` (1)enQueue(Object): 入队操作; @@ -47,7 +45,7 @@ (4)isEmpty(): 判断队列是否为空。 ``` - 1.4 Stack实现了一下方法: + - Stack实现了一下方法: ``` (1)push(Object):入栈操作; @@ -56,12 +54,11 @@ (4)isEmpty():判断栈是否为空; (5)size():获取栈的深度。 ``` + ​ 2. 实现了BinarySearchTree、Iterator接口 - ​ - - 1.1 BinarySearchTree实现了一下方法: + - BinarySearchTree实现了一下方法: ``` (1)insert(int):插入操作; @@ -70,16 +67,15 @@ (4)inorderTraverse(Node):遍历操作,采用中序遍历。 ``` - 1.2 Iterator定义了一下方法: + - Iterator定义了一下方法: ``` (1)hasNext():判断是否有元素没有被遍历; (2)next():返回游标当前位置的元素并将游标移动到下一个位置; (3)remove():删除游标左边的元素,在执行完 next 之后该操作只能执行一次。 ``` + ​ 3. 对应以上类做了单元测试 - ​ - 说明:由于作业以实现基本的数据结构为主,则在实现单元测试时,只对正常情况进行了测试,一些异常情况并进行编写测试用例。 \ No newline at end of file From 3867bd205bf3fb2e35a39db3f85950bea87c4f38 Mon Sep 17 00:00:00 2001 From: ikook <935542673@qq.com> Date: Fri, 24 Feb 2017 22:45:54 +0800 Subject: [PATCH 095/216] Update README.md --- .../Coding/src/com/ikook/basic_data_structure/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/group18/935542673/Coding/src/com/ikook/basic_data_structure/README.md b/group18/935542673/Coding/src/com/ikook/basic_data_structure/README.md index 17ef17d9e8..ff6df1d714 100644 --- a/group18/935542673/Coding/src/com/ikook/basic_data_structure/README.md +++ b/group18/935542673/Coding/src/com/ikook/basic_data_structure/README.md @@ -2,7 +2,7 @@ 1. 实现了ArrayList、LinkedList、Queue(依靠LinkedList实现)、Stack(依靠ArrayList实现) - - ArrayList实现了一下方法: + 1.1 ArrayList实现了一下方法: ``` (1)add(Object): 添加元素到集合; @@ -16,7 +16,7 @@ (9)iterator(): 返回一个迭代器的实现类。 ``` - - LinkedList实现了一下方法: + 1.2 LinkedList实现了一下方法: ``` (1)addFirst(Object): 在链表头部插入新的元素; From f6c5754f27ae481a3a303402cece035453fcdb18 Mon Sep 17 00:00:00 2001 From: ikook <935542673@qq.com> Date: Fri, 24 Feb 2017 22:47:40 +0800 Subject: [PATCH 096/216] Update README.md --- .../src/com/ikook/basic_data_structure/README.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/group18/935542673/Coding/src/com/ikook/basic_data_structure/README.md b/group18/935542673/Coding/src/com/ikook/basic_data_structure/README.md index ff6df1d714..26fc21ba1f 100644 --- a/group18/935542673/Coding/src/com/ikook/basic_data_structure/README.md +++ b/group18/935542673/Coding/src/com/ikook/basic_data_structure/README.md @@ -2,7 +2,7 @@ 1. 实现了ArrayList、LinkedList、Queue(依靠LinkedList实现)、Stack(依靠ArrayList实现) - 1.1 ArrayList实现了一下方法: + 1.1 ArrayList实现了一下方法: ``` (1)add(Object): 添加元素到集合; @@ -16,7 +16,7 @@ (9)iterator(): 返回一个迭代器的实现类。 ``` - 1.2 LinkedList实现了一下方法: + 1.2 LinkedList实现了一下方法: ``` (1)addFirst(Object): 在链表头部插入新的元素; @@ -36,7 +36,7 @@ (15)iterator(): 返回一个迭代器的实现类。 ``` - - Queue实现了一下方法: + 1.3 Queue实现了一下方法: ``` (1)enQueue(Object): 入队操作; @@ -45,7 +45,7 @@ (4)isEmpty(): 判断队列是否为空。 ``` - - Stack实现了一下方法: + 1.4 Stack实现了一下方法: ``` (1)push(Object):入栈操作; @@ -58,7 +58,7 @@ 2. 实现了BinarySearchTree、Iterator接口 - - BinarySearchTree实现了一下方法: + 2.1 BinarySearchTree实现了一下方法: ``` (1)insert(int):插入操作; @@ -67,7 +67,7 @@ (4)inorderTraverse(Node):遍历操作,采用中序遍历。 ``` - - Iterator定义了一下方法: + 2.2 Iterator定义了一下方法: ``` (1)hasNext():判断是否有元素没有被遍历; From 40887ad6a8022f2328977a448152a07a7ee2582e Mon Sep 17 00:00:00 2001 From: leijing Date: Fri, 24 Feb 2017 22:51:00 +0800 Subject: [PATCH 097/216] add add --- .../firstHomeWork/util/BinaryTreeNode.java | 31 ++ .../firstHomeWork/util/DoubleLinkedList.java | 335 ++++++++++++++++++ .../src/firstHomeWork/util/Queue.java | 59 +++ .../src/firstHomeWork/util/Stack.java | 23 ++ 4 files changed, 448 insertions(+) create mode 100644 group07/764189149/src/firstHomeWork/util/BinaryTreeNode.java create mode 100644 group07/764189149/src/firstHomeWork/util/DoubleLinkedList.java create mode 100644 group07/764189149/src/firstHomeWork/util/Queue.java create mode 100644 group07/764189149/src/firstHomeWork/util/Stack.java diff --git a/group07/764189149/src/firstHomeWork/util/BinaryTreeNode.java b/group07/764189149/src/firstHomeWork/util/BinaryTreeNode.java new file mode 100644 index 0000000000..c7e85d4915 --- /dev/null +++ b/group07/764189149/src/firstHomeWork/util/BinaryTreeNode.java @@ -0,0 +1,31 @@ +package firstHomeWork.util; +public class BinaryTreeNode { + + private Object data; + private BinaryTreeNode left; + private BinaryTreeNode right; + + 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){ + return null; + } + +} diff --git a/group07/764189149/src/firstHomeWork/util/DoubleLinkedList.java b/group07/764189149/src/firstHomeWork/util/DoubleLinkedList.java new file mode 100644 index 0000000000..9e83297a46 --- /dev/null +++ b/group07/764189149/src/firstHomeWork/util/DoubleLinkedList.java @@ -0,0 +1,335 @@ +package firstHomeWork.util; + +import java.util.NoSuchElementException; + +/** + * @Description: 双向链表 + * @author: leijing + * @date: 2017年2月24日 上午11:37:58 + * @param + */ +public class DoubleLinkedList { + + private int size;//节点个数 + private Node head;//头节点 + private Node tail;//尾节点 + + public Node getHead() { + return head; + } + public void setHead(Node head) { + this.head = head; + } + public Node getTail() { + return tail; + } + public void setTail(Node tail) { + this.tail = tail; + } + /** + * @Description: 添加元素到头部 + * @param e + * @return: boolean + * @author: leijing + * @date: 2017年2月24日 上午11:38:20 + */ + public boolean addFirst(E e) { + Node node = new Node(e); + if(null == head){ + node.prev = null; + head = node; + tail = head; + }else{ + node.next = head; + head.prev = node; + head = node; + } + size++; + return true; + } + /** + * @Description: 添加元素到尾部 + * @param e + * @return: boolean + * @author: leijing + * @date: 2017年2月24日 上午11:38:20 + */ + public boolean addLast(E e) { + Node node = new Node(e); + if(null == tail){ + tail.next = null; + tail = node; + head = tail; + }else{ + tail.next = node; + node.prev = tail; + tail = node; + } + size++; + return true; + } + + public boolean remove(E o) throws Exception { + if(isEmpty()){ + throw new Exception("链表为空,没有元素可以删除"); + } + Node current = head;//从头节点开始删 + if(o == null){ + while(current != null){ + if(current.data == null){ + current.prev.next = current.next;//将当前节点的前驱节点的后继节点改为当前节点的后继 + current.next.prev = current.prev;//将当前节点后继节点的前驱节点改为当前节点的前驱节点 + current.next = null;//当前节点的前驱改为null + current.prev = null;//当前节点的后继改为null + size--; + return true; + } + current = current.next; + } + }else{ + while(current != null){ + if(o.equals(current.data)){ + current.prev.next = current.next;//将当前节点的前驱节点的后继节点改为当前节点的后继 + current.next.prev = current.prev;//将当前节点后继节点的前驱节点改为当前节点的前驱节点 + current.next = null;//当前节点的前驱改为null + current.prev = null;//当前节点的后继改为null + size--; + return true; + } + current = current.next; + } + } + + return false; + } + + /** + * @Description: 返回元素个数 + * @return: int + * @author: leijing + * @date: 2017年2月24日 上午11:38:20 + */ + public int size() { + return size; + } + /** + * @Description: 是否空链表 + * @return: boolean + * @author: leijing + * @date: 2017年2月24日 上午11:38:20 + */ + public boolean isEmpty() { + return size == 0; + } + /** + * @Description: 检查下标有效性 + * @param index + * @return: void + * @author: leijing + * @date: 2017年2月24日 上午11:40:15 + */ + private void rangeCheck(int index){ + if(index < 0 || index > size){ + throw new IndexOutOfBoundsException(); + } + } + public E get(int index) { + rangeCheck(index); + Node current = head;//从头节点开始 + int i = 0; + while(current != null){ + if(i == index){ + return current.data; + } + current = current.next; + i++; + } + return null; + } + public Node node(int index) { + rangeCheck(index); + if(index < size >> 1){//小于元素大小的二分之一,从头节点开始遍历 + Node current = head;//从头节点开始 + for(int i = 0 ; i < index ; i++){ + current = current.next; + } + return (Node)current; + }else{//从尾节点开始遍历 + Node current = tail;//从尾节点开始 + for(int i = 0 ; i < index ; i++){ + current = current.prev; + } + return (Node)current; + } + } + /** + * @Description: 设置某个位置的元素 + * @param index + * @param data + * @return: E + * @author: leijing + * @date: 2017年2月24日 上午11:58:32 + */ + public E set(int index, E data) { + rangeCheck(index); + Node current = head;//从头节点开始 + int i = 0; + while(current != null){ + if(i == index){ + Node node = new Node(data); + Node prev = current.prev; + prev.next = node; + node.prev = prev; + node.next = current; + current.prev = node; + size++; + return data; + } + current = current.next; + i++; + } + return null; + } + /** + * @Description: 判断是否包含某个元素 + * @param o + * @throws Exception + * @return: boolean + * @author: leijing + * @date: 2017年2月24日 上午11:57:35 + */ + public boolean contains(Object o) throws Exception { + if(isEmpty()){ + throw new Exception("链表为空,没有任何元素"); + } + Node current = head;//从头节点开始找 + if(o == null){ + while(current != null){ + if(current.data == null){ + return true; + } + current = current.next; + } + }else{ + while(current != null){ + if(o.equals(current.data)){ + return true; + } + current = current.next; + } + } + return false; + } + /** + * @Description: 清空链表,删除所有元素 + * @return: void + * @author: leijing + * @date: 2017年2月24日 下午4:41:56 + */ + public void clear() { + Node current = head;//从头节点开始遍历 + while(current != null){ + Node tmp = current; + current = current.next; + tmp.prev = null; + tmp.next = null; + } + size = 0; + } + + public Iterator iterator() { + return new ListItr(0); + } + private class ListItr implements Iterator{ + private Node lastReturned = null;//当前的节点 + private Node next;//下一个节点 + private int nextIndex;//当前索引的下标 + + public ListItr(int nextIndex){ + next = (nextIndex == size) ? null : node(nextIndex); + } + + @Override + public boolean hasNext() { + return nextIndex < size; + } + + @Override + public E next() { + if (!hasNext()){ + throw new NoSuchElementException(); + } + + lastReturned = next; + next = next.next; + nextIndex++; + return lastReturned.data; + } + + @Override + public void remove() { + if (lastReturned == null){ + throw new IllegalStateException(); + } + + if(lastReturned == next){//tail node + lastReturned.prev.next = null; + lastReturned.prev = null; + }else{ + lastReturned.prev.next = lastReturned.next; + lastReturned.next.prev = lastReturned.prev; + lastReturned.next = null; + lastReturned.prev = null; + } + nextIndex--; + } + + public boolean hasPrev(){ + return nextIndex > 0; + } + + public E prev(){ + if(!hasPrev()){ + throw new NoSuchElementException(); + } + next = lastReturned = (next == null ) ? tail : next.prev;//如果是头节点,前一个指向尾节点 + nextIndex--; + return lastReturned.data; + } + + } + + static class Node{ + private E data; + private Node prev;//前驱节点 + private Node next;//后继节点 + + public Node(E data){ + this.data = data; + } + + public E getData() { + return data; + } + + public void setData(E data) { + this.data = data; + } + + public Node getPrev() { + return prev; + } + + public void setPrev(Node prev) { + this.prev = prev; + } + + public Node getNext() { + return next; + } + + public void setNext(Node next) { + this.next = next; + } + } +} diff --git a/group07/764189149/src/firstHomeWork/util/Queue.java b/group07/764189149/src/firstHomeWork/util/Queue.java new file mode 100644 index 0000000000..78185c3ae8 --- /dev/null +++ b/group07/764189149/src/firstHomeWork/util/Queue.java @@ -0,0 +1,59 @@ +package firstHomeWork.util; + +/** + * @Description: 循环队列 + * @author: leijing + * @date: 2017年2月24日 下午9:00:30 + * @param + */ +public class Queue { + private Object[] queue; + private int capacity; + private static int INITIAL_CAPACITY = 10; + private int front; //队头 + private int rear; //队尾 + + public Queue(int capacity){ + this.capacity = capacity; + this.front = 0; + this.rear = 0; + queue = new Object[capacity]; + } + public Queue(){ + this(INITIAL_CAPACITY); + } + + public boolean enQueue(E e) throws Exception{ + if(isFull()){ + return false; + } + if(rear == capacity - 1){//循环利用 + rear = 0; + } + queue[rear++] = e; + return true; + } + + public E deQueue(){ + if(isEmpty()){ + return null; + } + if(front == capacity - 1){ + front = 0; + } + + return (E) queue[front++]; + } + + public boolean isEmpty(){ + return front == rear; + } + + public int size(){ + return Math.abs(rear - front) + 1; + } + + public boolean isFull(){ + return (rear + 1) % capacity == front; + } +} diff --git a/group07/764189149/src/firstHomeWork/util/Stack.java b/group07/764189149/src/firstHomeWork/util/Stack.java new file mode 100644 index 0000000000..00dc784170 --- /dev/null +++ b/group07/764189149/src/firstHomeWork/util/Stack.java @@ -0,0 +1,23 @@ +package firstHomeWork.util; + +import java.util.Queue; + +public class Stack { + private ArrayList elementData = new ArrayList(); + public void push(Object o){ + } + + public Object pop(){ + return null; + } + + public Object peek(){ + return null; + } + public boolean isEmpty(){ + return false; + } + public int size(){ + return -1; + } +} From 8a6fbe1d5455c9d1c474cf032b57c5c495468d52 Mon Sep 17 00:00:00 2001 From: ikook <935542673@qq.com> Date: Fri, 24 Feb 2017 22:57:13 +0800 Subject: [PATCH 098/216] Update README.md --- .../Coding/src/com/ikook/basic_data_structure/README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/group18/935542673/Coding/src/com/ikook/basic_data_structure/README.md b/group18/935542673/Coding/src/com/ikook/basic_data_structure/README.md index 26fc21ba1f..a565fb7148 100644 --- a/group18/935542673/Coding/src/com/ikook/basic_data_structure/README.md +++ b/group18/935542673/Coding/src/com/ikook/basic_data_structure/README.md @@ -78,4 +78,6 @@ 3. 对应以上类做了单元测试 - 说明:由于作业以实现基本的数据结构为主,则在实现单元测试时,只对正常情况进行了测试,一些异常情况并进行编写测试用例。 \ No newline at end of file + 说明:由于作业以实现基本的数据结构为主,则在实现单元测试时,只对正常情况进行了测试,一些异常情况并进行编写测试用例。 + + 点击查看: [unit test](https://github.com/china-kook/coding2017/tree/master/group18/935542673/Coding/junit/com/ikook/basic_data_structure) \ No newline at end of file From fb8a52f03090751a62abd78598241d88acebbd6e Mon Sep 17 00:00:00 2001 From: dongqihust Date: Fri, 24 Feb 2017 23:19:10 +0800 Subject: [PATCH 099/216] =?UTF-8?q?=E8=BF=AD=E4=BB=A3=E5=99=A8=E6=8F=90?= =?UTF-8?q?=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/com/dong/week1/ArrayList.java | 40 +++++++++++++++- .../src/com/dong/week1/LinkedList.java | 48 +++++++++++++++---- 2 files changed, 79 insertions(+), 9 deletions(-) diff --git a/group16/1325756593/src/com/dong/week1/ArrayList.java b/group16/1325756593/src/com/dong/week1/ArrayList.java index a1477a8dcc..a700aecfb5 100644 --- a/group16/1325756593/src/com/dong/week1/ArrayList.java +++ b/group16/1325756593/src/com/dong/week1/ArrayList.java @@ -60,7 +60,7 @@ public int size(){ } public Iterator iterator(){ - return null; + return new IteratorArrayList(this); } @Override public String toString() { @@ -68,4 +68,42 @@ public String toString() { } + private class IteratorArrayList implements Iterator{ + + private ArrayList arrayList; + private int index=0; + + + public IteratorArrayList(ArrayList arrayList) { + super(); + this.arrayList = arrayList; + } + + @Override + public boolean hasNext() { + // TODO Auto-generated method stub + return this.arrayList.size() >index; + } + + @Override + public Object next() { + // TODO Auto-generated method stub + if(hasNext()){ + return this.arrayList.get(index++); + } + return null; + } + + } + + public static void main(String[] args) { + ArrayList arrayList= new ArrayList(); + + Iterator iterator= arrayList.iterator(); + while(iterator.hasNext()){ + System.out.println(iterator.next()); + } + } + + } diff --git a/group16/1325756593/src/com/dong/week1/LinkedList.java b/group16/1325756593/src/com/dong/week1/LinkedList.java index 8291d00756..339b5862ee 100644 --- a/group16/1325756593/src/com/dong/week1/LinkedList.java +++ b/group16/1325756593/src/com/dong/week1/LinkedList.java @@ -1,6 +1,5 @@ package com.dong.week1; - public class LinkedList implements List { private int size = 0; @@ -141,7 +140,7 @@ public Object removeLast(){ return retVal; } public Iterator iterator(){ - return null; + return new IteratorArrayLinkedList(this); } @@ -166,11 +165,44 @@ public String toString() { public String toString() { return "LinkedList [size=" + size + ", head=" + head + ", tail=" + tail + "]"; } + + + private class IteratorArrayLinkedList implements Iterator{ + private LinkedList list; + private int index = 0; + + + + + public IteratorArrayLinkedList(LinkedList list) { + super(); + this.list = list; + } + + @Override + public boolean hasNext() { + // TODO Auto-generated method stub + return this.list.size() >index; + } + + @Override + public Object next() { + // TODO Auto-generated method stub + if(hasNext()){ + return this.list.get(index++); + } + return null; + } +} public static void main(String[] args) { - LinkedList list = new LinkedList(); - // System.out.println(list.size); - list.add(1); - list.add(2); - System.out.println(list.removeFirst()); - } + + LinkedList arrayList= new LinkedList(); + + Iterator iterator= arrayList.iterator(); + while(iterator.hasNext()){ + System.out.println(iterator.next()); + } + +} + } From a0ebef1356f96686a79317445eef931fc5bb967e Mon Sep 17 00:00:00 2001 From: dongqihust Date: Fri, 24 Feb 2017 23:37:14 +0800 Subject: [PATCH 100/216] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E8=BF=AD=E4=BB=A3?= =?UTF-8?q?=E5=99=A8=E7=9A=84=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/com/dong/week1/BinaryTreeNode.java | 53 +++++++++++-------- 1 file changed, 30 insertions(+), 23 deletions(-) diff --git a/group16/1325756593/src/com/dong/week1/BinaryTreeNode.java b/group16/1325756593/src/com/dong/week1/BinaryTreeNode.java index 7fe5033c8c..ef41ced8df 100644 --- a/group16/1325756593/src/com/dong/week1/BinaryTreeNode.java +++ b/group16/1325756593/src/com/dong/week1/BinaryTreeNode.java @@ -1,32 +1,39 @@ package com.dong.week1; public class BinaryTreeNode { + private TreeNode node; + + private static class TreeNode{ + private int key=0; + private TreeNode leftChild=null; + private TreeNode rightChild=null; + + public TreeNode(){} + + /** + * @param key + * @param data + */ + public TreeNode(int key){ + this.key=key; + this.leftChild=null; + this.rightChild=null; + } + + + } - private Object data; - private BinaryTreeNode left; - private BinaryTreeNode right; - 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){ - return null; + public TreeNode insert(TreeNode o){ + if(node == null){ + return o; + } + if(node.key > o.key){ + return insert(o.leftChild); + }else{ + return insert(node.leftChild); + } } } From 62eae1c9a5dcfeffb3e3f435629e8d1c6ef10bf1 Mon Sep 17 00:00:00 2001 From: sshfuture Date: Sat, 25 Feb 2017 00:11:06 +0800 Subject: [PATCH 101/216] group 18 744888802 submit task --- group18/744888802/dataStructure/pom.xml | 24 ++ .../main/java/com/coding/basic/ArrayList.java | 109 ++++++++ .../java/com/coding/basic/BinaryTreeNode.java | 84 +++++++ .../main/java/com/coding/basic/Iterator.java | 7 + .../java/com/coding/basic/LinkedList.java | 237 ++++++++++++++++++ .../src/main/java/com/coding/basic/List.java | 13 + .../src/main/java/com/coding/basic/Queue.java | 21 ++ .../src/main/java/com/coding/basic/Stack.java | 47 ++++ .../main/java/com/coding/basic/TestMain.java | 29 +++ 9 files changed, 571 insertions(+) create mode 100644 group18/744888802/dataStructure/pom.xml create mode 100644 group18/744888802/dataStructure/src/main/java/com/coding/basic/ArrayList.java create mode 100644 group18/744888802/dataStructure/src/main/java/com/coding/basic/BinaryTreeNode.java create mode 100644 group18/744888802/dataStructure/src/main/java/com/coding/basic/Iterator.java create mode 100644 group18/744888802/dataStructure/src/main/java/com/coding/basic/LinkedList.java create mode 100644 group18/744888802/dataStructure/src/main/java/com/coding/basic/List.java create mode 100644 group18/744888802/dataStructure/src/main/java/com/coding/basic/Queue.java create mode 100644 group18/744888802/dataStructure/src/main/java/com/coding/basic/Stack.java create mode 100644 group18/744888802/dataStructure/src/main/java/com/coding/basic/TestMain.java diff --git a/group18/744888802/dataStructure/pom.xml b/group18/744888802/dataStructure/pom.xml new file mode 100644 index 0000000000..3b262d6184 --- /dev/null +++ b/group18/744888802/dataStructure/pom.xml @@ -0,0 +1,24 @@ + + + 4.0.0 + + dataStructure + dataStructure + 1.0-SNAPSHOT + + + + org.apache.maven.plugins + maven-compiler-plugin + + 1.6 + 1.6 + + + + + + + \ No newline at end of file diff --git a/group18/744888802/dataStructure/src/main/java/com/coding/basic/ArrayList.java b/group18/744888802/dataStructure/src/main/java/com/coding/basic/ArrayList.java new file mode 100644 index 0000000000..728edc3500 --- /dev/null +++ b/group18/744888802/dataStructure/src/main/java/com/coding/basic/ArrayList.java @@ -0,0 +1,109 @@ +package com.coding.basic; + +import java.util.Arrays; + +public class ArrayList implements List { + + private int size = 0; + + //每次增加的长度 + private Integer addArrayLength = 10; + //初始 数组长度 + private Object[] elementData = new Object[10]; + + public void add(Object o){ + if(size < elementData.length) + { + elementData[size]=o; + }else{ + //扩容数组 + grow(); + elementData[size] = 0; + } + size++; + + } + public void add(int index, Object o){ + if(index>size) + { + throw new RuntimeException("ArrayIndexOutOfBoundsException"); + } + + //截取索引开始到原数组结尾 组成一个新的数组 + Object [] tempObjs = Arrays.copyOfRange(elementData,index,elementData.length); + //覆盖原有索引位置的对象 + elementData[index] = o; + //数组扩容 + elementData = Arrays.copyOf(elementData,elementData.length+1); + + //将临时生成的数组合并回原数组 + System.arraycopy(tempObjs,0,elementData,index+1,tempObjs.length); + size++; + } + + + public Object get(int index){ + return elementData[index]; + } + + public Object remove(int index){ + + if(index>size) + { + throw new RuntimeException("ArrayIndexOutOfBoundsException"); + } + + Object o = elementData[index]; + + //截取索引开始到原数组结尾 组成一个新的数组 + Object [] tempObjs = Arrays.copyOfRange(elementData,index+1,elementData.length); + elementData = Arrays.copyOf(elementData,elementData.length-1); + //将临时生成的数组合并回原数组 + System.arraycopy(tempObjs,0,elementData,index,tempObjs.length); + size--; + + return o; + } + + public int size(){ + return this.size; + } + + public Iterator iterator(){ + ArratListIterator arratListIterator = new ArratListIterator(this); + + return arratListIterator; + } + + private void grow(){ + elementData = Arrays.copyOf(elementData,elementData.length+addArrayLength); + } + + class ArratListIterator implements Iterator{ + + ArrayList arrayList = new ArrayList(); + + int index = 0; + + ArratListIterator(ArrayList arrayList){ + + this.arrayList = arrayList; + index = arrayList.size; + } + + @Override + public boolean hasNext() { + if(index == 0) + { + return false; + } + return true; + } + + @Override + public Object next() { + return this.arrayList.get(--index); + } + } + +} diff --git a/group18/744888802/dataStructure/src/main/java/com/coding/basic/BinaryTreeNode.java b/group18/744888802/dataStructure/src/main/java/com/coding/basic/BinaryTreeNode.java new file mode 100644 index 0000000000..8fc6e03297 --- /dev/null +++ b/group18/744888802/dataStructure/src/main/java/com/coding/basic/BinaryTreeNode.java @@ -0,0 +1,84 @@ +package com.coding.basic; + +public class BinaryTreeNode { + + private Object data; + private BinaryTreeNode left; + private BinaryTreeNode right; + + 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) { + + BinaryTreeNode binaryTreeNode = new BinaryTreeNode(); + binaryTreeNode.data = o; + + add(this, binaryTreeNode); + return this; + } + + private void add(BinaryTreeNode binaryTreeNodeOld, BinaryTreeNode binaryTreeNodeNew) { + if (binaryTreeNodeOld.data == null) { + binaryTreeNodeOld.data = binaryTreeNodeNew.data; + return; + } + + + if (binaryTreeNodeOld.left == null) { + binaryTreeNodeOld.left = binaryTreeNodeNew; + return; + } + if (binaryTreeNodeOld.right == null) { + if (comparator(binaryTreeNodeNew, binaryTreeNodeOld.left)){ + binaryTreeNodeOld.right = binaryTreeNodeNew; + }else{ + binaryTreeNodeOld.right = binaryTreeNodeOld.left; + binaryTreeNodeOld.left = binaryTreeNodeNew; + } + return; + } + + if(comparator(binaryTreeNodeOld.left, binaryTreeNodeNew)) + { + add(binaryTreeNodeOld.left,binaryTreeNodeNew); + return; + } + + if(comparator(binaryTreeNodeOld.right, binaryTreeNodeNew)){ + add(binaryTreeNodeOld.right,binaryTreeNodeNew); + return; + }else{ + binaryTreeNodeNew.left = binaryTreeNodeOld.right; + binaryTreeNodeOld.right = binaryTreeNodeNew; + } + + + + + } + + private boolean comparator(BinaryTreeNode binaryTreeNode1, BinaryTreeNode binaryTreeNode2) { + if ((Integer) binaryTreeNode1.getData() > (Integer) binaryTreeNode2.getData()) { + return true; + } + return false; + } + +} diff --git a/group18/744888802/dataStructure/src/main/java/com/coding/basic/Iterator.java b/group18/744888802/dataStructure/src/main/java/com/coding/basic/Iterator.java new file mode 100644 index 0000000000..06ef6311b2 --- /dev/null +++ b/group18/744888802/dataStructure/src/main/java/com/coding/basic/Iterator.java @@ -0,0 +1,7 @@ +package com.coding.basic; + +public interface Iterator { + public boolean hasNext(); + public Object next(); + +} diff --git a/group18/744888802/dataStructure/src/main/java/com/coding/basic/LinkedList.java b/group18/744888802/dataStructure/src/main/java/com/coding/basic/LinkedList.java new file mode 100644 index 0000000000..098246a4bb --- /dev/null +++ b/group18/744888802/dataStructure/src/main/java/com/coding/basic/LinkedList.java @@ -0,0 +1,237 @@ +package com.coding.basic; + +public class LinkedList implements List { + + private Node head; + private Node last; + + private int size = 0; + + public void add(Object o){ + addLast(o); + + } + public void add(int index , Object o){ + + Node node = new Node(); + node.data = o; + if(size == 0) + { + throw new NullPointerException(" linked list is null"); + } + if(index == 0) + { + node.next=head; + head = node; + } + Node nodeNow = head; + for(int i=1;i=size) + { + throw new IndexOutOfBoundsException(" this index too big by this list"); + } + + Node nodeNow = head; + for(int i=0;i=size) + { + throw new IndexOutOfBoundsException(" this index too big by this list"); + } + if(size == 0) + { + throw new NullPointerException("linked list is null"); + } + if(index == 0) + { + if(size == 1) + { + size = 0; + return head.data; + } + Object o = head.data; + head.next = null; + + head = head.next; + return o; + + } + Node result = null; + + + Node beforeNode = head; + Node nextNode = head.next; + for(int i=1;i Date: Sat, 25 Feb 2017 09:47:40 +0800 Subject: [PATCH 102/216] =?UTF-8?q?=E5=9F=BA=E6=9C=AC=E7=9A=84=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/xuyangyang/util/MyArrayList.java | 113 +++++++ .../com/xuyangyang/util/MyIterator.java | 8 + .../com/xuyangyang/util/MyLinkedList.java | 277 ++++++++++++++++++ .../com/xuyangyang/util/MyList.java | 14 + .../com/xuyangyang/util/MyQueueArray.java | 107 +++++++ .../com/xuyangyang/util/MyQueueLinked.java | 139 +++++++++ .../com/xuyangyang/util/MyStack.java | 95 ++++++ .../1425809544/com/xuyangyang/util/Test.java | 29 ++ ...4\347\232\204\345\205\263\347\263\273.txt" | 16 + 9 files changed, 798 insertions(+) create mode 100644 group08/1425809544/com/xuyangyang/util/MyArrayList.java create mode 100644 group08/1425809544/com/xuyangyang/util/MyIterator.java create mode 100644 group08/1425809544/com/xuyangyang/util/MyLinkedList.java create mode 100644 group08/1425809544/com/xuyangyang/util/MyList.java create mode 100644 group08/1425809544/com/xuyangyang/util/MyQueueArray.java create mode 100644 group08/1425809544/com/xuyangyang/util/MyQueueLinked.java create mode 100644 group08/1425809544/com/xuyangyang/util/MyStack.java create mode 100644 group08/1425809544/com/xuyangyang/util/Test.java create mode 100644 "group08/1425809544/cpu \345\206\205\345\255\230 \347\241\254\347\233\230 \345\222\214\346\214\207\344\273\244\347\232\204\345\205\263\347\263\273.txt" diff --git a/group08/1425809544/com/xuyangyang/util/MyArrayList.java b/group08/1425809544/com/xuyangyang/util/MyArrayList.java new file mode 100644 index 0000000000..52036eb78d --- /dev/null +++ b/group08/1425809544/com/xuyangyang/util/MyArrayList.java @@ -0,0 +1,113 @@ +package com; + +import java.util.NoSuchElementException; + +public class MyArrayList implements MyList { + + private static final int DEFAULT_CAPACITY = 10; + private int size; + private Object[] elementData; + + public MyArrayList() { + this.size = 0; + + } + + @Override + public boolean add(Object o) { + // TODO Auto-generated method stub + add(size(), o); + return true; + } + + @Override + public void add(int index, Object o) { + + if (elementData.length == size()) { + ensureCapacity(size() * 2 + 1); + } + + for (int i = size(); i > index; i--) { + elementData[i] = elementData[i - 1]; + } + elementData[2] = o; + size++; + + } + + @Override + public Object get(int index) { + + if (index < 0 || index >= size()) { + throw new ArrayIndexOutOfBoundsException(); + } + + return elementData[index]; + + } + + @Override + public Object remove(int index) { + + if (index < 0 || index >= size()) { + throw new ArrayIndexOutOfBoundsException(); + } + Object value = elementData[index]; + for (int i = index; i < size() - 1; i++) { + elementData[i] = elementData[i + 1]; + } + return value; + + } + + @Override + public int size() { + // TODO Auto-generated method stub + return size; + } + + /** + * + * + * @Author xuyangyang + * @Describe + * @date 2017220 + * @param newCapacity + */ + public void ensureCapacity(int newCapacity) { + if (newCapacity < size) { + return; + } + Object[] old = elementData;// + + elementData = new Object[newCapacity];// µ + + for (int i = 0; i < old.length; i++) { + elementData[i] = old[i]; + } + + } + + private class InnerIterator implements MyIterator { + + private int current = 0; + + public boolean hasNext() { + return current < size(); + } + + @Override + public Object next() { + if (!hasNext()) { + throw new NoSuchElementException(); + } + return elementData[current++]; + } + + public void remove() { + MyArrayList.this.remove(--current); + } + + } + +} diff --git a/group08/1425809544/com/xuyangyang/util/MyIterator.java b/group08/1425809544/com/xuyangyang/util/MyIterator.java new file mode 100644 index 0000000000..1b83f8988d --- /dev/null +++ b/group08/1425809544/com/xuyangyang/util/MyIterator.java @@ -0,0 +1,8 @@ +package com; + +public interface MyIterator { + + public boolean hasNext(); + public Object next(); + +} diff --git a/group08/1425809544/com/xuyangyang/util/MyLinkedList.java b/group08/1425809544/com/xuyangyang/util/MyLinkedList.java new file mode 100644 index 0000000000..3d84ecd268 --- /dev/null +++ b/group08/1425809544/com/xuyangyang/util/MyLinkedList.java @@ -0,0 +1,277 @@ +package com; + +import java.util.NoSuchElementException; + +public class MyLinkedList implements MyList { + + int size = 0; + Node first; + Node last; + + private static class Node { + Object item; + Node next;// ָһڵ + Node prev;// ָһڵ + + Node(Node prev, Object element, Node next) { + this.item = element; + this.next = next; + this.prev = prev; + } + } + + public boolean add(Object o) { + linkLast(o); + return true; + + } + + /** + * Ԫزָ± + * + * @Author xuyangyang + * @Describe + * @date 2017221 + * @param index + * @param o + */ + public void add(int index, Object o) { + checkPositionIndex(index); + if (index == size) { + linkLast(0); + } else { + LinkBefore(o, node(index)); + } + + } + + public void addFirst(Object o) { + linkFirst(o); + } + + public void addLast(Object o) { + linkLast(o); + } + + private void linkFirst(Object o) { + final Node f = first; + final Node newNode = new Node(null, o, f); + first = newNode; + if (first == null) { + first = newNode; + } else { + f.prev = newNode; + } + size++; + + } + + void LinkBefore(Object o, Node succ) { + final Node pred = succ.prev; + final Node newNode = new Node(pred, o, succ);// Ȱ½ڵǰָ븳ֵ + succ.prev = newNode;// Ѳĺһڵǰָָ½ڵ + if (pred == null) { + first = newNode;// ڵǰָΪ,Ϊͷָ + } else { + pred.next = newNode;// ǰһڵĺָָ½ڵ; + } + size++; + } + + /** + * ָ뷵ؽڵϢ + * + * @Author xuyangyang + * @Describe + * @date 2017221 + * @param index + * @return + */ + Node node(int index) { + + if (index < (size >> 1)) {// ڵǰ벿, + Node x = first;// ͷָx; + for (int i = 0; i < index; i++) + // ǰ벿ֽڵ, + x = x.next;// Ѱindexǰһڵ,nextָ + return x; + } else { + Node x = last; + for (int i = size - 1; i > index; i--) + x = x.prev; + return x; + } + } + + /** + * + * + * @Author xuyangyang + * @Describe + * @date 2017221 + * @param o + */ + private void linkLast(Object o) { + final Node l = last; + final Node newNode = new Node(l, o, null); + last = newNode; + if (last == null) { + first = newNode; + } else { + l.next = newNode; + } + size++; + + } + + public Object get(int index) { + checkElementIndex(index); + return node(index).item; + + } + + /** + * ԪǼ + * + * @Author xuyangyang + * @Describe + * @date 2017221 + * @param index + */ + private void checkElementIndex(int index) { + if (index >= 0 && index < size) { + + } else { + throw new IndexOutOfBoundsException(); + } + + } + + /** + * Ԫʱָ + * + * @Author xuyangyang + * @Describe + * @date 2017221 + * @param index + */ + private void checkPositionIndex(int index) { + if (index >= 0 && index <= size) + throw new IndexOutOfBoundsException(); + } + + public boolean reomve(Object o) { + + if (o == null) { + for (Node x = first; x != null; x = x.next) { + if (x.item == null) { + unlink(x); + return true; + } + } + + } else { + for (Node x = first; x != null; x = x.next) { + if (o.equals(x.item)) { + unlink(x); + return true; + } + } + + } + + return false; + + } + + @Override + public Object remove(int index) { + checkElementIndex(index); + return unlink(node(index)); + + } + + private Object unlink(Node x) { + + final Object element = x.item; + final Node next = x.next; + final Node prev = x.prev; + + if (prev == null) { + first = next; + } else { + prev.next = next; + x.prev = null; + } + + if (next == null) { + last = prev; + } else { + next.prev = prev; + x.next = null; + } + + x.item = null; + size--; + return element; + + } + + public Object removeFirst() { + + final Node f = first; + if (f == null) { + throw new NoSuchElementException(); + } + + return unlinkFirst(f); + + } + + private Object unlinkFirst(Node f) { + + final Object element = f.item; + final Node next = f.next; + f.item = null; + f.next = null; + first = next; + if (next == null) { + last = null; + } else { + next.prev = null; + } + size--; + + return element; + } + + public Object removeLast() { + Node l = last; + if (l == null) { + throw new NoSuchElementException(); + } + return unLinkLast(l); + } + + private Object unLinkLast(Node l) { + final Object element = l.item; + final Node prev = l.prev; + last = prev; + l.item = null; + l.prev = null; + if (prev == null) { + first = null; + } else { + prev.next = null; + } + size--; + + return element; + } + + public int size() { + + return size; + } + +} diff --git a/group08/1425809544/com/xuyangyang/util/MyList.java b/group08/1425809544/com/xuyangyang/util/MyList.java new file mode 100644 index 0000000000..8a2c653c8b --- /dev/null +++ b/group08/1425809544/com/xuyangyang/util/MyList.java @@ -0,0 +1,14 @@ +package com; + +public interface MyList { + + public boolean add(Object o); + + public void add(int index, Object o); + + public Object get(int index); + + public int size(); + + public Object remove(int index); +} diff --git a/group08/1425809544/com/xuyangyang/util/MyQueueArray.java b/group08/1425809544/com/xuyangyang/util/MyQueueArray.java new file mode 100644 index 0000000000..248edbce26 --- /dev/null +++ b/group08/1425809544/com/xuyangyang/util/MyQueueArray.java @@ -0,0 +1,107 @@ +package com; + +import java.util.Arrays; + +/** + * ʵֶ + * + * @Author xuyangyang + * @Describe + * @date 2017223 + */ +public class MyQueueArray { + + private int size;// С + private int head;// ͷ + private Object[] elementData;// Ŷе + private int initCapacity = 10;// ʼ + + /** + * ʼ10 + * + * @Author xuyangyang + * @Describe + * @date 2017223 + */ + public MyQueueArray() { + elementData = new Object[initCapacity]; + } + + /** + * ȡдС + * + * @Author xuyangyang + * @Describe + * @date 2017223 + * @return + */ + public int size() { + return size; + } + + /** + * + * + * @Author xuyangyang + * @Describe + * @date 2017223 + * @param o + */ + public void enQueue(Object o) { + if (size + 1 > elementData.length) { + int oldLength = elementData.length; + int newLength = oldLength + oldLength >> 1; + elementData = Arrays.copyOf(elementData, newLength); + } + elementData[size++] = o; + } + + /** + * + * + * @Author xuyangyang + * @Describe + * @date 2017223 + * @return + */ + public Object deQueue() { + if (size == 0) { + throw new NullPointerException(); + } + Object obj = elementData[head]; + elementData[head] = 0; + head++; + size--; + return obj; + } + + /** + * + * + * @Author xuyangyang + * @Describe + * @date 2017223 + * @param args + */ + public static void main(String[] args) { + MyQueueArray myQueue = new MyQueueArray(); + MyQueueLinked myQueueLinked = new MyQueueLinked(); + myQueue.enQueue("1"); + myQueue.enQueue("2"); + myQueue.enQueue("3"); + myQueue.enQueue("4"); + myQueue.enQueue("5"); + myQueue.enQueue("6"); + System.out.println(myQueue.size); + + System.out.println(myQueue.deQueue()); + System.out.println(myQueue.size); + + System.out.println(myQueue.deQueue()); + System.out.println(myQueue.size); + + System.out.println(myQueue.size); + + } + +} diff --git a/group08/1425809544/com/xuyangyang/util/MyQueueLinked.java b/group08/1425809544/com/xuyangyang/util/MyQueueLinked.java new file mode 100644 index 0000000000..5b4f443975 --- /dev/null +++ b/group08/1425809544/com/xuyangyang/util/MyQueueLinked.java @@ -0,0 +1,139 @@ +package com; + +/** + * ʵֶ--- + * + * @Author xuyangyang + * @Describe + * @date 2017223 + */ +public class MyQueueLinked { + + private Node head; + + private Node tail; + // еij + private int size; + + /** + * ضеij + * + * @Author xuyangyang + * @Describe + * @date 2017223 + * @return + */ + public int size() { + return size; + } + + /** + * + * + * @Author xuyangyang + * @Describe + * @date 2017223 + */ + public void enQueue(Object obj) { + + // Ϊ + if (head == null) { + head = new Node(obj, null); + tail = head; + size++; + } else { + Node oldNode = tail; + Node newNode = new Node(obj, null); + tail.next = newNode; + tail = newNode; + size++; + } + + } + + /** + * + * + * @Author xuyangyang + * @Describe + * @date 2017223 + * @return + */ + public Object deQueue() { + + if (head == null) { + throw new NullPointerException(); + } + Object oldNode = head.element; + head = head.next; + size--; + return oldNode; + } + + /** + * ȡɾ + * + * @Author xuyangyang + * @Describe + * @date 2017223 + * @return + */ + public Object peek() { + if (head == null) { + throw new NullPointerException(); + } + return head.element; + } + + /** + * ڵ + * + * @Author xuyangyang + * @Describe + * @date 2017223 + */ + private class Node { + private Object element; + private Node next; + + public Node() { + + } + + public Node(Object element, Node next) { + this.element = element; + this.next = next; + } + + } + + /** + * + * + * @Author xuyangyang + * @Describe + * @date 2017223 + * @param args + */ + public static void main(String[] args) { + MyQueueLinked myQueueLinked = new MyQueueLinked(); + myQueueLinked.enQueue("1"); + myQueueLinked.enQueue("2"); + myQueueLinked.enQueue("3"); + myQueueLinked.enQueue("4"); + myQueueLinked.enQueue("5"); + myQueueLinked.enQueue("6"); + System.out.println(myQueueLinked.size); + + System.out.println(myQueueLinked.deQueue()); + System.out.println(myQueueLinked.size); + + System.out.println(myQueueLinked.deQueue()); + System.out.println(myQueueLinked.size); + + System.out.println(myQueueLinked.peek()); + System.out.println(myQueueLinked.size); + + } + +} diff --git a/group08/1425809544/com/xuyangyang/util/MyStack.java b/group08/1425809544/com/xuyangyang/util/MyStack.java new file mode 100644 index 0000000000..9c0a9a6149 --- /dev/null +++ b/group08/1425809544/com/xuyangyang/util/MyStack.java @@ -0,0 +1,95 @@ +package com; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.EmptyStackException; + +public class MyStack { + + private ArrayList elementDataArrayList = new ArrayList<>(); + + private Object[] elementData; + private int elementCount; + private int size; + + public MyStack() { + this.elementData = new Object[10]; + + } + + public Object push(Object o) { + addElement(o); + return o; + + } + + public void addElement(Object o) { + ensureCapacity(elementCount + 1); + elementData[elementCount++] = o; + } + + private void ensureCapacity(int minCapacity) { + if (minCapacity - elementData.length > 0) { + grow(minCapacity); + } + + } + + private void grow(int minCapacity) { + int oldCapacity = elementData.length; + int newCapacity = oldCapacity + (oldCapacity >> 1); + if (newCapacity - minCapacity < 0) { + newCapacity = minCapacity; + } + elementData = Arrays.copyOf(elementData, newCapacity); + + } + + public synchronized Object pop() { + Object o; + int len = size(); + o = peek(); + removeElement(len - 1); + + return o; + + } + + private void removeElement(int index) { + + if (index >= elementCount) { + throw new ArrayIndexOutOfBoundsException(); + } else if (index < 0) { + throw new ArrayIndexOutOfBoundsException(); + } + int j = elementCount - index - 1; + if (j > 0) { + System.arraycopy(elementData, index + 1, elementData, index, j); + } + elementCount--; + elementData[elementCount] = null; + } + + private Object peek() { + + int len = size(); + if (len == 0) { + throw new EmptyStackException(); + } + return elementAt(len - 1); + + } + + private Object elementAt(int index) { + if (index > +elementCount) { + throw new ArrayIndexOutOfBoundsException(); + } + return elementData[index]; + } + + private int size() { + // TODO Auto-generated method stub + return elementCount; + } + +} diff --git a/group08/1425809544/com/xuyangyang/util/Test.java b/group08/1425809544/com/xuyangyang/util/Test.java new file mode 100644 index 0000000000..0fc81acb8e --- /dev/null +++ b/group08/1425809544/com/xuyangyang/util/Test.java @@ -0,0 +1,29 @@ +package com; + +import java.util.ArrayList; + +public class Test { + + public static void main(String[] args) { + + ArrayList items = new ArrayList<>(); + items.add("1"); + items.add("2"); + items.add("3"); + items.add("4"); + items.add("5"); + items.add("6"); + items.add("7"); + items.add("8"); + items.add("9"); + items.add("10"); + items.add("11"); + items.add("12"); + + + + + + } + +} diff --git "a/group08/1425809544/cpu \345\206\205\345\255\230 \347\241\254\347\233\230 \345\222\214\346\214\207\344\273\244\347\232\204\345\205\263\347\263\273.txt" "b/group08/1425809544/cpu \345\206\205\345\255\230 \347\241\254\347\233\230 \345\222\214\346\214\207\344\273\244\347\232\204\345\205\263\347\263\273.txt" new file mode 100644 index 0000000000..036bb225b0 --- /dev/null +++ "b/group08/1425809544/cpu \345\206\205\345\255\230 \347\241\254\347\233\230 \345\222\214\346\214\207\344\273\244\347\232\204\345\205\263\347\263\273.txt" @@ -0,0 +1,16 @@ + + +CPU 相当于大脑,是由PC(程序计数器),运算器,控制器,寄存器三大部分组成; + 1.cpu从内存读取指令,有pc指定位置,放入指令寄存器; + 2,根据读取到的指令,由运算器执行加减命令, + + 1.程序在cpu,内存和硬盘运行的速度依次递减,由快到慢,同样的他们价格成本由高到底;存储容量也是由大到小; + + 2,cpu和内存中的数据断电后就会消失,硬盘不会消失,所以要把需要长期使用的程序放在硬盘中,程序是由指令组成的, + 当开机后,先加载需要的数据从硬盘中读取放到内存中,有cpu从内存中读取指令,要执行的指令和执行后的结果放入cpu的 + 寄存器中;就相当于原料进机器之前排队一样,把半成品也要在这里放一下,再进去加工,它只是一个临时中转站(寄存器); + + 3.CPU从内存中取出指令,放入指令寄存器,并对指令译码操作控制器,操作指令,指令在cpu中暂存在寄存器中; + 但是,cpu不能直接操作硬盘,所以需要内存,要把硬盘中的数据先加载到内存;内存相当于中转站,内存的速度决定电脑程序运行的速度; + + 有的网络文章形象比喻:“CPU是工厂,硬盘是大仓库,内存是正规中转中心 \ No newline at end of file From d6988d5509bbd98d8813da3c43c1b0a999f645ad Mon Sep 17 00:00:00 2001 From: "haibo.yu" Date: Sat, 25 Feb 2017 10:46:37 +0800 Subject: [PATCH 103/216] update --- .idea/compiler.xml | 16 ++ .../Maven__com_google_guava_guava_19_0.xml | 13 + ...pache_commons_commons_collections4_4_1.xml | 13 + ...__org_apache_commons_commons_lang3_3_5.xml | 13 + .idea/vcs.xml | 6 + group08/286060098/286060098.md | 0 group08/286060098/practice/pom.xml | 66 +++++ group08/286060098/practice/practice.iml | 16 ++ .../first/collection/AbstractCollection.java | 25 ++ .../homework/first/collection/Collection.java | 42 +++ .../homework/first/collection/Iterator.java | 23 ++ .../first/collection/list/ArrayList.java | 166 ++++++++++++ .../first/collection/list/LinkedList.java | 240 ++++++++++++++++++ .../homework/first/collection/list/List.java | 14 + .../first/collection/queue/LinkQueue.java | 202 +++++++++++++++ .../first/collection/queue/Queue.java | 26 ++ .../first/collection/stack/LinkStack.java | 94 +++++++ .../first/collection/stack/Stack.java | 22 ++ .../homework/first/tree/AbstractTree.java | 29 +++ .../homework/first/tree/BinaryNode.java | 40 +++ .../homework/first/tree/BinaryTree.java | 125 +++++++++ .../practice/homework/first/tree/Tree.java | 30 +++ .../com/pop/practice/homework/utils/Math.java | 29 +++ group08/286060098/readme.md | 19 ++ 24 files changed, 1269 insertions(+) create mode 100644 .idea/compiler.xml create mode 100644 .idea/libraries/Maven__com_google_guava_guava_19_0.xml create mode 100644 .idea/libraries/Maven__org_apache_commons_commons_collections4_4_1.xml create mode 100644 .idea/libraries/Maven__org_apache_commons_commons_lang3_3_5.xml create mode 100644 .idea/vcs.xml delete mode 100644 group08/286060098/286060098.md create mode 100644 group08/286060098/practice/pom.xml create mode 100644 group08/286060098/practice/practice.iml create mode 100644 group08/286060098/practice/src/com/pop/practice/homework/first/collection/AbstractCollection.java create mode 100644 group08/286060098/practice/src/com/pop/practice/homework/first/collection/Collection.java create mode 100644 group08/286060098/practice/src/com/pop/practice/homework/first/collection/Iterator.java create mode 100644 group08/286060098/practice/src/com/pop/practice/homework/first/collection/list/ArrayList.java create mode 100644 group08/286060098/practice/src/com/pop/practice/homework/first/collection/list/LinkedList.java create mode 100644 group08/286060098/practice/src/com/pop/practice/homework/first/collection/list/List.java create mode 100644 group08/286060098/practice/src/com/pop/practice/homework/first/collection/queue/LinkQueue.java create mode 100644 group08/286060098/practice/src/com/pop/practice/homework/first/collection/queue/Queue.java create mode 100644 group08/286060098/practice/src/com/pop/practice/homework/first/collection/stack/LinkStack.java create mode 100644 group08/286060098/practice/src/com/pop/practice/homework/first/collection/stack/Stack.java create mode 100644 group08/286060098/practice/src/com/pop/practice/homework/first/tree/AbstractTree.java create mode 100644 group08/286060098/practice/src/com/pop/practice/homework/first/tree/BinaryNode.java create mode 100644 group08/286060098/practice/src/com/pop/practice/homework/first/tree/BinaryTree.java create mode 100644 group08/286060098/practice/src/com/pop/practice/homework/first/tree/Tree.java create mode 100644 group08/286060098/practice/src/com/pop/practice/homework/utils/Math.java create mode 100644 group08/286060098/readme.md diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000000..ac91500eae --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_google_guava_guava_19_0.xml b/.idea/libraries/Maven__com_google_guava_guava_19_0.xml new file mode 100644 index 0000000000..68e23ccd00 --- /dev/null +++ b/.idea/libraries/Maven__com_google_guava_guava_19_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_commons_commons_collections4_4_1.xml b/.idea/libraries/Maven__org_apache_commons_commons_collections4_4_1.xml new file mode 100644 index 0000000000..1e0b53d1fc --- /dev/null +++ b/.idea/libraries/Maven__org_apache_commons_commons_collections4_4_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_commons_commons_lang3_3_5.xml b/.idea/libraries/Maven__org_apache_commons_commons_lang3_3_5.xml new file mode 100644 index 0000000000..666266cc33 --- /dev/null +++ b/.idea/libraries/Maven__org_apache_commons_commons_lang3_3_5.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000000..35eb1ddfbb --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/group08/286060098/286060098.md b/group08/286060098/286060098.md deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/group08/286060098/practice/pom.xml b/group08/286060098/practice/pom.xml new file mode 100644 index 0000000000..66a92317c4 --- /dev/null +++ b/group08/286060098/practice/pom.xml @@ -0,0 +1,66 @@ + + + + practice + com.pop.practice + 1.0.0- + + 4.0.0 + + + 4.1 + 3.5 + 19.0 + + 1.7 + 1.7 + + true + + + + + + org.apache.commons + commons-collections4 + ${commons-collections4.version} + + + + org.apache.commons + commons-lang3 + ${commons-lang3.version} + + + + com.google.guava + guava + ${guava.version} + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + ${jdk.source.version} + ${jdk.target.version} + + + + org.apache.maven.plugins + maven-surefire-plugin + + ${maven-surefire-plugin.skip} + + + + + + + \ No newline at end of file diff --git a/group08/286060098/practice/practice.iml b/group08/286060098/practice/practice.iml new file mode 100644 index 0000000000..d830f4a93e --- /dev/null +++ b/group08/286060098/practice/practice.iml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/group08/286060098/practice/src/com/pop/practice/homework/first/collection/AbstractCollection.java b/group08/286060098/practice/src/com/pop/practice/homework/first/collection/AbstractCollection.java new file mode 100644 index 0000000000..52b095dc23 --- /dev/null +++ b/group08/286060098/practice/src/com/pop/practice/homework/first/collection/AbstractCollection.java @@ -0,0 +1,25 @@ +package com.pop.practice.homework.first.collection; + +/** + * @author haipop Date: 17-2-19 Time: 下午3:40 + */ +public abstract class AbstractCollection implements Collection { + + @Override + @SuppressWarnings("unchecked") + public void addAll(Collection collection) throws IllegalAccessException { + Iterator iterator = collection.iterator(); + while (iterator.hasNext()) { + add((T) iterator.next()); + } + } + + @Override + @SuppressWarnings("unchecked") + public void removeAll(Collection collection) { + Iterator iterator = collection.iterator(); + while (iterator.hasNext()) { + remove((T) iterator.next()); + } + } +} \ No newline at end of file diff --git a/group08/286060098/practice/src/com/pop/practice/homework/first/collection/Collection.java b/group08/286060098/practice/src/com/pop/practice/homework/first/collection/Collection.java new file mode 100644 index 0000000000..9355d7761f --- /dev/null +++ b/group08/286060098/practice/src/com/pop/practice/homework/first/collection/Collection.java @@ -0,0 +1,42 @@ +package com.pop.practice.homework.first.collection; + +/** + * @author haipop Date: 17-2-16 Time: 下午6:35 + */ +public interface Collection extends Iterator { + + /** + * 是否为空 + */ + boolean isEmpty(); + + /** + * 获取大小 + */ + int size(); + + /** + * 添加元素 + */ + void add(T element) throws IllegalAccessException; + + /** + * 批量添加元素 + */ + void addAll(Collection collection) throws IllegalAccessException; + + /** + * 删除元素 + */ + void remove(T element); + + /** + * 批量删除元素 + */ + void removeAll(Collection collection); + + /** + * 元素查找,返回索引,找不到返回-1 + */ + int contain(T element); +} \ No newline at end of file diff --git a/group08/286060098/practice/src/com/pop/practice/homework/first/collection/Iterator.java b/group08/286060098/practice/src/com/pop/practice/homework/first/collection/Iterator.java new file mode 100644 index 0000000000..0bbe4fa605 --- /dev/null +++ b/group08/286060098/practice/src/com/pop/practice/homework/first/collection/Iterator.java @@ -0,0 +1,23 @@ +package com.pop.practice.homework.first.collection; + +/** + * @author haipop Date: 17-2-16 Time: 下午6:34 + */ +public interface Iterator { + + /** + * 实例化 + */ + Iterator iterator(); + + /** + * 是否存在下一个 + */ + boolean hasNext(); + + /** + * 获取下一个元素 + */ + T next(); + +} diff --git a/group08/286060098/practice/src/com/pop/practice/homework/first/collection/list/ArrayList.java b/group08/286060098/practice/src/com/pop/practice/homework/first/collection/list/ArrayList.java new file mode 100644 index 0000000000..9c355cc8b4 --- /dev/null +++ b/group08/286060098/practice/src/com/pop/practice/homework/first/collection/list/ArrayList.java @@ -0,0 +1,166 @@ +package com.pop.practice.homework.first.collection.list; + +import java.io.Serializable; +import java.util.Objects; + +import com.pop.practice.homework.first.collection.AbstractCollection; +import com.pop.practice.homework.first.collection.Iterator; +import com.pop.practice.homework.utils.Math; + +/** + * @author haipop Date: 17-2-16 Time: 下午6:33 + */ +public class ArrayList extends AbstractCollection implements List, Serializable { + + private static final long serialVersionUID = -3408657766857424074L; + + /** + * 阈值 + */ + private static final double THRESHOLD = 0.75F; + + /** + * 大小 + */ + private int size; + + /** + * 当前的存储位置 + */ + private int flag; + + /** + * 元素集合 + */ + private Object[] store; + + /** + * 是否容量自增 + */ + private boolean autoIncrement; + + /** + * 遍历器 + */ + private Iterator iterator; + + /** + * 默认无参 + */ + public ArrayList() { + this.size = 8; + this.flag = 0; + this.autoIncrement = true; + this.store = new Object[this.size]; + } + + /** + * 指定大小,不可自增 + */ + public ArrayList(int size) { + this.size = size; + this.flag = 0; + this.autoIncrement = false; + this.store = new Object[size]; + } + + @Override + public Iterator iterator() { + this.iterator = new ArrayListIterator(); + return iterator; + } + + @Override + public boolean hasNext() { + return iterator.hasNext(); + } + + @Override + @SuppressWarnings("unchecked") + public T next() { + return (T) iterator.next(); + } + + @Override + public boolean isEmpty() { + return size == 0; + } + + @Override + public int size() { + return flag; + } + + @Override + public void add(T element) throws IllegalAccessException { + assessStore(flag + 1, size, store, flag); + flag++; + this.store[flag] = element; + } + + private void assessStore(int left, int size, Object[] store, int flag) throws IllegalAccessException { + if (!autoIncrement) { + return; + } + double coefficient = Math.div(left, size); + if (coefficient > THRESHOLD) { + // 达到阈值,拓展 + Object[] newStore = new Object[this.size * 2]; + System.arraycopy(store, 0, newStore, 0, flag); + this.store = newStore; + this.size = size * 2; + } + } + + @Override + public void remove(T element) { + for (int i = 0; i < flag; i++) { + if (Objects.equals(this.store[i], element)) { + System.arraycopy(store, i + 1, store, i, flag - i); + flag--; + break; + } + } + } + + @Override + public int contain(T element) { + int result = -1; + for (int i = 0; i < flag; i++) { + if (Objects.equals(element, store[i])) { + return i; + } + } + return result; + } + + @Override + @SuppressWarnings("uncheckd") + public T get(int index) throws IndexOutOfBoundsException { + return (T) this.store[index]; + } + + private class ArrayListIterator implements Iterator { + + private int index; + + ArrayListIterator() { + index = 0; + } + + @Override + public Iterator iterator() { + return new ArrayListIterator(); + } + + @Override + public boolean hasNext() { + return index < size; + } + + @Override + public Object next() { + return store[index++]; + } + } +} \ No newline at end of file diff --git a/group08/286060098/practice/src/com/pop/practice/homework/first/collection/list/LinkedList.java b/group08/286060098/practice/src/com/pop/practice/homework/first/collection/list/LinkedList.java new file mode 100644 index 0000000000..874195596e --- /dev/null +++ b/group08/286060098/practice/src/com/pop/practice/homework/first/collection/list/LinkedList.java @@ -0,0 +1,240 @@ +package com.pop.practice.homework.first.collection.list; + +import java.io.Serializable; +import java.util.Objects; + +import com.pop.practice.homework.first.collection.AbstractCollection; +import com.pop.practice.homework.first.collection.Iterator; + +/** + * @author haipop Date: 17-2-16 Time: 下午6:34 + */ +public class LinkedList extends AbstractCollection implements List, Serializable { + + private static final long serialVersionUID = 365915684200725970L; + + /** + * 头节点 + */ + private Node head; + + /** + * 尾节点 + */ + private Node tail; + + /** + * 标记位 + */ + private int flag; + + /** + * 遍历器 + */ + private Iterator iterator; + + public LinkedList() { + this.head = new Node(); + this.tail = new Node(); + this.flag = 0; + this.head.setNext(tail); + } + + @Override + public boolean isEmpty() { + return this.flag == 0; + } + + @Override + public int size() { + return this.flag; + } + + @Override + public void add(T element) throws IllegalAccessException { + if (this.head.getData() == null) { + this.head.setData(element); + flag++; + return; + } + if (this.tail.getData() == null) { + this.tail.setData(element); + this.tail.setBefore(this.head); + flag++; + return; + } + Node node = new Node(element); + node.setBefore(this.tail); + this.tail.next = node; + this.tail = node; + flag++; + } + + @Override + public void remove(T element) { + if (this.head == null) { + return; + } + Node tmp = this.head; + while (tmp.next != null) { + if (Objects.equals(tmp.getData(), element)) { + if (tmp == this.head) { + if (this.tail.getData() == null) { + this.head.setData(null); + } else { + this.head = this.head.next; + this.head.before = null; + } + flag--; + return; + } + Node next = tmp.next; + Node before = tmp.before; + if (next == null) { + before.setNext(null); + } else { + before.setNext(next); + } + next.setBefore(before); + flag--; + tmp = null; + } + tmp = tmp.next; + } + } + + @Override + public int contain(T element) { + Node tmp = this.head; + int index = 0; + while (tmp.next != null) { + if (Objects.equals(tmp.getData(), element)) { + return index; + } else { + tmp = tmp.next; + index++; + } + } + return -1; + } + + @Override + public T get(int index) throws IndexOutOfBoundsException { + Node tmp = this.head; + for (int i = 1; i < index; i++) { + if (tail == tmp) { + // 到最后还没到指定位置,越界 + throw new IndexOutOfBoundsException(); + } + tmp = tmp.getNext(); + } + return tmp.getData(); + } + + @Override + public Iterator iterator() { + this.iterator = new LinkListIterator(); + return iterator; + } + + @Override + public boolean hasNext() { + return iterator.hasNext(); + } + + @Override + @SuppressWarnings("unchecked") + public T next() { + return (T) iterator.next(); + } + + private class LinkListIterator implements Iterator { + + private Node cache; + + LinkListIterator() { + cache = head; + } + + @Override + public Iterator iterator() { + return new LinkListIterator(); + } + + @Override + public boolean hasNext() { + return cache.getNext() == null; + } + + @Override + public Object next() { + return cache.getNext(); + } + } + + /** + * 链表节点类 --> 这里做了双向链表,这里如果是一个跳表的话查询性能会更好一点 + */ + private class Node implements Serializable { + + private static final long serialVersionUID = 6327349429030778592L; + /** + * 数据 + */ + private T data; + + /** + * 下一节点 + */ + private Node before; + + /** + * 下一节点 + */ + private Node next; + + Node() { + } + + Node(T data) { + this.data = data; + this.next = null; + } + + Node(T data, Node before) { + this.data = data; + this.before = before; + } + + Node(T data, Node before, Node next) { + this.data = data; + this.before = before; + this.next = next; + } + + T getData() { + return data; + } + + void setData(T data) { + this.data = data; + } + + Node getBefore() { + return before; + } + + void setBefore(Node before) { + this.before = before; + } + + Node getNext() { + return next; + } + + void setNext(Node next) { + this.next = next; + } + } + +} \ No newline at end of file diff --git a/group08/286060098/practice/src/com/pop/practice/homework/first/collection/list/List.java b/group08/286060098/practice/src/com/pop/practice/homework/first/collection/list/List.java new file mode 100644 index 0000000000..7be9392b75 --- /dev/null +++ b/group08/286060098/practice/src/com/pop/practice/homework/first/collection/list/List.java @@ -0,0 +1,14 @@ +package com.pop.practice.homework.first.collection.list; + +import com.pop.practice.homework.first.collection.Collection; + +/** + * @author haipop Date: 17-2-19 Time: 下午4:03 + */ +public interface List extends Collection { + + /** + * 获取指定位置元素 + */ + T get(int index) throws IndexOutOfBoundsException; +} diff --git a/group08/286060098/practice/src/com/pop/practice/homework/first/collection/queue/LinkQueue.java b/group08/286060098/practice/src/com/pop/practice/homework/first/collection/queue/LinkQueue.java new file mode 100644 index 0000000000..bb371d64ca --- /dev/null +++ b/group08/286060098/practice/src/com/pop/practice/homework/first/collection/queue/LinkQueue.java @@ -0,0 +1,202 @@ +package com.pop.practice.homework.first.collection.queue; + +import java.io.Serializable; +import java.util.Objects; + +import com.pop.practice.homework.first.collection.AbstractCollection; +import com.pop.practice.homework.first.collection.Collection; +import com.pop.practice.homework.first.collection.Iterator; + +/** + * @author haipop Date: 17-2-16 Time: 下午6:34 + */ +public class LinkQueue extends AbstractCollection implements Queue, Serializable { + + private static final long serialVersionUID = 7942321140756962637L; + + /** + * 头节点 + */ + private Node head; + + /** + * 尾节点,伪节点,这个节点指用来指上一个 + */ + private Node tail; + + /** + * 现有的元素个数 + */ + private int size; + + /** + * 遍历器 + */ + private Iterator iterator; + + public LinkQueue() { + this.size = 0; + } + + @Override + public boolean isEmpty() { + return size == 0; + } + + @Override + public int size() { + return size; + } + + @Override + public void add(T element) throws IllegalAccessException { + if (this.head == null) { + this.head = new Node(element); + this.tail.setBefore(this.head); + this.size++; + return; + } + Node node = new Node(element); + node.setBefore(null); + node.setNext(this.head.getNext()); + this.head.getNext().setBefore(node); + this.head = node; + this.size++; + } + + @Override + public void remove(T element) { + if (isEmpty()) { + throw new IndexOutOfBoundsException(); + } + Node tmp = this.head; + while (tmp.getNext() == null && tmp.getNext() != this.tail) { + if (Objects.equals(tmp.getData(), element)) { + Node before = tmp.getBefore(); + Node next = tmp.getNext(); + before.setNext(next); + next.setBefore(before); + tmp = null; + break; + } + tmp = tmp.getNext(); + } + } + + @Override + public void push(T element) throws IllegalAccessException { + add(element); + } + + @Override + public void push(Collection collection) throws IllegalAccessException { + addAll(collection); + } + + @Override + public int contain(T element) { + Node tmp = this.head; + int index = 0; + while (tmp.next != null && tmp != this.tail) { + if (Objects.equals(tmp.getData(), element)) { + return index; + } else { + tmp = tmp.next; + index++; + } + } + return -1; + } + + @Override + public T pull() { + if (isEmpty()) { + throw new IndexOutOfBoundsException(); + } + Node node = this.tail.getBefore(); + this.tail.setBefore(node.getBefore()); + size--; + return node.getData(); + } + + @Override + public Iterator iterator() { + this.iterator = new LinkQueueIterator(); + return iterator; + } + + @Override + public boolean hasNext() { + return this.iterator.hasNext(); + } + + @Override + @SuppressWarnings("unchecked") + public T next() { + return (T) this.iterator.next(); + } + + private class LinkQueueIterator implements Iterator { + + private Node cache; + + LinkQueueIterator() { + this.cache = head; + } + + @Override + public Iterator iterator() { + return new LinkQueueIterator(); + } + + @Override + public boolean hasNext() { + return cache.getNext() == tail; + } + + @Override + public T next() { + return cache.getNext().getData(); + } + } + + private class Node implements Serializable { + + private static final long serialVersionUID = 6400564182277299061L; + + private T data; + + private Node before; + + private Node next; + + Node(T data) { + this.data = data; + } + + T getData() { + return data; + } + + void setData(T data) { + this.data = data; + } + + Node getBefore() { + return before; + } + + void setBefore(Node before) { + this.before = before; + } + + Node getNext() { + return next; + } + + void setNext(Node next) { + this.next = next; + } + } + +} \ No newline at end of file diff --git a/group08/286060098/practice/src/com/pop/practice/homework/first/collection/queue/Queue.java b/group08/286060098/practice/src/com/pop/practice/homework/first/collection/queue/Queue.java new file mode 100644 index 0000000000..92f46378e0 --- /dev/null +++ b/group08/286060098/practice/src/com/pop/practice/homework/first/collection/queue/Queue.java @@ -0,0 +1,26 @@ +package com.pop.practice.homework.first.collection.queue; + +import com.pop.practice.homework.first.collection.Collection; + +/** + * 更符合Queue语义的方法 + * + * @author haipop Date: 17-2-19 Time: 下午3:23 + */ +public interface Queue extends Collection { + + /** + * 添加元素 + */ + void push(T element) throws IllegalAccessException; + + /** + * 添加元素 + */ + void push(Collection collection) throws IllegalAccessException; + + /** + * 取元素,删除最后一个并返回 + */ + T pull(); +} \ No newline at end of file diff --git a/group08/286060098/practice/src/com/pop/practice/homework/first/collection/stack/LinkStack.java b/group08/286060098/practice/src/com/pop/practice/homework/first/collection/stack/LinkStack.java new file mode 100644 index 0000000000..c9a0edd124 --- /dev/null +++ b/group08/286060098/practice/src/com/pop/practice/homework/first/collection/stack/LinkStack.java @@ -0,0 +1,94 @@ +package com.pop.practice.homework.first.collection.stack; + +import java.io.Serializable; + +import com.pop.practice.homework.first.collection.AbstractCollection; +import com.pop.practice.homework.first.collection.Iterator; +import com.pop.practice.homework.first.collection.list.LinkedList; +import com.pop.practice.homework.first.collection.list.List; + +/** + * @author haipop Date: 17-2-16 Time: 下午6:33 + */ +public class LinkStack extends AbstractCollection implements Stack, Serializable { + + private static final long serialVersionUID = -2813631170103864318L; + + /** + * 数据存储 + */ + private List cache; + + /** + * 数据量 + */ + private int size; + + /** + * 遍历器 + */ + private Iterator iterator; + + public LinkStack() { + this.size = 0; + this.cache = new LinkedList(); + } + + @Override + public boolean isEmpty() { + return size == 0; + } + + @Override + public int size() { + return size; + } + + @Override + public void push(T element) throws IllegalAccessException { + this.cache.add(element); + size++; + } + + @Override + public void add(T element) throws IllegalAccessException { + this.cache.add(element); + size++; + } + + @Override + public T pull() throws IndexOutOfBoundsException { + T result = this.cache.get(size - 1); + size--; + return result; + } + + @Override + public void remove(T element) { + cache.remove(element); + size--; + } + + @Override + public int contain(T element) { + return cache.contain(element); + } + + @Override + public Iterator iterator() { + this.iterator = this.cache.iterator(); + return iterator; + } + + @Override + public boolean hasNext() { + return this.iterator.hasNext(); + } + + @Override + @SuppressWarnings("unchecked") + public T next() { + return (T) this.iterator.next(); + } + +} \ No newline at end of file diff --git a/group08/286060098/practice/src/com/pop/practice/homework/first/collection/stack/Stack.java b/group08/286060098/practice/src/com/pop/practice/homework/first/collection/stack/Stack.java new file mode 100644 index 0000000000..c9ea66dd2b --- /dev/null +++ b/group08/286060098/practice/src/com/pop/practice/homework/first/collection/stack/Stack.java @@ -0,0 +1,22 @@ +package com.pop.practice.homework.first.collection.stack; + +import com.pop.practice.homework.first.collection.Collection; + +/** + * + * 更符合Stack语义的方法 + * + * @author haipop Date: 17-2-19 Time: 下午3:50 + */ +public interface Stack extends Collection { + + /** + * 添加元素 + */ + void push(T element) throws IllegalAccessException; + + /** + * 取元素 + */ + T pull(); +} diff --git a/group08/286060098/practice/src/com/pop/practice/homework/first/tree/AbstractTree.java b/group08/286060098/practice/src/com/pop/practice/homework/first/tree/AbstractTree.java new file mode 100644 index 0000000000..4e86940103 --- /dev/null +++ b/group08/286060098/practice/src/com/pop/practice/homework/first/tree/AbstractTree.java @@ -0,0 +1,29 @@ +package com.pop.practice.homework.first.tree; + +import com.pop.practice.homework.first.collection.Iterator; +import com.pop.practice.homework.first.collection.list.List; + +/** + * @author haipop Date: 17-2-20 Time: 上午9:53 + */ +public abstract class AbstractTree implements Tree { + + @Override + public void addNode(T[] elements) throws IllegalAccessException { + for (T ele : elements) { + addNode(ele); + } + } + + @Override + @SuppressWarnings("unchecked") + public void addNode(List elements) throws IllegalAccessException { + Iterator iterator = elements.iterator(); + while (iterator.hasNext()) { + addNode((T) iterator.next()); + } + } + + + protected abstract void addNode(T elements) throws IllegalAccessException; +} \ No newline at end of file diff --git a/group08/286060098/practice/src/com/pop/practice/homework/first/tree/BinaryNode.java b/group08/286060098/practice/src/com/pop/practice/homework/first/tree/BinaryNode.java new file mode 100644 index 0000000000..db34c48460 --- /dev/null +++ b/group08/286060098/practice/src/com/pop/practice/homework/first/tree/BinaryNode.java @@ -0,0 +1,40 @@ +package com.pop.practice.homework.first.tree; + +class BinaryNode { + + private T data; + + private BinaryNode left; + + private BinaryNode right; + + public BinaryNode(T data, BinaryNode left, BinaryNode right) { + this.data = data; + this.left = left; + this.right = right; + } + + public T getData() { + return data; + } + + public void setData(T data) { + this.data = data; + } + + public BinaryNode getLeft() { + return left; + } + + public void setLeft(BinaryNode left) { + this.left = left; + } + + public BinaryNode getRight() { + return right; + } + + public void setRight(BinaryNode right) { + this.right = right; + } +} \ No newline at end of file diff --git a/group08/286060098/practice/src/com/pop/practice/homework/first/tree/BinaryTree.java b/group08/286060098/practice/src/com/pop/practice/homework/first/tree/BinaryTree.java new file mode 100644 index 0000000000..eff95ec6f9 --- /dev/null +++ b/group08/286060098/practice/src/com/pop/practice/homework/first/tree/BinaryTree.java @@ -0,0 +1,125 @@ +package com.pop.practice.homework.first.tree; + +import java.io.Serializable; + +import com.pop.practice.homework.first.collection.queue.LinkQueue; +import com.pop.practice.homework.first.collection.queue.Queue; + +/** + * 左大右小 + * + * @author haipop Date: 17-2-20 Time: 上午9:42 + */ +public class BinaryTree extends AbstractTree implements Serializable { + + private static final long serialVersionUID = -1467347526158258388L; + + /** + * 根节点 + */ + private BinaryNode root; + + @Override + @SuppressWarnings("unchecked") + protected void addNode(T elements) throws IllegalAccessException { + if (root == null) { + root = new BinaryNode(elements, null, null); + } + BinaryNode newNode = new BinaryNode<>(elements, null, null); + Queue queue = new LinkQueue<>(); + queue.add(root); + while (queue.isEmpty()) { + BinaryNode node = queue.pull(); + if (((Comparable) node.getData()).compareTo(elements) > 0) { + if (node.getRight() == null) { + node.setRight(newNode); + break; + } else { + queue.add(node.getRight()); + } + } else if (((Comparable) node.getData()).compareTo(elements) < 0) { + if (node.getLeft() == null) { + node.setLeft(newNode); + break; + } else { + queue.add(node.getLeft()); + } + } + } + } + + @Override + @SuppressWarnings("unchecked") + public void removeNode(T elements) throws IllegalAccessException { + if (root == null) { + return; + } + root = removeNode(elements, root); + } + + @SuppressWarnings("unchecked") + private BinaryNode removeNode(T element, BinaryNode node) { + BinaryNode left = node.getLeft(); + BinaryNode right = node.getRight(); + if (node.getData().compareTo(element) > 0) { + BinaryNode removeNode = removeNode(element, right); + moveNode(element, node, left, right, removeNode); + node.setRight(removeNode); + } else if (node.getData().compareTo(element) < 0) { + BinaryNode removeNode = removeNode(element, left); + moveNode(element, node, left, right, removeNode); + node.setLeft(removeNode); + } + if (left != null) { + return left; + } else if (right != null) { + return right; + } else { + return null; + } + } + + @SuppressWarnings("unchecked") + private void moveNode(T element, BinaryNode node, BinaryNode left, BinaryNode right, + BinaryNode removeNode) { + if (removeNode.getData().compareTo(right) > 0) { + BinaryNode tmp = removeNode.getRight(); + while (tmp != null) { + tmp = tmp.getRight(); + } + tmp.setRight(left.getRight()); + } else if (node.getData().compareTo(element) < 0) { + BinaryNode tmp = removeNode.getLeft(); + while (tmp != null) { + tmp = tmp.getLeft(); + } + tmp.setLeft(right.getLeft()); + } + } + + @Override + @SuppressWarnings("unchecked") + public boolean contain(T data) throws IllegalAccessException { + if (root == null) { + return false; + } + Queue queue = new LinkQueue<>(); + queue.add(root); + while (queue.isEmpty()) { + BinaryNode node = queue.pull(); + if (((Comparable) node.getData()).compareTo(data) > 0) { + if (node.getRight() != null) { + queue.add(node.getRight()); + } + } else if (((Comparable) node.getData()).compareTo(data) < 0) { + if (node.getLeft() == null) { + queue.add(node.getLeft()); + } + } else { + return true; + } + } + return false; + } + +} \ No newline at end of file diff --git a/group08/286060098/practice/src/com/pop/practice/homework/first/tree/Tree.java b/group08/286060098/practice/src/com/pop/practice/homework/first/tree/Tree.java new file mode 100644 index 0000000000..174a98bc2c --- /dev/null +++ b/group08/286060098/practice/src/com/pop/practice/homework/first/tree/Tree.java @@ -0,0 +1,30 @@ +package com.pop.practice.homework.first.tree; + +import com.pop.practice.homework.first.collection.list.List; + +/** + * @author haipop Date: 17-2-19 Time: 下午5:12 + */ +public interface Tree { + + /** + * 添加节点 + */ + void addNode(T... elements) throws IllegalAccessException; + + /** + * 添加节点 + */ + void addNode(List elements) throws IllegalAccessException; + + /** + * 删除节点 + */ + void removeNode(T element) throws IllegalAccessException; + + /** + * 节点查找,找到返回节点信息,找不到返回null + */ + boolean contain(T data) throws IllegalAccessException; + +} \ No newline at end of file diff --git a/group08/286060098/practice/src/com/pop/practice/homework/utils/Math.java b/group08/286060098/practice/src/com/pop/practice/homework/utils/Math.java new file mode 100644 index 0000000000..b20c1bb486 --- /dev/null +++ b/group08/286060098/practice/src/com/pop/practice/homework/utils/Math.java @@ -0,0 +1,29 @@ +package com.pop.practice.homework.utils; + +import java.math.BigDecimal; +import java.math.RoundingMode; + +/** + * @author haipop Date: 17-2-18 Time: 下午1:00 + */ +public class Math { + + public static double div(int left, int right) throws IllegalAccessException { + return div((double) left, (double) right, 2); + } + + public static double div(int left, int right, int scale) throws IllegalAccessException { + return div((double) left, (double) right, scale); + } + + @SuppressWarnings("unchecked") + public static double div(double left, double right, int scale) throws IllegalAccessException { + // 如果精确范围小于0,抛出异常信息 + if (scale < 0) { + throw new IllegalAccessException("精确度不能小于0"); + } + BigDecimal divisor = new BigDecimal(left); + BigDecimal dividend = new BigDecimal(right); + return divisor.divide(dividend, scale, RoundingMode.HALF_EVEN).doubleValue(); + } +} \ No newline at end of file diff --git a/group08/286060098/readme.md b/group08/286060098/readme.md new file mode 100644 index 0000000000..be6cfb2ecb --- /dev/null +++ b/group08/286060098/readme.md @@ -0,0 +1,19 @@ +# Module说明 + +--- + +practice是我在自己目录下创建的一个maven项目 + +### 文件夹说明 +| 文件夹 | 描述   | +| -------- | :----: | +| doc |相关的说明文档 | +| script | 相关的脚本信息,如有sql脚本也请在这里查找 | +| src | 代码目录| + +### 代码说明 + +> 作业在com.pop.practice.homework目录下,比如first标示第一周,以此类推 + + + From ce0c35894f4bb0fc5126184168d996dcfeef3940 Mon Sep 17 00:00:00 2001 From: zoakerc Date: Sat, 25 Feb 2017 11:59:31 +0800 Subject: [PATCH 104/216] =?UTF-8?q?=E6=95=B0=E7=BB=84=E5=AE=9E=E7=8E=B0Arr?= =?UTF-8?q?ayList?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../group7/homework/c0226/ArrayList.java | 33 ------- .../group7/homework/c0226/MyArrayList.java | 86 +++++++++++++++++++ .../homework/c0226/MyArrayListTest.java | 80 +++++++++++++++++ ...aryTreeNode.java => MyBinaryTreeNode.java} | 16 ++-- .../c0226/{Iterator.java => MyIterator.java} | 2 +- .../{LinkedList.java => MyLinkedList.java} | 4 +- .../homework/c0226/{List.java => MyList.java} | 2 +- .../c0226/{Queue.java => MyQueue.java} | 2 +- .../c0226/{Stack.java => MyStack.java} | 4 +- .../group7/homework/c0226/ArrayListTest.java | 11 --- 10 files changed, 181 insertions(+), 59 deletions(-) delete mode 100644 group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/ArrayList.java create mode 100644 group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/MyArrayList.java create mode 100644 group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/MyArrayListTest.java rename group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/{BinaryTreeNode.java => MyBinaryTreeNode.java} (52%) rename group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/{Iterator.java => MyIterator.java} (78%) rename group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/{LinkedList.java => MyLinkedList.java} (89%) rename group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/{List.java => MyList.java} (89%) rename group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/{Queue.java => MyQueue.java} (91%) rename group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/{Stack.java => MyStack.java} (79%) delete mode 100644 group07/562247675/homework/homework-0226/src/test/java/com/coding2017/group7/homework/c0226/ArrayListTest.java diff --git a/group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/ArrayList.java b/group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/ArrayList.java deleted file mode 100644 index 3381bbee8b..0000000000 --- a/group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/ArrayList.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.coding2017.group7.homework.c0226; - -public class ArrayList implements List { - - private int size = 0; - - private Object[] elementData = new Object[100]; - - public void add(Object o) { - - } - - public void add(int index, Object o) { - - } - - public Object get(int index) { - return null; - } - - public Object remove(int index) { - return null; - } - - public int size() { - return -1; - } - - public Iterator iterator() { - return null; - } - -} diff --git a/group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/MyArrayList.java b/group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/MyArrayList.java new file mode 100644 index 0000000000..00a0fb4a7e --- /dev/null +++ b/group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/MyArrayList.java @@ -0,0 +1,86 @@ +package com.coding2017.group7.homework.c0226; + +import java.util.Arrays; + +public class MyArrayList implements MyList { + + private int size = 0; + + private Object[] elementData = new Object[10]; + + public void add(Object o) { + if (isFull()) { + increase(); + } + elementData[size++] = o; + } + + public void add(int index, Object o) { + checkRange(index); + if (isFull()) { + increase(); + } + System.arraycopy(elementData, index, elementData, index + 1, size - index); + elementData[index] = o; + size++; + } + + public Object get(int index) { + checkRange(index); + return elementData[index]; + } + + public Object remove(int index) { + checkRange(index); + Object element = elementData[index]; + System.arraycopy(elementData, index + 1, elementData, index, size - (index + 1)); + elementData[size] = null; + size--; + return element; + } + + public int size() { + return size; + } + + public MyIterator iterator() { + return new MyArrayListIterator(); + } + + private boolean isFull() { + return size >= elementData.length; + } + + private void checkRange(int index) { + boolean outOfRange = index < 0 || index >= size; + if (outOfRange) { + throw new IndexOutOfBoundsException("Index: " + index + ", Size: " + size); + } + } + + private void increase() { + Object[] target = new Object[elementData.length * 2]; + System.arraycopy(elementData, 0, target, 0, elementData.length); + elementData = target; + } + + @Override + public String toString() { + return Arrays.toString(elementData); + } + + private class MyArrayListIterator implements MyIterator { + + private int index = 0; + + @Override + public boolean hasNext() { + return index < size; + } + + @Override + public Object next() { + return elementData[index++]; + } + } +} diff --git a/group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/MyArrayListTest.java b/group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/MyArrayListTest.java new file mode 100644 index 0000000000..c196789c6d --- /dev/null +++ b/group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/MyArrayListTest.java @@ -0,0 +1,80 @@ +package com.coding2017.group7.homework.c0226; + +import org.junit.After; +import org.junit.Assert; +import org.junit.Before; +import org.junit.FixMethodOrder; +import org.junit.Test; +import org.junit.runners.MethodSorters; + +@FixMethodOrder(MethodSorters.NAME_ASCENDING) +public class MyArrayListTest { + + private MyArrayList mylist = new MyArrayList(); + private final int mysize = 15; + + @Before + public void setUp() throws Exception { + for (int i = 0; i < mysize; i++) { + mylist.add(i); + } + } + + @After + public void tearDown() throws Exception { + for (int i = mylist.size(); i > 0; i--) { + mylist.remove(i - 1); + } + mylist = null; + } + + @Test + public void addLast() throws Exception { + int element = -1; + mylist.add(element); + Assert.assertEquals(mylist.size(), mysize + 1); + Assert.assertTrue(mylist.get(mylist.size() - 1).equals(element)); + } + + @Test + public void addIndex() throws Exception { + int index = mysize / 2; + int element = -1; + mylist.add(index, element); + Assert.assertTrue(mylist.get(index).equals(element)); + Assert.assertEquals(mylist.size(), mysize + 1); + } + + @Test + public void get() throws Exception { + Assert.assertTrue(mylist.get(0).equals(0)); + } + + @Test + public void remove() throws Exception { + int index = mysize / 2; + Object before = mylist.get(index + 1); + Object element = mylist.remove(index); + Object after = mylist.get(index); + Assert.assertTrue(before.equals(after)); + Assert.assertEquals(mylist.size(), mysize - 1); + + } + + @Test + public void size() throws Exception { + Assert.assertEquals(mylist.size(), mysize); + } + + @Test + public void iterator() throws Exception { + MyIterator iterator = mylist.iterator(); + int count = 0; + while (iterator.hasNext()) { + iterator.next(); + count++; + } + Assert.assertEquals(mylist.size(), count); + } + +} \ No newline at end of file diff --git a/group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/BinaryTreeNode.java b/group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/MyBinaryTreeNode.java similarity index 52% rename from group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/BinaryTreeNode.java rename to group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/MyBinaryTreeNode.java index b666a31c31..56963a0b8d 100644 --- a/group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/BinaryTreeNode.java +++ b/group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/MyBinaryTreeNode.java @@ -1,10 +1,10 @@ package com.coding2017.group7.homework.c0226; -public class BinaryTreeNode { +public class MyBinaryTreeNode { private Object data; - private BinaryTreeNode left; - private BinaryTreeNode right; + private MyBinaryTreeNode left; + private MyBinaryTreeNode right; public Object getData() { return data; @@ -14,23 +14,23 @@ public void setData(Object data) { this.data = data; } - public BinaryTreeNode getLeft() { + public MyBinaryTreeNode getLeft() { return left; } - public void setLeft(BinaryTreeNode left) { + public void setLeft(MyBinaryTreeNode left) { this.left = left; } - public BinaryTreeNode getRight() { + public MyBinaryTreeNode getRight() { return right; } - public void setRight(BinaryTreeNode right) { + public void setRight(MyBinaryTreeNode right) { this.right = right; } - public BinaryTreeNode insert(Object o) { + public MyBinaryTreeNode insert(Object o) { return null; } diff --git a/group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/Iterator.java b/group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/MyIterator.java similarity index 78% rename from group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/Iterator.java rename to group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/MyIterator.java index f97b7dfdd3..9ecc4d3a7f 100644 --- a/group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/Iterator.java +++ b/group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/MyIterator.java @@ -1,6 +1,6 @@ package com.coding2017.group7.homework.c0226; -public interface Iterator { +public interface MyIterator { public boolean hasNext(); public Object next(); diff --git a/group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/LinkedList.java b/group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/MyLinkedList.java similarity index 89% rename from group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/LinkedList.java rename to group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/MyLinkedList.java index 4c2ed0c5dc..945f476e96 100644 --- a/group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/LinkedList.java +++ b/group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/MyLinkedList.java @@ -1,6 +1,6 @@ package com.coding2017.group7.homework.c0226; -public class LinkedList implements List { +public class MyLinkedList implements MyList { private Node head; @@ -40,7 +40,7 @@ public Object removeLast() { return null; } - public Iterator iterator() { + public MyIterator iterator() { return null; } diff --git a/group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/List.java b/group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/MyList.java similarity index 89% rename from group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/List.java rename to group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/MyList.java index 5d462e3ebd..7532313b89 100644 --- a/group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/List.java +++ b/group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/MyList.java @@ -1,6 +1,6 @@ package com.coding2017.group7.homework.c0226; -public interface List { +public interface MyList { public void add(Object o); public void add(int index, Object o); diff --git a/group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/Queue.java b/group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/MyQueue.java similarity index 91% rename from group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/Queue.java rename to group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/MyQueue.java index 6ce10c6cef..c8f2b4c733 100644 --- a/group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/Queue.java +++ b/group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/MyQueue.java @@ -1,6 +1,6 @@ package com.coding2017.group7.homework.c0226; -public class Queue { +public class MyQueue { public void enQueue(Object o) { } diff --git a/group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/Stack.java b/group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/MyStack.java similarity index 79% rename from group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/Stack.java rename to group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/MyStack.java index b75c78b8fd..3267b056c7 100644 --- a/group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/Stack.java +++ b/group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/MyStack.java @@ -1,7 +1,7 @@ package com.coding2017.group7.homework.c0226; -public class Stack { - private ArrayList elementData = new ArrayList(); +public class MyStack { + private MyArrayList elementData = new MyArrayList(); public void push(Object o) { } diff --git a/group07/562247675/homework/homework-0226/src/test/java/com/coding2017/group7/homework/c0226/ArrayListTest.java b/group07/562247675/homework/homework-0226/src/test/java/com/coding2017/group7/homework/c0226/ArrayListTest.java deleted file mode 100644 index 3a3a4fb045..0000000000 --- a/group07/562247675/homework/homework-0226/src/test/java/com/coding2017/group7/homework/c0226/ArrayListTest.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.coding2017.group7.homework.c0226; - -import org.junit.Test; - -public class ArrayListTest { - @Test - public void add() throws Exception { - - } - -} \ No newline at end of file From 19ca2d9458f29c35d724cc68d284f2e27c63a0e7 Mon Sep 17 00:00:00 2001 From: wzy <1264835468@qq.com> Date: Sat, 25 Feb 2017 12:15:56 +0800 Subject: [PATCH 105/216] =?UTF-8?q?=E5=8D=B3=E5=B0=86=E4=BF=AE=E6=94=B9ite?= =?UTF-8?q?rator?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- group17/1264835468/src/assignment/BinaryTree.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/group17/1264835468/src/assignment/BinaryTree.java b/group17/1264835468/src/assignment/BinaryTree.java index dcc13e5849..65e2137bdc 100644 --- a/group17/1264835468/src/assignment/BinaryTree.java +++ b/group17/1264835468/src/assignment/BinaryTree.java @@ -77,7 +77,7 @@ public BinaryTreeNode deQueue() { throw new QueueIsEmptyException(); } - public MyQueue> getBFSNodeQueue() { + public MyQueue> getResult() { prepare(); MyQueue> result = new MyQueue<>(); while (!isEmpty()) { @@ -114,7 +114,7 @@ public Iterator> iterator() { } private class BFSIterator implements Iterator> { - MyQueue> BFSQueue = new BFSNodeQueue().getBFSNodeQueue(); + MyQueue> BFSQueue = new BFSNodeQueue().getResult(); @Override public boolean hasNext() { From d21429fa83541e0ed71cd163fc3875389a03e9dc Mon Sep 17 00:00:00 2001 From: RalfNick Date: Sat, 25 Feb 2017 12:18:38 +0800 Subject: [PATCH 106/216] Ralf --- .../MyArrayList.java" | 136 +++++++++++ .../MyIterator.java" | 7 + .../MyList.java" | 16 ++ .../MyQueue.java" | 79 +++++++ .../MyStack.java" | 44 ++++ .../SingleLinkedList.java" | 212 ++++++++++++++++++ 6 files changed, 494 insertions(+) create mode 100644 "group20/925290009/\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232/MyArrayList.java" create mode 100644 "group20/925290009/\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232/MyIterator.java" create mode 100644 "group20/925290009/\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232/MyList.java" create mode 100644 "group20/925290009/\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232/MyQueue.java" create mode 100644 "group20/925290009/\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232/MyStack.java" create mode 100644 "group20/925290009/\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232/SingleLinkedList.java" diff --git "a/group20/925290009/\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232/MyArrayList.java" "b/group20/925290009/\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232/MyArrayList.java" new file mode 100644 index 0000000000..de63307566 --- /dev/null +++ "b/group20/925290009/\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232/MyArrayList.java" @@ -0,0 +1,136 @@ +package BasicData; + +import java.util.Arrays; +import java.util.NoSuchElementException; + +/** + * ʵֻݽṹArrayList + * + * @author Ralf + * + * @param + */ +public class MyArrayList implements MyList { + + private static final int DEFAULT_CAPACITY = 10; + private static int msize; + private T[] elements; + + public MyArrayList() { + msize = 0; + ensureCapacity(DEFAULT_CAPACITY); + } + + @SuppressWarnings("unchecked") + private void ensureCapacity(int newCapacity) { + // TODO Auto-generated method stub + if (msize > newCapacity) { + return; + } + T[] oldElements = elements; + elements = (T[]) new Object[newCapacity]; + for (int i = 0; i < size(); i++) { + elements[i] = oldElements[i]; + } + + } + public void trimSize(){ + if (msize < elements.length) { + ensureCapacity(msize); + } + } + + @Override + public boolean add(T t) { + // TODO Auto-generated method stub + + if (elements.length == size()) { + ensureCapacity(2 * size() + 1); + } + elements[msize++] = t; + return true; + } + + @Override + public void add(int index, T t) { + + if (msize == elements.length) { + ensureCapacity(2 * msize + 1); + } + for (int i = size(); i >= index; i--) { + elements[i + 1] = elements[i]; + } + elements[index] = t; + msize++; + } + + @Override + public int size() { + // TODO Auto-generated method stub + return msize; + } + + @Override + public T remove(int index) { + // TODO Auto-generated method stub + if (index < 0 || index > size()) { + throw new ArrayIndexOutOfBoundsException(); + } + T old = elements[index]; + for (int i = index; i < msize; i++) { + elements[i] = elements[i + 1]; + } + elements[msize--] = null; + return old; + + } + + @Override + public boolean set(int index, T t) { + // TODO Auto-generated method stub + if (index < 0 || index > size()) { + throw new ArrayIndexOutOfBoundsException(); + } + elements[index] = t; + return true; + } + + @Override + public T get(int index) { + // TODO Auto-generated method stub + if (index < 0 || index > msize) { + throw new ArrayIndexOutOfBoundsException(); + } + return elements[index]; + } + + @Override + public String toString() { + return Arrays.toString(elements); + } + + public MyIterator iterator() { + return new MyArrayListIterator(); + } + + private class MyArrayListIterator implements MyIterator { + + private int current = 0;// ָ + + public boolean hasNext() { + // TODO Auto-generated method stub + + return current < size(); + } + + public T Next() { + // TODO Auto-generated method stub + if (!hasNext()) { + throw new NoSuchElementException(); + } + return elements[current++]; + } + + } + +} diff --git "a/group20/925290009/\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232/MyIterator.java" "b/group20/925290009/\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232/MyIterator.java" new file mode 100644 index 0000000000..42bf1d4fa1 --- /dev/null +++ "b/group20/925290009/\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232/MyIterator.java" @@ -0,0 +1,7 @@ +package BasicData; + +public interface MyIterator { + + public abstract boolean hasNext(); + public abstract T Next(); +} diff --git "a/group20/925290009/\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232/MyList.java" "b/group20/925290009/\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232/MyList.java" new file mode 100644 index 0000000000..2b2ba5057a --- /dev/null +++ "b/group20/925290009/\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232/MyList.java" @@ -0,0 +1,16 @@ +package BasicData; + +/** + * ԼListӿ + * @author Ralf + * + */ +public interface MyList { + + public abstract boolean add(T t); + public abstract void add(int index, T t); + public abstract int size(); + public abstract T remove(int index); + public abstract boolean set(int index, T t); + public abstract T get(int index); +} diff --git "a/group20/925290009/\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232/MyQueue.java" "b/group20/925290009/\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232/MyQueue.java" new file mode 100644 index 0000000000..772b93f879 --- /dev/null +++ "b/group20/925290009/\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232/MyQueue.java" @@ -0,0 +1,79 @@ +package BasicData; + +/** + * ʵֻݽṹQueue() + * + * @author Administrator + * + */ +public class MyQueue { + + private int head; + private int tail; + private T[] elements; + private static final int DEFAUL_SIZE = 10; + private int numOfelements; + + public MyQueue() { + head = 0; + tail = 0; + numOfelements = 0; + setCapacity(DEFAUL_SIZE); + } + + public MyQueue(int capacity) { + head = 0; + tail = 0; + numOfelements = 0; + setCapacity(capacity); + + } + + @SuppressWarnings("unchecked") + private void setCapacity(int capacity) { + elements = (T[]) new Object[capacity]; + } + + public boolean enQueue(T t) { + + if (numOfelements == elements.length) { + return false; + } else { + elements[tail] = t; + numOfelements++; + if (tail == elements.length) + tail = 0; + else + tail++; + return true; + } + + } + + public T deQueue() { + if (head == tail) { + return null; + } else { + T t = elements[head]; + numOfelements--; + elements[head] = null; + if (head == elements.length) + head = 0; + else { + head++; + } + return t; + } + + } + + public boolean isEmpty() { + return numOfelements == 0; + } + + public int size() { + int msize = head - tail; + return msize > 0 ? msize : -msize; + } + +} diff --git "a/group20/925290009/\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232/MyStack.java" "b/group20/925290009/\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232/MyStack.java" new file mode 100644 index 0000000000..fb12e0dd23 --- /dev/null +++ "b/group20/925290009/\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232/MyStack.java" @@ -0,0 +1,44 @@ +package BasicData; + +import java.util.LinkedList; +import java.util.NoSuchElementException; + +/** + * ʵֻݽṹջ + * + * @author Ralf + * + */ +public class MyStack { + + private LinkedList linkedList; + + public MyStack() { + if (null == linkedList) { + linkedList = new LinkedList(); + } + } + + public void push(T t) { + linkedList.addFirst(t); + } + + public T pop() { + if (size() == 0) { + throw new NoSuchElementException(); + } + return linkedList.removeFirst(); + } + + public T peek() { + return (size() == 0) ? null : linkedList.getFirst(); + } + + public int size() { + return linkedList.size(); + } + + public boolean isEmpty(){ + return linkedList.isEmpty(); + } +} diff --git "a/group20/925290009/\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232/SingleLinkedList.java" "b/group20/925290009/\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232/SingleLinkedList.java" new file mode 100644 index 0000000000..a9e72ed4fa --- /dev/null +++ "b/group20/925290009/\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232/SingleLinkedList.java" @@ -0,0 +1,212 @@ +package BasicData; + +import java.util.NoSuchElementException; + +import javax.lang.model.element.Element; + +public class SingleLinkedList implements MyList { + + private int msize;// ¼Ԫصĸ + Note head;// ָһԪ + Note last;// ָһԪ + + private static class Note { + private T item = null; + Note next = null; + + public Note(T t) { + this.item = t; + } + } + + public SingleLinkedList() { + + } + + @Override + public boolean add(T t) { + // TODO Auto-generated method stub + final Note l = last; + final Note newNote = new Note(t); + last = newNote; + if (l == null) { + head = newNote;// ֻһnullԪ + } else { + l.next = last; + } + msize++; + return true; + } + + @Override + public void add(int index, T t) { + // TODO Auto-generated method stub + if (index < 0 || index > msize) { + throw new IndexOutOfBoundsException(); + } + if (index == 0) { + addFirst(t); + } + if (index == msize) { + add(t); + } + Note current = head; + for (int i = 0; i < index - 1; i++) { + current = current.next; + } + final Note newNote = new Note(t); + newNote.next = current.next; + current.next = newNote; + msize++; + + } + + public boolean addFirst(T t) { + final Note newNote = new Note(t); + newNote.next = head; + head = newNote; + msize++; + return true; + } + + public boolean addLast(T t) { + final Note newNote = new Note(t); + newNote.next = null; + last.next = newNote; + last = newNote; + msize++; + return true; + } + + public T removeLast() throws Exception { + if (head == null) { + throw new Exception("LinkedList is Empty!"); + } + Note current = head; + if (head.next == null) { + head = null; + last = null; + } else { + while (current.next != null) { + if (current.next == last) { + last = current; + last.next = null; + break; + } + current = current.next; + } + + } + msize--; + return current.item; + + } + + public T removeFirst() throws Exception { + if (head == null) { + throw new Exception("LinkedList is Empty!"); + } + Note element = head; + head = head.next; + msize--; + return element.item; + } + + @Override + public int size() { + // TODO Auto-generated method stub + return msize; + } + + @Override + public T remove(int index) { + // TODO Auto-generated method stub + if (index < 0 || index > msize) { + throw new IndexOutOfBoundsException(); + } + Note element; + if (index == 0) { + element = head; + head = head.next; + msize--; + return element.item; + } + Note current = head; + for (int i = 0; i < index - 1; i++) { + current = current.next; + } + element = current.next; + if (index == msize) { + current.next = null; + last = current; + } else { + current.next = current.next.next; + } + + msize--; + return element.item; + } + + @Override + public boolean set(int index, T t) { + // TODO Auto-generated method stub + if (index < 0 || index > msize) { + throw new IndexOutOfBoundsException(); + } + Note current = head; + for (int i = 0; i < index; i++) { + current = head.next; + } + current.item = t; + return true; + } + + @Override + public T get(int index) { + // TODO Auto-generated method stub + if (index < 0 || index > msize) { + throw new IndexOutOfBoundsException(); + } + Note current = head; + for (int i = 0; i < index; i++) { + current = current.next; + } + return current.item; + } + + public MyIterator iterator() { + return new MyLinkedListIterator(); + } + + private class MyLinkedListIterator implements MyIterator { + + private int current = 0; + private Note nextNote = head; + + @Override + public boolean hasNext() { + // TODO Auto-generated method stub + return current < msize; + } + + @Override + public T Next() { + // TODO Auto-generated method stub + if (!hasNext()) { + throw new NoSuchElementException(); + } else { + current++; + Note eleNote = nextNote; + if (last == nextNote) { + nextNote = null; + } else { + nextNote = nextNote.next; + } + return eleNote.item; + + } + + } + } + +} From 26f16b0a1999878ed193e308b6c297030fb86d16 Mon Sep 17 00:00:00 2001 From: RalfNick Date: Sat, 25 Feb 2017 12:39:46 +0800 Subject: [PATCH 107/216] Ralf --- .../MyTreeNode.java" | 99 +++++++++++++++++++ 1 file changed, 99 insertions(+) create mode 100644 "group20/925290009/\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232/MyTreeNode.java" diff --git "a/group20/925290009/\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232/MyTreeNode.java" "b/group20/925290009/\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232/MyTreeNode.java" new file mode 100644 index 0000000000..6ca5cecb15 --- /dev/null +++ "b/group20/925290009/\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232/MyTreeNode.java" @@ -0,0 +1,99 @@ +package BasicData; + +//insert +public class MyTreeNode> { + + private T data; + private MyTreeNode left = null; + private MyTreeNode right = null; + private MyTreeNode root = null; + private MyTreeNode cureeTreeNode = null; + + public T getData() { + return data; + } + public void setData(T data) { + this.data = data; + } + public MyTreeNode getLeft() { + return left; + } + public void setLeft(MyTreeNode left) { + this.left = left; + } + public MyTreeNode getRight() { + return right; + } + public void setRight(MyTreeNode right) { + this.right = right; + } + @Override + public String toString() { + StringBuilder string = new StringBuilder(); + string.append("["); + if (cureeTreeNode == null) { + string.append("]"); + return string.toString(); + } else { + string.append(cureeTreeNode.toString()).append("]"); + return string.toString(); + } + } + + public MyTreeNode insert(T o){ + MyTreeNode newNode = new MyTreeNode(); + MyTreeNode current = null; + newNode.setData(o); + if (root == null) { + root = newNode; + cureeTreeNode = newNode;// + return newNode; + } + else { + Digui(o, root); + current = cureeTreeNode; + if (current.getData().compareTo(o) == -1) { + current.right = newNode; + } else { + current.left = newNode; + } + cureeTreeNode = newNode; // + return newNode; + } + + } + + public void Digui(T o,MyTreeNode parentnode){ + cureeTreeNode = parentnode; + if (parentnode.left!= null) { + if (parentnode.getData().compareTo(o) == -1) { + parentnode = parentnode.right; + Digui(o, parentnode); + } + else + return; + } + if (parentnode.right != null) { + if (parentnode.getData().compareTo(o) == 1) { + parentnode = parentnode.left; + Digui(o, parentnode); + } + else + return; + } + } + + public void preOrder(MyTreeNode root) { + visit(root); + if(root.getLeft() != null) { + preOrder(root.getLeft()); + } + if(root.getRight() != null) { + preOrder(root.getRight()); + } + } + + public void visit(MyTreeNode btree) { + System.out.print(btree.getData() + "\t"); + } +} From e492c0001c0ad95d6938b27d6e7e70d5bb967377 Mon Sep 17 00:00:00 2001 From: Hipple Date: Sat, 25 Feb 2017 13:01:39 +0800 Subject: [PATCH 108/216] 2017/02/19/ HomeWork by Hipple --- group18/1159828430/20170219/.classpath | 6 + group18/1159828430/20170219/.gitignore | 1 + group18/1159828430/20170219/.project | 17 ++ .../src/com/coding/basic/ArrayList.java | 145 +++++++++++ .../src/com/coding/basic/Iterator.java | 11 + .../src/com/coding/basic/LinkedList.java | 238 ++++++++++++++++++ .../20170219/src/com/coding/basic/List.java | 13 + .../20170219/src/com/coding/basic/Queue.java | 31 +++ .../20170219/src/com/coding/basic/Stack.java | 57 +++++ group18/1159828430/README.md | 2 + 10 files changed, 521 insertions(+) create mode 100644 group18/1159828430/20170219/.classpath create mode 100644 group18/1159828430/20170219/.gitignore create mode 100644 group18/1159828430/20170219/.project create mode 100644 group18/1159828430/20170219/src/com/coding/basic/ArrayList.java create mode 100644 group18/1159828430/20170219/src/com/coding/basic/Iterator.java create mode 100644 group18/1159828430/20170219/src/com/coding/basic/LinkedList.java create mode 100644 group18/1159828430/20170219/src/com/coding/basic/List.java create mode 100644 group18/1159828430/20170219/src/com/coding/basic/Queue.java create mode 100644 group18/1159828430/20170219/src/com/coding/basic/Stack.java create mode 100644 group18/1159828430/README.md diff --git a/group18/1159828430/20170219/.classpath b/group18/1159828430/20170219/.classpath new file mode 100644 index 0000000000..d171cd4c12 --- /dev/null +++ b/group18/1159828430/20170219/.classpath @@ -0,0 +1,6 @@ + + + + + + diff --git a/group18/1159828430/20170219/.gitignore b/group18/1159828430/20170219/.gitignore new file mode 100644 index 0000000000..ae3c172604 --- /dev/null +++ b/group18/1159828430/20170219/.gitignore @@ -0,0 +1 @@ +/bin/ diff --git a/group18/1159828430/20170219/.project b/group18/1159828430/20170219/.project new file mode 100644 index 0000000000..da66c3a498 --- /dev/null +++ b/group18/1159828430/20170219/.project @@ -0,0 +1,17 @@ + + + 20170219 + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git a/group18/1159828430/20170219/src/com/coding/basic/ArrayList.java b/group18/1159828430/20170219/src/com/coding/basic/ArrayList.java new file mode 100644 index 0000000000..c8db730110 --- /dev/null +++ b/group18/1159828430/20170219/src/com/coding/basic/ArrayList.java @@ -0,0 +1,145 @@ +package com.coding.basic; + +import java.util.Arrays; + +/** + * @author Hipple + * @Time:2017年2月20日 下午8:53:31 + * @version 1.0 + */ +public class ArrayList implements List { + + //元素数量 + private int size = 0; + + //默认容量 + private final int defaultCapacity = 10; + + //存储元素的容器 + private static Object[] elementData; + + //无参构造器 + public ArrayList(){ + elementData = new Object[defaultCapacity]; + } + + //指定容量的构造器 + public ArrayList(int capacity){ + if (capacity < 0) { + //非法参数 + throw new IllegalArgumentException("Illegal Capacity: "+ capacity); + } + elementData = new Object[capacity]; + } + + //添加元素 + public boolean add(Object o){ + ensureCapacityInternal(size + 1); + elementData[size++] = o; + return true; + } + + //添加元素到指定位置 + public void add(int index, Object o){ + rangeCheck(index); + //将当前位置及后续元素后移一位 + ensureCapacityInternal(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 numMoved = size - index - 1; + if (numMoved > 0) { + //要删除的元素不是最后一个时,将当前元素及后续元素左移一位 + System.arraycopy(elementData, index+1, elementData, index, numMoved); + } + elementData[--size] = null;//自动回收 + return oldValue; + } + + //删除元素 + public boolean remove(Object o) { + // 由于ArrayList中允许存放null,因此下面通过两种情况来分别处理。 + if (o == null) { + for (int index = 0; index < size; index++){ + if (elementData[index] == null) { + fastRemove(index); + return true; + } + } + } else { + for (int index = 0; index < size; index++){ + if (o.equals(elementData[index])) { + fastRemove(index); + return true; + } + } + } + return false; + } + + //返回现有元素数量 + public int size(){ + return size; + } + + //是否为空 + public boolean isEmpty(){ + return size == 0; + } + + public Iterator iterator(){ + return null; + } + + //动态增加ArrayList大小 + private void ensureCapacityInternal(int minCapacity) { + //当前数组无法再存放时将数组长度增加至原长度的1.5倍 + if (minCapacity - elementData.length > 0) { + int newCapacity = (elementData.length * 3)/2; + elementData = Arrays.copyOf(elementData, newCapacity); + } + + } + + //检查是否下标越界 + private void rangeCheck(int index){ + if (index < 0 || index > this.size) { + throw new IndexOutOfBoundsException("Index: "+index+", Size: "+size); + } + } + + //删除元素,与remove的 差别就是没有下标检查 + private void fastRemove(int index) { + int numMoved = size - index - 1; + if (numMoved > 0){ + System.arraycopy(elementData, index + 1, elementData, index, numMoved); + } + elementData[--size] = null; + } + +} +class testArrayList{ + public static void main(String[] args) { + ArrayList arrayList = new ArrayList(); + for (int i = 0; i < 10; i++) { + arrayList.add(i+1); + } + arrayList.add(5,15); + arrayList.remove(11); + for (int i = 0; i < arrayList.size(); i++) { + System.out.println("value is "+arrayList.get(i)); + } + } +} diff --git a/group18/1159828430/20170219/src/com/coding/basic/Iterator.java b/group18/1159828430/20170219/src/com/coding/basic/Iterator.java new file mode 100644 index 0000000000..0ce3f762ba --- /dev/null +++ b/group18/1159828430/20170219/src/com/coding/basic/Iterator.java @@ -0,0 +1,11 @@ +package com.coding.basic; +/** + * @author Hipple + * @Time:2017年2月20日 下午8:56:05 + * @version 1.0 + */ +public interface Iterator { + public boolean hasNext(); + public Object next(); + +} \ No newline at end of file diff --git a/group18/1159828430/20170219/src/com/coding/basic/LinkedList.java b/group18/1159828430/20170219/src/com/coding/basic/LinkedList.java new file mode 100644 index 0000000000..433715d5ad --- /dev/null +++ b/group18/1159828430/20170219/src/com/coding/basic/LinkedList.java @@ -0,0 +1,238 @@ +package com.coding.basic; + +import java.util.NoSuchElementException; + +/** + * @author Hipple + * @Time:2017年2月21日 下午8:00:21 + * @version 1.0 + */ +public class LinkedList implements List { + + //头结点 + private Node first; + + //尾结点 + private Node last; + + //元素数量 + private int size = 0; + + //无参构造器 + public LinkedList(){ + } + + public boolean add(Object o){ + linkLast(o); + return true; + } + + public void add(int index , Object o){ + checkPositionIndex(index); + if (index == size) { + linkLast(o); + } else { + linkBefore(o, node(index)); + } + } + + public Object remove(int index){ + checkElementIndex(index); + return unlink(node(index)); + } + + public Object get(int index){ + checkElementIndex(index); + return node(index).data; + } + + public void addFirst(Object o){ + linkFirst(o); + } + + public void addLast(Object o){ + linkLast(o); + } + + public Object removeFirst(){ + final Node f = first; + if (f == null) { + throw new NoSuchElementException(); + } + return unlinkFirst(f); + } + + public Object removeLast(){ + final Node l = last; + if (l == null) { + throw new NoSuchElementException(); + } + return unlinkLast(l); + } + + public int size(){ + return size; + } + + //检查是否为空 + public boolean isEmpty(){ + return size == 0; + } + + //获取头节点 + public Object getFirst() { + final Node f = first; + if (f == null) + throw new NoSuchElementException(); + return f.data; + } + + public Iterator iterator(){ + return null; + } + + //头部增加节点 + private void linkFirst(Object data){ + final Node f = first;//f存储老的头部节点待用 + final Node newNode = new Node(null, data, first);//后项指针指向first,前项指针null + first = newNode;//将新节点变为头部节点 + if (f == null) {//头节点为null则代表链表为空,那么新节点也是既是头结点也是尾结点 + last = newNode; + } else {//老的头部节点前项指针指向新节点 + f.previous = newNode; + } + size++; + } + + //尾部增加节点 + private void linkLast(Object data){ + final Node l = last;//l存储老的尾部节点待用 + final Node newNode = new Node(last, data, null);//前项指针指向last,后项指针null + last = newNode;//将新节点变为尾部节点 + if (l == null) {//尾节点为null则代表链表为空,那么新节点也是既是头结点也是尾结点 + first = newNode; + } else {//老的尾部节点后项指针指向新节点 + l.next = newNode; + } + size++; + } + + //指定index插入节点 + private void linkBefore(Object o, Node oldNode){ + final Node pred = oldNode.previous; + final Node newNode = new Node(pred, o, oldNode); + oldNode.previous = newNode;//旧节点前项指针指向新节点 + if (pred == null) {//pred为null代表oldNode为头节点 + first = newNode; + } else { + pred.next = newNode; + } + size++; + + } + + //删除头部节点并返回节点值 + private Object unlinkFirst(Node f){ + final Object element = f.data;//保存头节点的值 + final Node next = f.next; + f.data = null;//GC自动回收 + f.next = null; + first = next;//将头节点的下一节点变为头节点 + if (next == null) {//如果next为空,则代表f同时为尾节点,此时整个链表为空 + last = null; + } else { + next.previous = null; + } + size--; + return element; + } + + //删除尾部节点并返回该节点的值 + private Object unlinkLast(Node l){ + final Object element = l.data;//保存尾节点的值 + final Node prev = l.previous; + l.previous = null; + l.data = null;//GC自动回收 + last = prev;//将尾节点的上一节点变为尾节点 + if (prev == null) {//如果prev为空,则代表l同时为头节点,此时整个链表为空 + first = null; + } else { + prev.next = null; + } + size--; + return element; + } + + //删除指定节点 + private Object unlink(Node x){ + final Object element = x.data; + final Node prev = x.previous; + final Node next = x.next; + if (prev == null) {//prev为空代表要删除的是头节点 + unlinkFirst(x); + } else {//prev后项指针指向next + prev.next = next; + x.previous = null; + } + if (next == null) {//next为空代表要删除的是尾节点 + unlinkLast(x); + } else {//next前项指针指向prev + next.previous = prev; + x.next = null; + } + x.data = null; + size--; + return element; + } + + //查找结点 + private Node node(int index){ + if (index < (size>>1)) {//判断循环方向 + Node x = first; + for (int i = 0; i < index; i++) { + x = x.next; + } + return x; + } else { + Node x = last; + for (int i = size - 1; i > index; i--) { + x = x.previous; + } + return x; + } + } + + //检查下标是否合法 + private void checkElementIndex(int index){ + if (!isElementIndex(index)) { + throw new IndexOutOfBoundsException("Index: "+index+", Size: "+size); + } + } + + private void checkPositionIndex(int index){ + if (!isPositionIndex(index)) { + throw new IndexOutOfBoundsException("Index: "+index+", Size: "+size); + } + } + + //检查该参数是否为现有元素的索引。 + private boolean isElementIndex(int index) { + return index >= 0 && index < size; + } + + //检查参数是否是迭代器或添加操作的有效位置的索引 + private boolean isPositionIndex(int index) { + return index >= 0 && index <= size; + } + + private static class Node{ + Object data; + Node next; + Node previous; + Node(Node previous, Object data, Node next) { + this.data = data; + this.next = next; + this.previous = previous; + } + } +} \ No newline at end of file diff --git a/group18/1159828430/20170219/src/com/coding/basic/List.java b/group18/1159828430/20170219/src/com/coding/basic/List.java new file mode 100644 index 0000000000..08e0f9e2d5 --- /dev/null +++ b/group18/1159828430/20170219/src/com/coding/basic/List.java @@ -0,0 +1,13 @@ +package com.coding.basic; +/** + * @author Hipple + * @Time:2017年2月20日 下午8:52:08 + * @version 1.0 + */ +public interface List { + public boolean add(Object o); + public void add(int index, Object o); + public Object get(int index); + public Object remove(int index); + public int size(); +} \ No newline at end of file diff --git a/group18/1159828430/20170219/src/com/coding/basic/Queue.java b/group18/1159828430/20170219/src/com/coding/basic/Queue.java new file mode 100644 index 0000000000..e91779fdb2 --- /dev/null +++ b/group18/1159828430/20170219/src/com/coding/basic/Queue.java @@ -0,0 +1,31 @@ +package com.coding.basic; +/** + * @author Hipple + * @Time:2017年2月23日 下午11:00:00 + * @version 1.0 + */ + +public class Queue { + private LinkedList elementData = new LinkedList(); + + public Queue(){ + + } + + public void enQueue(Object o){ + elementData.addLast(o); + } + + public Object deQueue(){ + elementData.getFirst(); + return null; + } + + public boolean isEmpty(){ + return elementData.isEmpty(); + } + + public int size(){ + return elementData.size(); + } +} diff --git a/group18/1159828430/20170219/src/com/coding/basic/Stack.java b/group18/1159828430/20170219/src/com/coding/basic/Stack.java new file mode 100644 index 0000000000..3005fa2ef7 --- /dev/null +++ b/group18/1159828430/20170219/src/com/coding/basic/Stack.java @@ -0,0 +1,57 @@ +package com.coding.basic; + +import java.util.EmptyStackException; + +/** + * @author Hipple + * @Time:2017年2月23日 下午10:59:39 + * @version 1.0 + */ +public class Stack { + private ArrayList elementData = new ArrayList(); + + public Stack(){ + + } + + //入栈 + public void push(Object o){ + elementData.add(o); + } + + //出栈 + public Object pop(){ + if (elementData.isEmpty()) { + throw new EmptyStackException(); + } + final Object o = peek(); + elementData.remove(o);//重新写根据对象remove + return o; + } + + public Object peek(){ + if (elementData.isEmpty()) { + throw new EmptyStackException(); + } + final Object o = elementData.get(elementData.size()-1); + return o; + } + public boolean isEmpty(){ + return size() == 0; + } + public int size(){ + return elementData.size(); + } +} +class TestMyStack { + public static void main(String[] args){ + Stack myStack=new Stack(); + myStack.push("a"); + myStack.push(2); + myStack.push("123"); + myStack.push("ahu"); + while(!myStack.isEmpty()){ + System.out.println(myStack.pop()); + } + } +} diff --git a/group18/1159828430/README.md b/group18/1159828430/README.md new file mode 100644 index 0000000000..387ebebf6d --- /dev/null +++ b/group18/1159828430/README.md @@ -0,0 +1,2 @@ +# 2017编程提高群 +这里是1159828430 大连—书生 的代码提交区 From 6008f71683a2d15d5ba805334ece37753f8ae6c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E5=8A=A0=E6=B6=9B?= Date: Sat, 25 Feb 2017 13:26:48 +0800 Subject: [PATCH 109/216] =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../108621969/com/coding/basic/ArrayList.java | 39 +++++++++++++ .../com/coding/basic/BinaryTreeNode.java | 38 ++++++++++++ .../108621969/com/coding/basic/Iterator.java | 9 +++ .../com/coding/basic/LinkedList.java | 58 +++++++++++++++++++ group08/108621969/com/coding/basic/List.java | 12 ++++ group08/108621969/com/coding/basic/Queue.java | 21 +++++++ group08/108621969/com/coding/basic/Stack.java | 7 +++ 7 files changed, 184 insertions(+) create mode 100644 group08/108621969/com/coding/basic/ArrayList.java create mode 100644 group08/108621969/com/coding/basic/BinaryTreeNode.java create mode 100644 group08/108621969/com/coding/basic/Iterator.java create mode 100644 group08/108621969/com/coding/basic/LinkedList.java create mode 100644 group08/108621969/com/coding/basic/List.java create mode 100644 group08/108621969/com/coding/basic/Queue.java create mode 100644 group08/108621969/com/coding/basic/Stack.java diff --git a/group08/108621969/com/coding/basic/ArrayList.java b/group08/108621969/com/coding/basic/ArrayList.java new file mode 100644 index 0000000000..322dbf4cb3 --- /dev/null +++ b/group08/108621969/com/coding/basic/ArrayList.java @@ -0,0 +1,39 @@ +package com.coding.basic; + +/** + * Created by zhangjiatao on 2017/2/25. + */ +public class ArrayList implements List { + private int size = 0; + private Object[] elementData = new Object[100]; + + @Override + public void add(Object o) { + + } + + @Override + public void add(int index, Object o) { + + } + + @Override + public Object get(int index) { + return null; + } + + @Override + public Object remove(int index) { + return null; + } + + @Override + public int size() { + return 0; + } + + public Iterator iterator(){ + return null; + } + +} diff --git a/group08/108621969/com/coding/basic/BinaryTreeNode.java b/group08/108621969/com/coding/basic/BinaryTreeNode.java new file mode 100644 index 0000000000..75fb4efad2 --- /dev/null +++ b/group08/108621969/com/coding/basic/BinaryTreeNode.java @@ -0,0 +1,38 @@ +package com.coding.basic; + +/** + * Created by zhangjiatao on 2017/2/25. + */ +public class BinaryTreeNode { + private Object data; + private BinaryTreeNode left; + private BinaryTreeNode right; + + 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) { + return null; + } +} diff --git a/group08/108621969/com/coding/basic/Iterator.java b/group08/108621969/com/coding/basic/Iterator.java new file mode 100644 index 0000000000..ae5e36f464 --- /dev/null +++ b/group08/108621969/com/coding/basic/Iterator.java @@ -0,0 +1,9 @@ +package com.coding.basic; + +/** + * Created by zhangjiatao on 2017/2/25. + */ +public interface Iterator { + public boolean hasNext(); + public Object next(); +} diff --git a/group08/108621969/com/coding/basic/LinkedList.java b/group08/108621969/com/coding/basic/LinkedList.java new file mode 100644 index 0000000000..ac58b002a5 --- /dev/null +++ b/group08/108621969/com/coding/basic/LinkedList.java @@ -0,0 +1,58 @@ +package com.coding.basic; + +/** + * Created by zhangjiatao on 2017/2/25. + */ +public class LinkedList implements List { + private Node head; + + @Override + public void add(Object o) { + + } + + @Override + public void add(int index, Object o) { + + } + + @Override + public Object get(int index) { + return null; + } + + @Override + public Object remove(int index) { + return null; + } + + @Override + public int size() { + return 0; + } + + public void addFirst(Object o) { + + } + + public void addLast(Object o) { + + } + + public Object removeFirst() { + return null; + } + + public Object removeLast() { + return null; + } + + public Iterator iterator() { + return null; + } + + private static class Node { + Object data; + Node next; + } +} diff --git a/group08/108621969/com/coding/basic/List.java b/group08/108621969/com/coding/basic/List.java new file mode 100644 index 0000000000..30a4b4e7cb --- /dev/null +++ b/group08/108621969/com/coding/basic/List.java @@ -0,0 +1,12 @@ +package com.coding.basic; + +/** + * Created by zhangjiatao on 2017/2/25. + */ +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(); +} diff --git a/group08/108621969/com/coding/basic/Queue.java b/group08/108621969/com/coding/basic/Queue.java new file mode 100644 index 0000000000..bd282cbaf1 --- /dev/null +++ b/group08/108621969/com/coding/basic/Queue.java @@ -0,0 +1,21 @@ +package com.coding.basic; + +/** + * Created by zhangjiatao on 2017/2/25. + */ +public class Queue { + public void enQueue(Object o) { + } + + public Object deQueue() { + return null; + } + + public boolean isEmpty() { + return false; + } + + public int size() { + return -1; + } +} diff --git a/group08/108621969/com/coding/basic/Stack.java b/group08/108621969/com/coding/basic/Stack.java new file mode 100644 index 0000000000..6460d91c30 --- /dev/null +++ b/group08/108621969/com/coding/basic/Stack.java @@ -0,0 +1,7 @@ +package com.coding.basic; + +/** + * Created by zhangjiatao on 2017/2/25. + */ +public class Stack { +} From 1b03166c92f6377056cbffc832d962840a6afa83 Mon Sep 17 00:00:00 2001 From: "haibo.yu" Date: Sat, 25 Feb 2017 13:34:33 +0800 Subject: [PATCH 110/216] update --- .idea/coding2017-1.iml | 9 + .idea/compiler.xml | 1 - .idea/misc.xml | 12 + .idea/modules.xml | 8 + .idea/workspace.xml | 779 ++++++++++++++++++ ...72\346\234\254\347\273\223\346\236\204.md" | 54 ++ .../first/collection/AbstractCollection.java | 0 .../homework/first/collection/Collection.java | 0 .../homework/first/collection/Iterator.java | 0 .../first/collection/list/ArrayList.java | 0 .../first/collection/list/LinkedList.java | 0 .../homework/first/collection/list/List.java | 0 .../first/collection/queue/LinkQueue.java | 0 .../first/collection/queue/Queue.java | 0 .../first/collection/stack/LinkStack.java | 0 .../first/collection/stack/Stack.java | 0 .../homework/first/tree/AbstractTree.java | 0 .../src}/homework/first/tree/BinaryNode.java | 0 .../src}/homework/first/tree/BinaryTree.java | 0 .../src}/homework/first/tree/Tree.java | 0 .../src}/homework/utils/Math.java | 0 group08/286060098/practice/pom.xml | 66 -- group08/286060098/practice/practice.iml | 16 - group08/286060098/readme.md | 6 +- 24 files changed, 864 insertions(+), 87 deletions(-) create mode 100644 .idea/coding2017-1.iml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/workspace.xml create mode 100644 "group08/286060098/2-26/blong/\345\237\272\346\234\254\347\273\223\346\236\204.md" rename group08/286060098/{practice/src/com/pop/practice => 2-26/src}/homework/first/collection/AbstractCollection.java (100%) rename group08/286060098/{practice/src/com/pop/practice => 2-26/src}/homework/first/collection/Collection.java (100%) rename group08/286060098/{practice/src/com/pop/practice => 2-26/src}/homework/first/collection/Iterator.java (100%) rename group08/286060098/{practice/src/com/pop/practice => 2-26/src}/homework/first/collection/list/ArrayList.java (100%) rename group08/286060098/{practice/src/com/pop/practice => 2-26/src}/homework/first/collection/list/LinkedList.java (100%) rename group08/286060098/{practice/src/com/pop/practice => 2-26/src}/homework/first/collection/list/List.java (100%) rename group08/286060098/{practice/src/com/pop/practice => 2-26/src}/homework/first/collection/queue/LinkQueue.java (100%) rename group08/286060098/{practice/src/com/pop/practice => 2-26/src}/homework/first/collection/queue/Queue.java (100%) rename group08/286060098/{practice/src/com/pop/practice => 2-26/src}/homework/first/collection/stack/LinkStack.java (100%) rename group08/286060098/{practice/src/com/pop/practice => 2-26/src}/homework/first/collection/stack/Stack.java (100%) rename group08/286060098/{practice/src/com/pop/practice => 2-26/src}/homework/first/tree/AbstractTree.java (100%) rename group08/286060098/{practice/src/com/pop/practice => 2-26/src}/homework/first/tree/BinaryNode.java (100%) rename group08/286060098/{practice/src/com/pop/practice => 2-26/src}/homework/first/tree/BinaryTree.java (100%) rename group08/286060098/{practice/src/com/pop/practice => 2-26/src}/homework/first/tree/Tree.java (100%) rename group08/286060098/{practice/src/com/pop/practice => 2-26/src}/homework/utils/Math.java (100%) delete mode 100644 group08/286060098/practice/pom.xml delete mode 100644 group08/286060098/practice/practice.iml diff --git a/.idea/coding2017-1.iml b/.idea/coding2017-1.iml new file mode 100644 index 0000000000..d6ebd48059 --- /dev/null +++ b/.idea/coding2017-1.iml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/compiler.xml b/.idea/compiler.xml index ac91500eae..892202a69b 100644 --- a/.idea/compiler.xml +++ b/.idea/compiler.xml @@ -6,7 +6,6 @@ - diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000000..9f2de1d4b9 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,12 @@ + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000000..a7ceae3461 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml new file mode 100644 index 0000000000..1b74723b55 --- /dev/null +++ b/.idea/workspace.xml @@ -0,0 +1,779 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + DEFINITION_ORDER + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1487990722890 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git "a/group08/286060098/2-26/blong/\345\237\272\346\234\254\347\273\223\346\236\204.md" "b/group08/286060098/2-26/blong/\345\237\272\346\234\254\347\273\223\346\236\204.md" new file mode 100644 index 0000000000..23d6a12c12 --- /dev/null +++ "b/group08/286060098/2-26/blong/\345\237\272\346\234\254\347\273\223\346\236\204.md" @@ -0,0 +1,54 @@ +#指令集 +---- +通俗的理解,指令集就是CPU能认识的语言,指令集运行于一定的微架构之上.指令集有很多,比如复杂指令集AMD,INTEL用的,精简指令集ARM用的 + +# CPU +--- +CPU使整个计算机的核心,进行整体的逻辑操作,他的运算速度很快,我们在主机上的操作最终都会变成原子指令由CPU来执行 + +历史上的CPU对程序的执行存在很多的执行方案,比如说时间片法,令牌环之类的的,每个程序依次交换执行,这样就存在一个问题,程序的换入换出需要保留当前执行情况的现场,还要加载历史程序的历史现场 + +这些数据存储在哪里?由于CPU的速度过快,而我们是用的大规模的数据存储一般是价格较低速度较慢的磁盘.如果说CPU直接从磁盘加载,CPU的资源利用率会变的很低,会严重浪费了CPU的运算能力.因此我们需要缓存 + +# 缓存 +--- +缓存的出是为加载相关的数据提供CPU路基运算的存储,CPU中的寄存器就是一种缓存,这是CPU本身对操作的优化.但是说这样高速的缓存本身的制造成本是非常高的,完全使用这样高性能的存储设备并不是一个具有性价比的解决方案 + +因此出现了多级缓存,常见的如INTEL的L1,L2,L3,这是多级缓存的一种实现,随着层级的升高,存储空间在升高,速度在下将,通过诸如LFU、LRU的缓存置换算法优化相关的缓存命中率提高CPU利用率 + +理解 Cache --> 传送门 `http://www.mouseos.com/arch/cache.html` + +即便是L3的缓存也以就是十分昂贵的,依旧是很难大规模使用的存储设备,因此需要速度相对较快,但是价格又是普通用户可以接收的中间设备,比如内存 + +# 内存 +--- +内存的存在实际上解决了很多问题,他的价格相对高速缓存来说相对较低,能够提供较大的存储,也可以看作缓存的一种,将磁盘的数据预加载,供高速缓存加载. + +内存有很多的工作频率,内存主频越高在一定程度上代表着内存所能达到的速度越快,计算机系统的时钟速度是以频率来衡量的.晶体振荡器控制着时钟速度,在石英晶片上加上电压,其就以正弦波的形式震动起来,这一震动可以通过晶片的形变和大小记录下来。晶体的震动以正弦调和变化的电流的形式表现出来,这一变化的电流就是时钟信号. + +内存是一种断电后存储洗洗就会丢失的存储设备,这就尴尬了,对于宕机我们并无法预测,我们需要将众多的资源数据进行存储,这个时候我们需要硬盘. + +# 硬盘 +--- +硬盘对于我们而言他的速度反而是其次的,他最大的意义是数据的安全性.在数据安全的基础之上我们再去追求硬盘的速度. + +硬盘有很多比如说机械硬盘,固态硬盘,PCI硬盘.机械硬盘.机械硬盘的大体结构如下图,数据的读取需要磁头的移动读取扇区上的信息,这时候磁盘的转速就很重要了 +![yingpan.jpg-19.4kB][1] + +固态硬盘可以看作式闪存的堆积,闪存的制造价格的降低带来了他的春天,但是闪存的数据擦除次数有限,固态硬盘的寿命要注意 + + + + + + + + + + + + + + + + [1]: http://static.zybuluo.com/Haipop/finuq0bs9p1d90q38bccqjea/yingpan.jpg \ No newline at end of file diff --git a/group08/286060098/practice/src/com/pop/practice/homework/first/collection/AbstractCollection.java b/group08/286060098/2-26/src/homework/first/collection/AbstractCollection.java similarity index 100% rename from group08/286060098/practice/src/com/pop/practice/homework/first/collection/AbstractCollection.java rename to group08/286060098/2-26/src/homework/first/collection/AbstractCollection.java diff --git a/group08/286060098/practice/src/com/pop/practice/homework/first/collection/Collection.java b/group08/286060098/2-26/src/homework/first/collection/Collection.java similarity index 100% rename from group08/286060098/practice/src/com/pop/practice/homework/first/collection/Collection.java rename to group08/286060098/2-26/src/homework/first/collection/Collection.java diff --git a/group08/286060098/practice/src/com/pop/practice/homework/first/collection/Iterator.java b/group08/286060098/2-26/src/homework/first/collection/Iterator.java similarity index 100% rename from group08/286060098/practice/src/com/pop/practice/homework/first/collection/Iterator.java rename to group08/286060098/2-26/src/homework/first/collection/Iterator.java diff --git a/group08/286060098/practice/src/com/pop/practice/homework/first/collection/list/ArrayList.java b/group08/286060098/2-26/src/homework/first/collection/list/ArrayList.java similarity index 100% rename from group08/286060098/practice/src/com/pop/practice/homework/first/collection/list/ArrayList.java rename to group08/286060098/2-26/src/homework/first/collection/list/ArrayList.java diff --git a/group08/286060098/practice/src/com/pop/practice/homework/first/collection/list/LinkedList.java b/group08/286060098/2-26/src/homework/first/collection/list/LinkedList.java similarity index 100% rename from group08/286060098/practice/src/com/pop/practice/homework/first/collection/list/LinkedList.java rename to group08/286060098/2-26/src/homework/first/collection/list/LinkedList.java diff --git a/group08/286060098/practice/src/com/pop/practice/homework/first/collection/list/List.java b/group08/286060098/2-26/src/homework/first/collection/list/List.java similarity index 100% rename from group08/286060098/practice/src/com/pop/practice/homework/first/collection/list/List.java rename to group08/286060098/2-26/src/homework/first/collection/list/List.java diff --git a/group08/286060098/practice/src/com/pop/practice/homework/first/collection/queue/LinkQueue.java b/group08/286060098/2-26/src/homework/first/collection/queue/LinkQueue.java similarity index 100% rename from group08/286060098/practice/src/com/pop/practice/homework/first/collection/queue/LinkQueue.java rename to group08/286060098/2-26/src/homework/first/collection/queue/LinkQueue.java diff --git a/group08/286060098/practice/src/com/pop/practice/homework/first/collection/queue/Queue.java b/group08/286060098/2-26/src/homework/first/collection/queue/Queue.java similarity index 100% rename from group08/286060098/practice/src/com/pop/practice/homework/first/collection/queue/Queue.java rename to group08/286060098/2-26/src/homework/first/collection/queue/Queue.java diff --git a/group08/286060098/practice/src/com/pop/practice/homework/first/collection/stack/LinkStack.java b/group08/286060098/2-26/src/homework/first/collection/stack/LinkStack.java similarity index 100% rename from group08/286060098/practice/src/com/pop/practice/homework/first/collection/stack/LinkStack.java rename to group08/286060098/2-26/src/homework/first/collection/stack/LinkStack.java diff --git a/group08/286060098/practice/src/com/pop/practice/homework/first/collection/stack/Stack.java b/group08/286060098/2-26/src/homework/first/collection/stack/Stack.java similarity index 100% rename from group08/286060098/practice/src/com/pop/practice/homework/first/collection/stack/Stack.java rename to group08/286060098/2-26/src/homework/first/collection/stack/Stack.java diff --git a/group08/286060098/practice/src/com/pop/practice/homework/first/tree/AbstractTree.java b/group08/286060098/2-26/src/homework/first/tree/AbstractTree.java similarity index 100% rename from group08/286060098/practice/src/com/pop/practice/homework/first/tree/AbstractTree.java rename to group08/286060098/2-26/src/homework/first/tree/AbstractTree.java diff --git a/group08/286060098/practice/src/com/pop/practice/homework/first/tree/BinaryNode.java b/group08/286060098/2-26/src/homework/first/tree/BinaryNode.java similarity index 100% rename from group08/286060098/practice/src/com/pop/practice/homework/first/tree/BinaryNode.java rename to group08/286060098/2-26/src/homework/first/tree/BinaryNode.java diff --git a/group08/286060098/practice/src/com/pop/practice/homework/first/tree/BinaryTree.java b/group08/286060098/2-26/src/homework/first/tree/BinaryTree.java similarity index 100% rename from group08/286060098/practice/src/com/pop/practice/homework/first/tree/BinaryTree.java rename to group08/286060098/2-26/src/homework/first/tree/BinaryTree.java diff --git a/group08/286060098/practice/src/com/pop/practice/homework/first/tree/Tree.java b/group08/286060098/2-26/src/homework/first/tree/Tree.java similarity index 100% rename from group08/286060098/practice/src/com/pop/practice/homework/first/tree/Tree.java rename to group08/286060098/2-26/src/homework/first/tree/Tree.java diff --git a/group08/286060098/practice/src/com/pop/practice/homework/utils/Math.java b/group08/286060098/2-26/src/homework/utils/Math.java similarity index 100% rename from group08/286060098/practice/src/com/pop/practice/homework/utils/Math.java rename to group08/286060098/2-26/src/homework/utils/Math.java diff --git a/group08/286060098/practice/pom.xml b/group08/286060098/practice/pom.xml deleted file mode 100644 index 66a92317c4..0000000000 --- a/group08/286060098/practice/pom.xml +++ /dev/null @@ -1,66 +0,0 @@ - - - - practice - com.pop.practice - 1.0.0- - - 4.0.0 - - - 4.1 - 3.5 - 19.0 - - 1.7 - 1.7 - - true - - - - - - org.apache.commons - commons-collections4 - ${commons-collections4.version} - - - - org.apache.commons - commons-lang3 - ${commons-lang3.version} - - - - com.google.guava - guava - ${guava.version} - - - - - - - - org.apache.maven.plugins - maven-compiler-plugin - - ${jdk.source.version} - ${jdk.target.version} - - - - org.apache.maven.plugins - maven-surefire-plugin - - ${maven-surefire-plugin.skip} - - - - - - - \ No newline at end of file diff --git a/group08/286060098/practice/practice.iml b/group08/286060098/practice/practice.iml deleted file mode 100644 index d830f4a93e..0000000000 --- a/group08/286060098/practice/practice.iml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/group08/286060098/readme.md b/group08/286060098/readme.md index be6cfb2ecb..a6325e29da 100644 --- a/group08/286060098/readme.md +++ b/group08/286060098/readme.md @@ -2,18 +2,16 @@ --- -practice是我在自己目录下创建的一个maven项目 - ### 文件夹说明 | 文件夹 | 描述   | | -------- | :----: | -| doc |相关的说明文档 | +| blong |相关的说明文档,博客 | | script | 相关的脚本信息,如有sql脚本也请在这里查找 | | src | 代码目录| ### 代码说明 -> 作业在com.pop.practice.homework目录下,比如first标示第一周,以此类推 +> 作业在homework目录下 From 17c650ae9639c3918a03e49e86b61d33a54764cc Mon Sep 17 00:00:00 2001 From: "haibo.yu" Date: Sat, 25 Feb 2017 13:40:10 +0800 Subject: [PATCH 111/216] update --- .idea/coding2017-1.iml | 9 - .idea/compiler.xml | 15 - .../Maven__com_google_guava_guava_19_0.xml | 13 - ...pache_commons_commons_collections4_4_1.xml | 13 - ...__org_apache_commons_commons_lang3_3_5.xml | 13 - .idea/misc.xml | 12 - .idea/modules.xml | 8 - .idea/vcs.xml | 6 - .idea/workspace.xml | 779 ------------------ 9 files changed, 868 deletions(-) delete mode 100644 .idea/coding2017-1.iml delete mode 100644 .idea/compiler.xml delete mode 100644 .idea/libraries/Maven__com_google_guava_guava_19_0.xml delete mode 100644 .idea/libraries/Maven__org_apache_commons_commons_collections4_4_1.xml delete mode 100644 .idea/libraries/Maven__org_apache_commons_commons_lang3_3_5.xml delete mode 100644 .idea/misc.xml delete mode 100644 .idea/modules.xml delete mode 100644 .idea/vcs.xml delete mode 100644 .idea/workspace.xml diff --git a/.idea/coding2017-1.iml b/.idea/coding2017-1.iml deleted file mode 100644 index d6ebd48059..0000000000 --- a/.idea/coding2017-1.iml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/.idea/compiler.xml b/.idea/compiler.xml deleted file mode 100644 index 892202a69b..0000000000 --- a/.idea/compiler.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__com_google_guava_guava_19_0.xml b/.idea/libraries/Maven__com_google_guava_guava_19_0.xml deleted file mode 100644 index 68e23ccd00..0000000000 --- a/.idea/libraries/Maven__com_google_guava_guava_19_0.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_commons_commons_collections4_4_1.xml b/.idea/libraries/Maven__org_apache_commons_commons_collections4_4_1.xml deleted file mode 100644 index 1e0b53d1fc..0000000000 --- a/.idea/libraries/Maven__org_apache_commons_commons_collections4_4_1.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_commons_commons_lang3_3_5.xml b/.idea/libraries/Maven__org_apache_commons_commons_lang3_3_5.xml deleted file mode 100644 index 666266cc33..0000000000 --- a/.idea/libraries/Maven__org_apache_commons_commons_lang3_3_5.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml deleted file mode 100644 index 9f2de1d4b9..0000000000 --- a/.idea/misc.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml deleted file mode 100644 index a7ceae3461..0000000000 --- a/.idea/modules.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml deleted file mode 100644 index 35eb1ddfbb..0000000000 --- a/.idea/vcs.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml deleted file mode 100644 index 1b74723b55..0000000000 --- a/.idea/workspace.xml +++ /dev/null @@ -1,779 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - true - DEFINITION_ORDER - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1487990722890 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file From 71d973785d5745178da246a21f962180a4b6d5db Mon Sep 17 00:00:00 2001 From: "haibo.yu" Date: Sat, 25 Feb 2017 13:59:24 +0800 Subject: [PATCH 112/216] update --- .../practice}/homework/first/collection/AbstractCollection.java | 0 .../pop/practice}/homework/first/collection/Collection.java | 0 .../pop/practice}/homework/first/collection/Iterator.java | 0 .../pop/practice}/homework/first/collection/list/ArrayList.java | 0 .../pop/practice}/homework/first/collection/list/LinkedList.java | 0 .../pop/practice}/homework/first/collection/list/List.java | 0 .../pop/practice}/homework/first/collection/queue/LinkQueue.java | 0 .../pop/practice}/homework/first/collection/queue/Queue.java | 0 .../pop/practice}/homework/first/collection/stack/LinkStack.java | 0 .../pop/practice}/homework/first/collection/stack/Stack.java | 0 .../{ => com/pop/practice}/homework/first/tree/AbstractTree.java | 0 .../{ => com/pop/practice}/homework/first/tree/BinaryNode.java | 0 .../{ => com/pop/practice}/homework/first/tree/BinaryTree.java | 0 .../2-26/src/{ => com/pop/practice}/homework/first/tree/Tree.java | 0 .../2-26/src/{ => com/pop/practice}/homework/utils/Math.java | 0 15 files changed, 0 insertions(+), 0 deletions(-) rename group08/286060098/2-26/src/{ => com/pop/practice}/homework/first/collection/AbstractCollection.java (100%) rename group08/286060098/2-26/src/{ => com/pop/practice}/homework/first/collection/Collection.java (100%) rename group08/286060098/2-26/src/{ => com/pop/practice}/homework/first/collection/Iterator.java (100%) rename group08/286060098/2-26/src/{ => com/pop/practice}/homework/first/collection/list/ArrayList.java (100%) rename group08/286060098/2-26/src/{ => com/pop/practice}/homework/first/collection/list/LinkedList.java (100%) rename group08/286060098/2-26/src/{ => com/pop/practice}/homework/first/collection/list/List.java (100%) rename group08/286060098/2-26/src/{ => com/pop/practice}/homework/first/collection/queue/LinkQueue.java (100%) rename group08/286060098/2-26/src/{ => com/pop/practice}/homework/first/collection/queue/Queue.java (100%) rename group08/286060098/2-26/src/{ => com/pop/practice}/homework/first/collection/stack/LinkStack.java (100%) rename group08/286060098/2-26/src/{ => com/pop/practice}/homework/first/collection/stack/Stack.java (100%) rename group08/286060098/2-26/src/{ => com/pop/practice}/homework/first/tree/AbstractTree.java (100%) rename group08/286060098/2-26/src/{ => com/pop/practice}/homework/first/tree/BinaryNode.java (100%) rename group08/286060098/2-26/src/{ => com/pop/practice}/homework/first/tree/BinaryTree.java (100%) rename group08/286060098/2-26/src/{ => com/pop/practice}/homework/first/tree/Tree.java (100%) rename group08/286060098/2-26/src/{ => com/pop/practice}/homework/utils/Math.java (100%) diff --git a/group08/286060098/2-26/src/homework/first/collection/AbstractCollection.java b/group08/286060098/2-26/src/com/pop/practice/homework/first/collection/AbstractCollection.java similarity index 100% rename from group08/286060098/2-26/src/homework/first/collection/AbstractCollection.java rename to group08/286060098/2-26/src/com/pop/practice/homework/first/collection/AbstractCollection.java diff --git a/group08/286060098/2-26/src/homework/first/collection/Collection.java b/group08/286060098/2-26/src/com/pop/practice/homework/first/collection/Collection.java similarity index 100% rename from group08/286060098/2-26/src/homework/first/collection/Collection.java rename to group08/286060098/2-26/src/com/pop/practice/homework/first/collection/Collection.java diff --git a/group08/286060098/2-26/src/homework/first/collection/Iterator.java b/group08/286060098/2-26/src/com/pop/practice/homework/first/collection/Iterator.java similarity index 100% rename from group08/286060098/2-26/src/homework/first/collection/Iterator.java rename to group08/286060098/2-26/src/com/pop/practice/homework/first/collection/Iterator.java diff --git a/group08/286060098/2-26/src/homework/first/collection/list/ArrayList.java b/group08/286060098/2-26/src/com/pop/practice/homework/first/collection/list/ArrayList.java similarity index 100% rename from group08/286060098/2-26/src/homework/first/collection/list/ArrayList.java rename to group08/286060098/2-26/src/com/pop/practice/homework/first/collection/list/ArrayList.java diff --git a/group08/286060098/2-26/src/homework/first/collection/list/LinkedList.java b/group08/286060098/2-26/src/com/pop/practice/homework/first/collection/list/LinkedList.java similarity index 100% rename from group08/286060098/2-26/src/homework/first/collection/list/LinkedList.java rename to group08/286060098/2-26/src/com/pop/practice/homework/first/collection/list/LinkedList.java diff --git a/group08/286060098/2-26/src/homework/first/collection/list/List.java b/group08/286060098/2-26/src/com/pop/practice/homework/first/collection/list/List.java similarity index 100% rename from group08/286060098/2-26/src/homework/first/collection/list/List.java rename to group08/286060098/2-26/src/com/pop/practice/homework/first/collection/list/List.java diff --git a/group08/286060098/2-26/src/homework/first/collection/queue/LinkQueue.java b/group08/286060098/2-26/src/com/pop/practice/homework/first/collection/queue/LinkQueue.java similarity index 100% rename from group08/286060098/2-26/src/homework/first/collection/queue/LinkQueue.java rename to group08/286060098/2-26/src/com/pop/practice/homework/first/collection/queue/LinkQueue.java diff --git a/group08/286060098/2-26/src/homework/first/collection/queue/Queue.java b/group08/286060098/2-26/src/com/pop/practice/homework/first/collection/queue/Queue.java similarity index 100% rename from group08/286060098/2-26/src/homework/first/collection/queue/Queue.java rename to group08/286060098/2-26/src/com/pop/practice/homework/first/collection/queue/Queue.java diff --git a/group08/286060098/2-26/src/homework/first/collection/stack/LinkStack.java b/group08/286060098/2-26/src/com/pop/practice/homework/first/collection/stack/LinkStack.java similarity index 100% rename from group08/286060098/2-26/src/homework/first/collection/stack/LinkStack.java rename to group08/286060098/2-26/src/com/pop/practice/homework/first/collection/stack/LinkStack.java diff --git a/group08/286060098/2-26/src/homework/first/collection/stack/Stack.java b/group08/286060098/2-26/src/com/pop/practice/homework/first/collection/stack/Stack.java similarity index 100% rename from group08/286060098/2-26/src/homework/first/collection/stack/Stack.java rename to group08/286060098/2-26/src/com/pop/practice/homework/first/collection/stack/Stack.java diff --git a/group08/286060098/2-26/src/homework/first/tree/AbstractTree.java b/group08/286060098/2-26/src/com/pop/practice/homework/first/tree/AbstractTree.java similarity index 100% rename from group08/286060098/2-26/src/homework/first/tree/AbstractTree.java rename to group08/286060098/2-26/src/com/pop/practice/homework/first/tree/AbstractTree.java diff --git a/group08/286060098/2-26/src/homework/first/tree/BinaryNode.java b/group08/286060098/2-26/src/com/pop/practice/homework/first/tree/BinaryNode.java similarity index 100% rename from group08/286060098/2-26/src/homework/first/tree/BinaryNode.java rename to group08/286060098/2-26/src/com/pop/practice/homework/first/tree/BinaryNode.java diff --git a/group08/286060098/2-26/src/homework/first/tree/BinaryTree.java b/group08/286060098/2-26/src/com/pop/practice/homework/first/tree/BinaryTree.java similarity index 100% rename from group08/286060098/2-26/src/homework/first/tree/BinaryTree.java rename to group08/286060098/2-26/src/com/pop/practice/homework/first/tree/BinaryTree.java diff --git a/group08/286060098/2-26/src/homework/first/tree/Tree.java b/group08/286060098/2-26/src/com/pop/practice/homework/first/tree/Tree.java similarity index 100% rename from group08/286060098/2-26/src/homework/first/tree/Tree.java rename to group08/286060098/2-26/src/com/pop/practice/homework/first/tree/Tree.java diff --git a/group08/286060098/2-26/src/homework/utils/Math.java b/group08/286060098/2-26/src/com/pop/practice/homework/utils/Math.java similarity index 100% rename from group08/286060098/2-26/src/homework/utils/Math.java rename to group08/286060098/2-26/src/com/pop/practice/homework/utils/Math.java From f3859488894f383d00a501bf1683238eedd37f91 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E5=8A=A0=E6=B6=9B?= Date: Sat, 25 Feb 2017 14:19:13 +0800 Subject: [PATCH 113/216] ArrayList Compeleted --- .../108621969/com/coding/basic/ArrayList.java | 94 +++++++++++++++++-- 1 file changed, 87 insertions(+), 7 deletions(-) diff --git a/group08/108621969/com/coding/basic/ArrayList.java b/group08/108621969/com/coding/basic/ArrayList.java index 322dbf4cb3..e8b6553ef3 100644 --- a/group08/108621969/com/coding/basic/ArrayList.java +++ b/group08/108621969/com/coding/basic/ArrayList.java @@ -1,5 +1,7 @@ package com.coding.basic; +import java.util.Arrays; + /** * Created by zhangjiatao on 2017/2/25. */ @@ -9,31 +11,109 @@ public class ArrayList implements List { @Override public void add(Object o) { - + if(isFull()) { + elementData = expandArray(elementData); + } + elementData[size++] = o; } @Override public void add(int index, Object o) { - + ifOutOfBounds(index); + if(isFull()) { + elementData = expandArray(elementData); + } + System.arraycopy(elementData,index,elementData,index+1,size++); + elementData[index] = o; } @Override public Object get(int index) { - return null; + ifOutOfBounds(index); + return elementData[index]; } @Override public Object remove(int index) { - return null; + ifOutOfBounds(index); + Object delData = elementData[index]; + System.arraycopy(elementData,index+1,elementData,index,size-index); + size--; + return index; } @Override public int size() { - return 0; + return size; + } + + @Override + public String toString() { + String str = ""; + for(int i=0; i<=size-1; i++){ + str += elementData[i] + " "; + } + return str; + } + + private boolean isFull() { + if(size >= elementData.length-1){ + return true; + } + return false; + } + + private boolean isEmpty() { + if(size == 0) { + return true; + } + return false; + } + + private void ifOutOfBounds(int index) { + if(index >= size || index < 0) { + throw new IndexOutOfBoundsException(); + } + } + + private Object[] expandArray(Object[] arr) { + return Arrays.copyOf(arr, arr.length+10); } - public Iterator iterator(){ - return null; + public Iterator iterator = new ArrayListIterator(this); + + private class ArrayListIterator implements Iterator{ + + private ArrayList arrList; + int position = 0,length; + + private ArrayListIterator(ArrayList arrList){ + this.arrList = arrList; + this.length = arrList.size(); + } + + @Override + public boolean hasNext() { + return position < length; + } + + @Override + public Object next() { + return arrList.get(position++); + } + } + public static void main(String[] args) { + ArrayList arr = new ArrayList(); + arr.add(1); + arr.add(2); + arr.add(3); + arr.add(1,4); + arr.remove(2); + System.out.println(arr.toString()); + System.out.println(arr.size()); + System.out.println(arr.iterator.next()); + System.out.println(arr.iterator.next()); + } } From 87250219078d033f13e7ce930d92eef820129545 Mon Sep 17 00:00:00 2001 From: XUANDQ Date: Sat, 25 Feb 2017 15:07:27 +0800 Subject: [PATCH 114/216] BlingBling~~ --- group08/2420826330/2420826330.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 group08/2420826330/2420826330.md diff --git a/group08/2420826330/2420826330.md b/group08/2420826330/2420826330.md new file mode 100644 index 0000000000..c55a78db43 --- /dev/null +++ b/group08/2420826330/2420826330.md @@ -0,0 +1 @@ +This is 2420826330. From 2b8d0e2aefd1ede614d790e4d3955d25ff1141ee Mon Sep 17 00:00:00 2001 From: vegetableDogBai Date: Sat, 25 Feb 2017 15:26:25 +0800 Subject: [PATCH 115/216] structure --- group12/563253496/datastructure/.classpath | 6 + group12/563253496/datastructure/.gitignore | 1 + group12/563253496/datastructure/.project | 17 ++ .../src/Collection/ArrayList.java | 173 +++++++++++++ .../src/Collection/LinkedList.java | 227 ++++++++++++++++++ .../datastructure/src/Collection/Queue.java | 44 ++++ .../datastructure/src/Collection/Stack.java | 55 +++++ .../src/Collection/TestArrayList.java | 33 +++ .../src/Collection/TestStack.java | 15 ++ .../src/com/coding/basic/ArrayList.java | 32 +++ .../src/com/coding/basic/BinaryTreeNode.java | 32 +++ .../src/com/coding/basic/Iterator.java | 7 + .../src/com/coding/basic/LinkedList.java | 46 ++++ .../src/com/coding/basic/List.java | 9 + .../src/com/coding/basic/Queue.java | 19 ++ .../src/com/coding/basic/Stack.java | 22 ++ 16 files changed, 738 insertions(+) create mode 100644 group12/563253496/datastructure/.classpath create mode 100644 group12/563253496/datastructure/.gitignore create mode 100644 group12/563253496/datastructure/.project create mode 100644 group12/563253496/datastructure/src/Collection/ArrayList.java create mode 100644 group12/563253496/datastructure/src/Collection/LinkedList.java create mode 100644 group12/563253496/datastructure/src/Collection/Queue.java create mode 100644 group12/563253496/datastructure/src/Collection/Stack.java create mode 100644 group12/563253496/datastructure/src/Collection/TestArrayList.java create mode 100644 group12/563253496/datastructure/src/Collection/TestStack.java create mode 100644 group12/563253496/datastructure/src/com/coding/basic/ArrayList.java create mode 100644 group12/563253496/datastructure/src/com/coding/basic/BinaryTreeNode.java create mode 100644 group12/563253496/datastructure/src/com/coding/basic/Iterator.java create mode 100644 group12/563253496/datastructure/src/com/coding/basic/LinkedList.java create mode 100644 group12/563253496/datastructure/src/com/coding/basic/List.java create mode 100644 group12/563253496/datastructure/src/com/coding/basic/Queue.java create mode 100644 group12/563253496/datastructure/src/com/coding/basic/Stack.java diff --git a/group12/563253496/datastructure/.classpath b/group12/563253496/datastructure/.classpath new file mode 100644 index 0000000000..fb5011632c --- /dev/null +++ b/group12/563253496/datastructure/.classpath @@ -0,0 +1,6 @@ + + + + + + diff --git a/group12/563253496/datastructure/.gitignore b/group12/563253496/datastructure/.gitignore new file mode 100644 index 0000000000..ae3c172604 --- /dev/null +++ b/group12/563253496/datastructure/.gitignore @@ -0,0 +1 @@ +/bin/ diff --git a/group12/563253496/datastructure/.project b/group12/563253496/datastructure/.project new file mode 100644 index 0000000000..4ae7fd9359 --- /dev/null +++ b/group12/563253496/datastructure/.project @@ -0,0 +1,17 @@ + + + datastructure + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git a/group12/563253496/datastructure/src/Collection/ArrayList.java b/group12/563253496/datastructure/src/Collection/ArrayList.java new file mode 100644 index 0000000000..597a9b1a3a --- /dev/null +++ b/group12/563253496/datastructure/src/Collection/ArrayList.java @@ -0,0 +1,173 @@ +package Collection; + +import com.coding.basic.List; + +import java.util.NoSuchElementException; + +import com.coding.basic.Iterator; + +public class ArrayList implements List { + + private int size; + private Object[] elementData; + + public ArrayList() { + size = 0; + elementData = new Object[10]; + } + + public ArrayList(Object o) { + size = 0; + elementData = new Object[10]; + this.add(o); + } + + public ArrayList(int initialCapacity) { + size = 0; + elementData = new Object[initialCapacity]; + } + + @Override + public void add(Object o) { + if (size <= elementData.length - 1) { + elementData[size] = o; + size++; + } else { + this.extendCapacity(); + elementData[size] = o; + size++; + + } + } + + @Override + public void add(int index, Object o) { + if (index < 0) { + throw new IndexOutOfBoundsException(); + } + if (index > elementData.length - 1) { + while (index > elementData.length - 1) { + this.extendCapacity(); + } + elementData[index] = o; + size = index + 1; + return; + } + + if (index >= size) { + size = index + 1; + elementData[index] = o; + return; + } + if (index >= 0 && index < size) { + this.moveRearward(index); + elementData[index] = o; + size++; + return; + } + } + + @Override + public Object get(int index) { + checkCapacity(index); + if (index < size) { + return elementData[index]; + } + return null; + } + + @Override + public Object remove(int index) { + checkCapacity(index); + + if (index == size - 1) { + size--; + return elementData[size - 1]; + } + if (index < size - 1) { + Object tmp = elementData[index]; + for (int i = index; i < size - 1; i++) { + elementData[i] = elementData[i + 1]; + } + size--; + return tmp; + } + return null; + } + + private void checkCapacity(int index) { + if (index < 0 || index >= size) { + throw new IndexOutOfBoundsException(); + } + } + + private void extendCapacity() { + Object[] elements = new Object[elementData.length + 10]; + for (int i = 0; i < size; i++) { + elements[i] = elementData[i]; + } + elementData = elements; + + } + + @Override + public int size() { + return size; + } + + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("["); + for (int i = 0; i < size; i++) { + sb.append(elementData[i]); + sb.append(","); + } + sb.deleteCharAt(sb.length() - 1); + sb.append("]"); + return sb.toString(); + } + + private void moveRearward(int index) { + size++; + + if (size >= elementData.length - 1) + this.extendCapacity(); + + for (int i = size - 1; i > index; i--) { + elementData[i] = elementData[i - 1]; + } + } + + public Iterator iterator() { + return new ArrayListIterator(); + } + + private class ArrayListIterator implements Iterator { + + private int pos; + + public ArrayListIterator() { + + pos = 0; + } + + @Override + public boolean hasNext() { + if (pos < size) { + return true; + } + return false; + } + + @Override + public Object next() { + if (hasNext()) { + return elementData[pos++]; + } else + throw new NoSuchElementException(); + + } + + } + +} diff --git a/group12/563253496/datastructure/src/Collection/LinkedList.java b/group12/563253496/datastructure/src/Collection/LinkedList.java new file mode 100644 index 0000000000..94aefb188e --- /dev/null +++ b/group12/563253496/datastructure/src/Collection/LinkedList.java @@ -0,0 +1,227 @@ +package Collection; + +import com.coding.basic.List; +import com.coding.basic.Iterator; + +public class LinkedList implements List { + + public Node head; + public int size; + + public LinkedList() { + head = new Node(); + size = 0; + } + + public LinkedList(Object o) { + head = new Node(o); + size = 1; + } + + public void add(Object o) { + if (size == 0) { + addfirst(o); + return; + } + addlast(o); + } + + public void add(int index, Object o) { + this.checkCapacity(index); + if (index == 0) { + addfirst(o); + return; + } + if (index == size) { + addlast(o); + return; + } + addmid(index, o); + } + + public void checkCapacity(int index) { + if (index > size || index < 0) { + throw new IndexOutOfBoundsException(); + } + } + + public void addfirst(Object o) { + Node tmp = new Node(head); + head.data = o; + head.next = tmp; + size++; + } + + public void addlast(Object o) { + Node tmp = new Node(head); + //Node last = new Node(o); + //last.data=o; + for (int i = 0; i < size-1; i++) { + tmp = tmp.next; + } + + tmp.next = new Node(o); + size++; + + } + + public void addmid(int index, Object o) { + Node tmp = new Node(head); + Node add = new Node(o); + for (int i = 0; i < index - 1; i++) { + tmp = tmp.next; + } + add.next = tmp.next; + tmp.next = add; + size++; + } + + public Object get(int index) { + checkCapacity(index); + Node tmp = new Node(head); + if (index == 0) { + return head; + } + for (int i = 0; i < index - 1; i++) { + tmp = tmp.next; + } + return tmp.next; + } + + public Object remove(int index) { + checkCapacity(index); + Node tmp = new Node(head); + if (index == 0) { + return removeFirst(); + } + for (int i = 0; i < index - 1; i++) { + tmp = tmp.next; + } + Node result = new Node(tmp.next); + tmp.next = result.next; + return result; + } + + public int size() { + return this.size; + } + + public Object removeFirst() { + Node tmp = new Node(head); + head = head.next; + return tmp; + } + + public Object removeLast() { + if (size == 0) { + return null; + } + if (size == 1) { + Node tmp = new Node(head); + head = null; + return tmp; + } + Node tmp = new Node(head); + for (int i = 0; i < size - 2; i++) { + tmp = tmp.next; + } + Node result = new Node(tmp.next); + tmp.next = result.next; + return result; + } + + public String toString(){ + StringBuilder sb= new StringBuilder(); + sb.append("["); + Node tmp=new Node(head); + for(int i=0;ielementData.size()){ + throw new IndexOutOfBoundsException(); + } + } + public Object pop(){ + checkCapacity(); + Object o = elementData.remove(size-1); + size--; + return o; + } + + public Object peek() { + checkCapacity(); + Object o = elementData.get(size-1); + return o; + } + + public boolean isEmpty() { + if(size!=0){ + return true; + } + return false; + } + + public String toString(){ + return super.toString(); + } + + public int size() { + return size; + } +} diff --git a/group12/563253496/datastructure/src/Collection/TestArrayList.java b/group12/563253496/datastructure/src/Collection/TestArrayList.java new file mode 100644 index 0000000000..eef55fae6b --- /dev/null +++ b/group12/563253496/datastructure/src/Collection/TestArrayList.java @@ -0,0 +1,33 @@ +package Collection; + +import java.lang.reflect.Array; + +/** + * Created by bdl19 on 2017/2/23. + */ +public class TestArrayList { + /*public static void main(String[] args){ + /* + ArrayList al= new ArrayList("test1"); + System.out.println(al); + al.add("test2"); + System.out.println(al); + al.add(1,2); + System.out.println(al); + System.out.println(al.get(2)); + System.out.println(al.get(1)); + System.out.println(al.get(0)); + // System.out.println(al.get(3)); + System.out.println(al.size()); + System.out.println(al.remove(2)); + System.out.println(al); + + ArrayList al =new ArrayList(); + al.add(3,2); + al.add(0,0); + System.out.println(al.size()); + System.out.println(al); + + } + **/ +} diff --git a/group12/563253496/datastructure/src/Collection/TestStack.java b/group12/563253496/datastructure/src/Collection/TestStack.java new file mode 100644 index 0000000000..4702e49079 --- /dev/null +++ b/group12/563253496/datastructure/src/Collection/TestStack.java @@ -0,0 +1,15 @@ +package Collection; + +/** + * Created by bdl19 on 2017/2/25. + */ +public class TestStack { + public static void main(String[] args) { + Stack s=new Stack(); + s.push("a"); + s.push("b"); + System.out.println(s.pop()); + System.out.println(s.pop()); + + } +} diff --git a/group12/563253496/datastructure/src/com/coding/basic/ArrayList.java b/group12/563253496/datastructure/src/com/coding/basic/ArrayList.java new file mode 100644 index 0000000000..1f185736f9 --- /dev/null +++ b/group12/563253496/datastructure/src/com/coding/basic/ArrayList.java @@ -0,0 +1,32 @@ +package com.coding.basic; + +public class ArrayList implements List { + + private int size = 0; + + private Object[] elementData = new Object[100]; + + public void add(Object o){ + + } + public void add(int index, Object o){ + + } + + public Object get(int index){ + return null; + } + + public Object remove(int index){ + return null; + } + + public int size(){ + return -1; + } + + public Iterator iterator(){ + return null; + } + +} diff --git a/group12/563253496/datastructure/src/com/coding/basic/BinaryTreeNode.java b/group12/563253496/datastructure/src/com/coding/basic/BinaryTreeNode.java new file mode 100644 index 0000000000..d7ac820192 --- /dev/null +++ b/group12/563253496/datastructure/src/com/coding/basic/BinaryTreeNode.java @@ -0,0 +1,32 @@ +package com.coding.basic; + +public class BinaryTreeNode { + + private Object data; + private BinaryTreeNode left; + private BinaryTreeNode right; + + 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){ + return null; + } + +} diff --git a/group12/563253496/datastructure/src/com/coding/basic/Iterator.java b/group12/563253496/datastructure/src/com/coding/basic/Iterator.java new file mode 100644 index 0000000000..06ef6311b2 --- /dev/null +++ b/group12/563253496/datastructure/src/com/coding/basic/Iterator.java @@ -0,0 +1,7 @@ +package com.coding.basic; + +public interface Iterator { + public boolean hasNext(); + public Object next(); + +} diff --git a/group12/563253496/datastructure/src/com/coding/basic/LinkedList.java b/group12/563253496/datastructure/src/com/coding/basic/LinkedList.java new file mode 100644 index 0000000000..e2c4e5e795 --- /dev/null +++ b/group12/563253496/datastructure/src/com/coding/basic/LinkedList.java @@ -0,0 +1,46 @@ +package com.coding.basic; + +public class LinkedList implements List { + + private Node head; + + public void add(Object o){ + + } + public void add(int index , Object o){ + + } + public Object get(int index){ + return null; + } + public Object remove(int index){ + return null; + } + + public int size(){ + return -1; + } + + public void addFirst(Object o){ + + } + public void addLast(Object o){ + + } + public Object removeFirst(){ + return null; + } + public Object removeLast(){ + return null; + } + public Iterator iterator(){ + return null; + } + + + private static class Node{ + Object data; + Node next; + + } +} diff --git a/group12/563253496/datastructure/src/com/coding/basic/List.java b/group12/563253496/datastructure/src/com/coding/basic/List.java new file mode 100644 index 0000000000..10d13b5832 --- /dev/null +++ b/group12/563253496/datastructure/src/com/coding/basic/List.java @@ -0,0 +1,9 @@ +package com.coding.basic; + +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(); +} diff --git a/group12/563253496/datastructure/src/com/coding/basic/Queue.java b/group12/563253496/datastructure/src/com/coding/basic/Queue.java new file mode 100644 index 0000000000..36e516e266 --- /dev/null +++ b/group12/563253496/datastructure/src/com/coding/basic/Queue.java @@ -0,0 +1,19 @@ +package com.coding.basic; + +public class Queue { + + public void enQueue(Object o){ + } + + public Object deQueue(){ + return null; + } + + public boolean isEmpty(){ + return false; + } + + public int size(){ + return -1; + } +} diff --git a/group12/563253496/datastructure/src/com/coding/basic/Stack.java b/group12/563253496/datastructure/src/com/coding/basic/Stack.java new file mode 100644 index 0000000000..a5a04de76d --- /dev/null +++ b/group12/563253496/datastructure/src/com/coding/basic/Stack.java @@ -0,0 +1,22 @@ +package com.coding.basic; + +public class Stack { + private ArrayList elementData = new ArrayList(); + + public void push(Object o){ + } + + public Object pop(){ + return null; + } + + public Object peek(){ + return null; + } + public boolean isEmpty(){ + return false; + } + public int size(){ + return -1; + } +} From e8416e4d0166ccf51e96c7fc51495ec12c622009 Mon Sep 17 00:00:00 2001 From: 240094626 Date: Sat, 25 Feb 2017 15:27:50 +0800 Subject: [PATCH 116/216] 'update' --- .../src/com/coding/basic/impl/ArrayList.java | 22 +----- .../src/com/coding/basic/impl/LinkedList.java | 22 +++++- .../src/com/coding/basic/impl/Queue.java | 67 +++++++++++++++++++ .../src/com/coding/basic/impl/Stack.java | 30 ++++++++- 4 files changed, 118 insertions(+), 23 deletions(-) create mode 100644 group17/240094626/warm-up/src/com/coding/basic/impl/Queue.java diff --git a/group17/240094626/warm-up/src/com/coding/basic/impl/ArrayList.java b/group17/240094626/warm-up/src/com/coding/basic/impl/ArrayList.java index 0deff37f2f..666a691101 100644 --- a/group17/240094626/warm-up/src/com/coding/basic/impl/ArrayList.java +++ b/group17/240094626/warm-up/src/com/coding/basic/impl/ArrayList.java @@ -1,7 +1,6 @@ package com.coding.basic.impl; import java.util.Arrays; -import java.util.LinkedList; import com.coding.basic.Iterator; import com.coding.basic.List; @@ -37,7 +36,6 @@ public ArrayList(){ * 构造函数,初始化容量为length的空列表 */ public ArrayList(int length){ - super(); if(length < 0){ throw new IllegalArgumentException("初始容量参数非法:"+length); } @@ -71,7 +69,7 @@ private void grow(int length){ * @comment:检验下标参数是否超限 */ private void check(int index) { - if( index > data.length){ + if( index >= size){ throw new IndexOutOfBoundsException("Index:"+index+",size:"+size); } } @@ -163,24 +161,6 @@ public Object next() { } - // Test - public static void main(String[] args) { - ArrayList list = new ArrayList(5); - System.out.println(list.size()); - list.add("1"); - list.add(1,"hei"); - - System.out.println(list.toString()); - Iterator i = list.iterator(); - while(i.hasNext()){ - System.out.println(i.next()); - } -// java.util.ArrayList a = new java.util.ArrayList(); -// Iterator iterator = (Iterator) a.iterator(); - } - - - } diff --git a/group17/240094626/warm-up/src/com/coding/basic/impl/LinkedList.java b/group17/240094626/warm-up/src/com/coding/basic/impl/LinkedList.java index b50a80063e..a48b9e4705 100644 --- a/group17/240094626/warm-up/src/com/coding/basic/impl/LinkedList.java +++ b/group17/240094626/warm-up/src/com/coding/basic/impl/LinkedList.java @@ -111,6 +111,26 @@ public Object remove(int index) { public int size() { return size; } + /** + * 环形链表结构,header.next就是第一个节点 + * @param o + */ + public void addFirst(Object o){ + addBefore(o, header.next); + } + /** + * 环形链表结构,header.pre就是最后一个节点 + * @param o + */ + public void addLast(Object o){ + addBefore(o, header); + } + public Object removeFirst(){ + return remove(header.next); + } + public Object removeLast(){ + return remove(header.pre); + } public Iterator iterator(){ @@ -154,7 +174,7 @@ public boolean hasNext() { @Override public Object next() { - Node n = getNode(index); + Node n = getNode(index++); return n.data; } diff --git a/group17/240094626/warm-up/src/com/coding/basic/impl/Queue.java b/group17/240094626/warm-up/src/com/coding/basic/impl/Queue.java new file mode 100644 index 0000000000..3a9aa129e2 --- /dev/null +++ b/group17/240094626/warm-up/src/com/coding/basic/impl/Queue.java @@ -0,0 +1,67 @@ +package com.coding.basic.impl; + +import com.coding.basic.Iterator; + +/** + * 队列简单实现 + * @author 240094626 + * + */ +public class Queue { + /**队列元素容器对象*/ + LinkedList elementData = new LinkedList(); + + /** + * 入队列 + * @param o + */ + public void enQueue(Object o){ + elementData.add(o); + } + + /** + * 出队列:先进先出,故取出链表首个节点 + * @return + */ + public Object deQueue(){ + return elementData.removeFirst(); + } + + public boolean isEmpty(){ + if(elementData.size() > 0 ){ + return false; + } + return true; + } + + public int size(){ + return elementData.size(); + } + + public Iterator iterator(){ + return new QueueIterator(); + } + + private class QueueIterator implements Iterator{ + + int index; + + public QueueIterator() { + index = 0; + } + + @Override + public boolean hasNext() { + if(index < elementData.size()){ + return true; + } + return false; + } + + @Override + public Object next() { + return elementData.get(index++); + } + + } +} diff --git a/group17/240094626/warm-up/src/com/coding/basic/impl/Stack.java b/group17/240094626/warm-up/src/com/coding/basic/impl/Stack.java index 7d31fdc275..d4c3158f94 100644 --- a/group17/240094626/warm-up/src/com/coding/basic/impl/Stack.java +++ b/group17/240094626/warm-up/src/com/coding/basic/impl/Stack.java @@ -1,5 +1,7 @@ package com.coding.basic.impl; +import com.coding.basic.Iterator; + /** * 栈的简单实现 * @author 240094626 @@ -47,4 +49,30 @@ public boolean isEmpty(){ public int size(){ return elementData.size(); } -} + + public Iterator iterator(){ + return new StackIterator(); + } + private class StackIterator implements Iterator{ + int index; + + public StackIterator() { + index = 0; + } + + @Override + public boolean hasNext() { + if(index < elementData.size()){ + return true; + } + return false; + } + + @Override + public Object next() { + return elementData.get(index); + } + + + } +} \ No newline at end of file From cd2383d1811238ea2abcc0a8ad1d32f9792ae708 Mon Sep 17 00:00:00 2001 From: xpc8848 <784140710@qq.com> Date: Sat, 25 Feb 2017 15:31:11 +0800 Subject: [PATCH 117/216] week01 --- .../src/com/coding/basic/ArrayList.java | 65 ---------- .../src/com/coding/basic/BinaryTree.java | 65 ---------- .../src/com/coding/basic/BinaryTreeNode.java | 66 ---------- .../week01/src/com/coding/basic/Iterator.java | 7 -- .../src/com/coding/basic/LinkedList.java | 114 ------------------ .../week01/src/com/coding/basic/List.java | 9 -- .../week01/src/com/coding/basic/Queue.java | 21 ---- .../week01/src/com/coding/basic/Stack.java | 23 ---- .../week01/src/com/coding/test/Test01.java | 56 --------- .../src/com/coding/test/TestBinaryTree.java | 20 --- 10 files changed, 446 deletions(-) delete mode 100644 group18/784140710/week01/src/com/coding/basic/ArrayList.java delete mode 100644 group18/784140710/week01/src/com/coding/basic/BinaryTree.java delete mode 100644 group18/784140710/week01/src/com/coding/basic/BinaryTreeNode.java delete mode 100644 group18/784140710/week01/src/com/coding/basic/Iterator.java delete mode 100644 group18/784140710/week01/src/com/coding/basic/LinkedList.java delete mode 100644 group18/784140710/week01/src/com/coding/basic/List.java delete mode 100644 group18/784140710/week01/src/com/coding/basic/Queue.java delete mode 100644 group18/784140710/week01/src/com/coding/basic/Stack.java delete mode 100644 group18/784140710/week01/src/com/coding/test/Test01.java delete mode 100644 group18/784140710/week01/src/com/coding/test/TestBinaryTree.java diff --git a/group18/784140710/week01/src/com/coding/basic/ArrayList.java b/group18/784140710/week01/src/com/coding/basic/ArrayList.java deleted file mode 100644 index fb09da9b6c..0000000000 --- a/group18/784140710/week01/src/com/coding/basic/ArrayList.java +++ /dev/null @@ -1,65 +0,0 @@ -package com.coding.basic; - -import java.util.Arrays; - -public class ArrayList implements List { - - private int size = 0; - - private Object[] elementData = new Object[5]; - - public void add(Object o){ - if(++size > elementData.length){ - elementData = Arrays.copyOf(elementData, elementData.length*2); - } - elementData[size-1] = o; - - } - public void add(int index, Object o){ - Object[] tmp = new Object[elementData.length]; - - if(index<0 || index >elementData.length-1){ - return; - } - if(++size > elementData.length){ - elementData = Arrays.copyOf(elementData, elementData.length*2); - tmp = new Object[elementData.length]; - } - System.arraycopy(elementData, 0, tmp, 0, index); - System.arraycopy(elementData, index, tmp, index+1, size-index); - tmp[index] = o; - elementData=tmp; - - } - - public Object get(int index){ - if(index<0 || index >elementData.length-1){ - return null; - } - return elementData[index]; - } - - public Object remove(int index){ - Object o=null; - o = elementData[index]; - if(--size%5 == 0){ - elementData = Arrays.copyOf(elementData, elementData.length/2); - }else if(index == size-1){ - elementData[index] = null; - }else if(index == size-1){ - - System.arraycopy(elementData, index+1, elementData, index, size-index-1); - } - - return o; - } - - public int size(){ - return size; - } - - public Iterator iterator(){ - return null; - } - -} diff --git a/group18/784140710/week01/src/com/coding/basic/BinaryTree.java b/group18/784140710/week01/src/com/coding/basic/BinaryTree.java deleted file mode 100644 index 01b7a90a43..0000000000 --- a/group18/784140710/week01/src/com/coding/basic/BinaryTree.java +++ /dev/null @@ -1,65 +0,0 @@ -package com.coding.basic; - - -public class BinaryTree { - - private BinaryTreeNode root; - - public void insert(Integer o){ - BinaryTreeNode node = new BinaryTreeNode(o); - if(root == null){ - root = node; - }else{ - BinaryTreeNode current = root; - BinaryTreeNode parent; - - while(true){ - parent = current; - if(onode.getData()){ - node = node.getRight(); - }else{ - return node; - } - } - - return null; - } - - -} - - - - - - - - - - - - diff --git a/group18/784140710/week01/src/com/coding/basic/BinaryTreeNode.java b/group18/784140710/week01/src/com/coding/basic/BinaryTreeNode.java deleted file mode 100644 index 15cbb94d28..0000000000 --- a/group18/784140710/week01/src/com/coding/basic/BinaryTreeNode.java +++ /dev/null @@ -1,66 +0,0 @@ -package com.coding.basic; - - -public class BinaryTreeNode { - - private Integer data; - private BinaryTreeNode left; - private BinaryTreeNode right; - - public BinaryTreeNode(Integer data){ - this.data = data; - } - - public Integer getData() { - return data; - } - public void setData(Integer 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; - } - -} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/group18/784140710/week01/src/com/coding/basic/Iterator.java b/group18/784140710/week01/src/com/coding/basic/Iterator.java deleted file mode 100644 index 06ef6311b2..0000000000 --- a/group18/784140710/week01/src/com/coding/basic/Iterator.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.coding.basic; - -public interface Iterator { - public boolean hasNext(); - public Object next(); - -} diff --git a/group18/784140710/week01/src/com/coding/basic/LinkedList.java b/group18/784140710/week01/src/com/coding/basic/LinkedList.java deleted file mode 100644 index 98d5bf6b6e..0000000000 --- a/group18/784140710/week01/src/com/coding/basic/LinkedList.java +++ /dev/null @@ -1,114 +0,0 @@ -package com.coding.basic; - -public class LinkedList implements List { - - private Node head; - private int size = 0; - - public void add(Object o){ - ++size; - Node node = new Node(o); - - if(head == null){ - head = node; - return; - } - Node tmp = new Node(o); - tmp = head; - while(tmp.next!=null){ - tmp = tmp.next; - } - tmp.next = node; - } - public void add(int index , Object o){ - ++size; - Node node = new Node(o); - Node tmp = new Node(o); - tmp = head; - int i =0; - while(tmp.next!=null && i Date: Sat, 25 Feb 2017 15:32:12 +0800 Subject: [PATCH 118/216] week01 --- .../src/com/coding/basic/ArrayIterator.java | 27 +++++ .../src/com/coding/basic/ArrayList.java | 84 +++++++++++++ .../src/com/coding/basic/BinaryTree.java | 65 ++++++++++ .../src/com/coding/basic/BinaryTreeNode.java | 66 ++++++++++ .../week01/src/com/coding/basic/Iterator.java | 7 ++ .../src/com/coding/basic/LinkedList.java | 114 ++++++++++++++++++ .../week01/src/com/coding/basic/List.java | 9 ++ .../week01/src/com/coding/basic/Queue.java | 21 ++++ .../week01/src/com/coding/basic/Stack.java | 23 ++++ .../week01/src/com/coding/test/Test01.java | 62 ++++++++++ .../src/com/coding/test/TestBinaryTree.java | 20 +++ 11 files changed, 498 insertions(+) create mode 100644 group18/784140710/week01/src/com/coding/basic/ArrayIterator.java create mode 100644 group18/784140710/week01/src/com/coding/basic/ArrayList.java create mode 100644 group18/784140710/week01/src/com/coding/basic/BinaryTree.java create mode 100644 group18/784140710/week01/src/com/coding/basic/BinaryTreeNode.java create mode 100644 group18/784140710/week01/src/com/coding/basic/Iterator.java create mode 100644 group18/784140710/week01/src/com/coding/basic/LinkedList.java create mode 100644 group18/784140710/week01/src/com/coding/basic/List.java create mode 100644 group18/784140710/week01/src/com/coding/basic/Queue.java create mode 100644 group18/784140710/week01/src/com/coding/basic/Stack.java create mode 100644 group18/784140710/week01/src/com/coding/test/Test01.java create mode 100644 group18/784140710/week01/src/com/coding/test/TestBinaryTree.java diff --git a/group18/784140710/week01/src/com/coding/basic/ArrayIterator.java b/group18/784140710/week01/src/com/coding/basic/ArrayIterator.java new file mode 100644 index 0000000000..9af5e3a1a7 --- /dev/null +++ b/group18/784140710/week01/src/com/coding/basic/ArrayIterator.java @@ -0,0 +1,27 @@ +package com.coding.basic; + +public class ArrayIterator implements Iterator{ + + private int index = 0; + private List list ; + + public ArrayIterator(List list){ + this.list = list; + } + + @Override + public boolean hasNext() { + + if(index elementData.length){ + elementData = Arrays.copyOf(elementData, elementData.length*2); + } + elementData[size-1] = o; + + } + public void add(int index, Object o){ + Object[] tmp = new Object[elementData.length]; + + if(index<0 || index >elementData.length-1){ + return; + } + if(++size > elementData.length){ + elementData = Arrays.copyOf(elementData, elementData.length*2); + tmp = new Object[elementData.length]; + } + System.arraycopy(elementData, 0, tmp, 0, index); + System.arraycopy(elementData, index, tmp, index+1, size-index); + tmp[index] = o; + elementData=tmp; + + } + + public Object get(int index){ + if(index<0 || index >elementData.length-1){ + return null; + } + return elementData[index]; + } + + public Object remove(int index){ + Object o=null; + o = elementData[index]; + if(--size%5 == 0){ + elementData = Arrays.copyOf(elementData, elementData.length/2); + }else if(index == size-1){ + elementData[index] = null; + }else if(index == size-1){ + + System.arraycopy(elementData, index+1, elementData, index, size-index-1); + } + + return o; + } + + public int size(){ + return size; + } + + public Iterator iterator(){ + return new ArrayIterator(this); + } + +} + + + + + + + + + + + + + + + + + + + diff --git a/group18/784140710/week01/src/com/coding/basic/BinaryTree.java b/group18/784140710/week01/src/com/coding/basic/BinaryTree.java new file mode 100644 index 0000000000..01b7a90a43 --- /dev/null +++ b/group18/784140710/week01/src/com/coding/basic/BinaryTree.java @@ -0,0 +1,65 @@ +package com.coding.basic; + + +public class BinaryTree { + + private BinaryTreeNode root; + + public void insert(Integer o){ + BinaryTreeNode node = new BinaryTreeNode(o); + if(root == null){ + root = node; + }else{ + BinaryTreeNode current = root; + BinaryTreeNode parent; + + while(true){ + parent = current; + if(onode.getData()){ + node = node.getRight(); + }else{ + return node; + } + } + + return null; + } + + +} + + + + + + + + + + + + diff --git a/group18/784140710/week01/src/com/coding/basic/BinaryTreeNode.java b/group18/784140710/week01/src/com/coding/basic/BinaryTreeNode.java new file mode 100644 index 0000000000..15cbb94d28 --- /dev/null +++ b/group18/784140710/week01/src/com/coding/basic/BinaryTreeNode.java @@ -0,0 +1,66 @@ +package com.coding.basic; + + +public class BinaryTreeNode { + + private Integer data; + private BinaryTreeNode left; + private BinaryTreeNode right; + + public BinaryTreeNode(Integer data){ + this.data = data; + } + + public Integer getData() { + return data; + } + public void setData(Integer 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; + } + +} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/group18/784140710/week01/src/com/coding/basic/Iterator.java b/group18/784140710/week01/src/com/coding/basic/Iterator.java new file mode 100644 index 0000000000..06ef6311b2 --- /dev/null +++ b/group18/784140710/week01/src/com/coding/basic/Iterator.java @@ -0,0 +1,7 @@ +package com.coding.basic; + +public interface Iterator { + public boolean hasNext(); + public Object next(); + +} diff --git a/group18/784140710/week01/src/com/coding/basic/LinkedList.java b/group18/784140710/week01/src/com/coding/basic/LinkedList.java new file mode 100644 index 0000000000..eb0b6fbeae --- /dev/null +++ b/group18/784140710/week01/src/com/coding/basic/LinkedList.java @@ -0,0 +1,114 @@ +package com.coding.basic; + +public class LinkedList implements List { + + private Node head; + private int size = 0; + + public void add(Object o){ + ++size; + Node node = new Node(o); + + if(head == null){ + head = node; + return; + } + Node tmp = new Node(o); + tmp = head; + while(tmp.next!=null){ + tmp = tmp.next; + } + tmp.next = node; + } + public void add(int index , Object o){ + ++size; + Node node = new Node(o); + Node tmp = new Node(o); + tmp = head; + int i =0; + while(tmp.next!=null && i Date: Sat, 25 Feb 2017 15:52:35 +0800 Subject: [PATCH 119/216] the is List ArrayList and LinkedList --- .../src/cn/wsc/util/ArrayList.java | 233 ++++++++++++++ .../src/cn/wsc/util/LinkedList.java | 284 ++++++++++++++++++ .../data _structure/src/cn/wsc/util/List.java | 99 ++++++ .../src/cn/wsc/utils/Stack.java | 22 ++ 4 files changed, 638 insertions(+) create mode 100644 group20/592146505/data _structure/src/cn/wsc/util/ArrayList.java create mode 100644 group20/592146505/data _structure/src/cn/wsc/util/LinkedList.java create mode 100644 group20/592146505/data _structure/src/cn/wsc/util/List.java create mode 100644 group20/592146505/data _structure/src/cn/wsc/utils/Stack.java diff --git a/group20/592146505/data _structure/src/cn/wsc/util/ArrayList.java b/group20/592146505/data _structure/src/cn/wsc/util/ArrayList.java new file mode 100644 index 0000000000..ff3ec6575e --- /dev/null +++ b/group20/592146505/data _structure/src/cn/wsc/util/ArrayList.java @@ -0,0 +1,233 @@ +package cn.wsc.util; + +import java.util.Arrays; +import java.util.ConcurrentModificationException; +import java.util.Iterator; +import java.util.NoSuchElementException; + +/** + * ArrayList类 + * + * @author c_malina007 + * @param + */ +public class ArrayList implements List { + + /** 元素个数 */ + private int size; + + /** 默认容量 */ + private static final int DEFAULT_CAPACITY = 10; + + /** 默认最大容量 */ + private static final int MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8; + + /** 默认数组 */ + private static final Object[] EMPTY_ELEMENTDATA = {}; + + /** 用于存放元素 */ + private Object[] elementData; + + /** + * 无参构造将使用默认数组 + */ + public ArrayList() { + elementData = EMPTY_ELEMENTDATA; + } + + @Override + public int size() { + return size; + } + + @Override + public boolean isEmpty() { + return size == 0; + } + +// @Override +// public boolean contains(Object o) { +// // TODO Auto-generated method stub +// return false; +// } + + @Override + public Iterator iterator() { + return new Itr(); + } + + private class Itr implements Iterator { + int cursor; // 当前索引 + int lastRet = -1;// + + @Override + public boolean hasNext() { + return cursor != size; + } + + @SuppressWarnings("unchecked") + @Override + public E next() { + if (cursor > size) { + throw new NoSuchElementException(); + } + Object[] elementData = ArrayList.this.elementData; + if (cursor >= elementData.length) { + throw new ConcurrentModificationException(); + } + return (E) elementData[lastRet = cursor++]; + } + + public void remove() { + if (lastRet < 0) + throw new IllegalStateException(); + try { + ArrayList.this.remove(lastRet); + cursor = lastRet; + lastRet = -1; + size--; + } catch (IndexOutOfBoundsException ex) { + throw new ConcurrentModificationException(); + } + } + + } + + // @Override + // public Object[] toArray() { + // // TODO Auto-generated method stub + // return null; + // } + // + // @Override + // public T[] toArray(T[] a) { + // // TODO Auto-generated method stub + // return null; + // } + + @Override + public boolean add(E element) { + // 保证数组长度正确 + ensureCapacityInternal(size + 1); + // 使用后缀自操作符 + elementData[size++] = element; + return true; + } + + @Override + public boolean add(int index, E element) { + rangeCheckForAdd(index);// 进行添加操作的索引范围检查 + // 保证数组长度正确 + ensureCapacityInternal(size + 1); + // 源数组中位置在 srcPos 到 srcPos+length-1 之间的组件被分别复制到目标数组中的 destPos 到 + // destPos+length-1 位置 + System.arraycopy(elementData, index, elementData, index + 1, size - index); + elementData[index] = element; + size++; + return true; + } + + private void ensureCapacityInternal(int minCapacity) { + if (elementData == EMPTY_ELEMENTDATA) + minCapacity = Math.max(minCapacity, DEFAULT_CAPACITY); + // 传入最小容量大于当前数组长度,则扩容 + if (minCapacity > elementData.length) + grow(minCapacity); + } + + /** + * 扩容 + * + * @param minCapacity + */ + private void grow(int minCapacity) { + int oldCapacity = elementData.length;// 获取原数组长度 + // 计算新容量 + int newCapacity = oldCapacity + (oldCapacity >> 1);// 原容量+(原容量/2),使用位移符提高运行速度 + newCapacity = newCapacity < minCapacity ? minCapacity : newCapacity; + if (newCapacity > MAX_ARRAY_SIZE) + newCapacity = hugeCapacity(newCapacity); + // 将原数组数据复制到一个长度为newCapacity的新数组中 + elementData = Arrays.copyOf(elementData, newCapacity); + } + + /** + * 传入容量是否大于最大容量常量,如大于最大容量,则返回int类型所能表示的最大值 ArrayList最大容量为int类型所能表示的最大值 + * + * @param minCapacity + * @return + */ + private int hugeCapacity(int minCapacity) { + if (minCapacity < 0) { + throw new OutOfMemoryError("The index cannot be negative"); + } + return minCapacity > MAX_ARRAY_SIZE ? Integer.MAX_VALUE : MAX_ARRAY_SIZE; + } + + @SuppressWarnings("unchecked") + @Override + public E get(int index) { + rangeCheck(index);// 进行索引的范围检查 + return (E) elementData[index]; + } + + @SuppressWarnings("unchecked") + @Override + public E set(int index, E element) { + rangeCheck(index);// 进行索引的范围检查 + // 取到指定索引元素,将新元素置入该索引位,并返回原元素 + E oldValue = (E) elementData[index]; + elementData[index] = element; + return oldValue; + } + + @SuppressWarnings("unchecked") + @Override + public E remove(int index) { + rangeCheck(index);// 进行索引的范围检查 + // 获取指定索引处元素 + E rmValue = (E) elementData[index]; + // 源数组中位置在 srcPos 到 srcPos+length-1 之间的组件被分别复制到目标数组中的 destPos 到 + // destPos+length-1 位置 + System.arraycopy(elementData, index + 1, elementData, index, size - (index - 1)); + size--; + return rmValue; + } + + // @Override + // public int indexOf(Object o) { + // // TODO Auto-generated method stub + // return 0; + // } + + /** + * 添加时的索引范围检查 + * + * @param index + */ + private void rangeCheckForAdd(int index) { + if (index > this.size || index < 0)// 添加可以往末位插入,所以这里索引等于元素个数也可以 + throw new IndexOutOfBoundsException(outOfBoundsMsg(index)); + } + + /** + * 索引范围检查 + * + * @param index + */ + private void rangeCheck(int index) { + if (index < 0 || index >= this.size) + throw new IndexOutOfBoundsException(outOfBoundsMsg(index)); + } + + /** + * 以字符串形式返回索引和元素个数信息 + * + * @param index + * @return + */ + private String outOfBoundsMsg(int index) { + return "Index: " + index + ", Size: " + this.size; + } + +} diff --git a/group20/592146505/data _structure/src/cn/wsc/util/LinkedList.java b/group20/592146505/data _structure/src/cn/wsc/util/LinkedList.java new file mode 100644 index 0000000000..772b04b88d --- /dev/null +++ b/group20/592146505/data _structure/src/cn/wsc/util/LinkedList.java @@ -0,0 +1,284 @@ +package cn.wsc.util; + +import java.util.ConcurrentModificationException; +import java.util.Iterator; +import java.util.NoSuchElementException; + +/** + * LinkedList类 + * + * @author Administrator + * @date 2017年2月25日上午10:52:41 + * @version v1.0 + * + * @param + */ +public class LinkedList implements List { + + private int size; + Node first; // 链表的头节点 + Node last; // 链表的尾节点 + + private static class Node { + E item; // 存储数据 + Node prev; // 上一个节点 + Node next; // 下一个节点 + + Node(Node prev, E element, Node next) { + this.item = element; + this.next = next; + this.prev = prev; + } + } + + @Override + public int size() { + return size; + } + + @Override + public boolean isEmpty() { + return size == 0; + } + + @Override + public Iterator iterator() { + return new Itr(); + } + + private class Itr implements Iterator { + int cursor; // 当前索引 + int lastRet = -1;// 上一次索引 + + @Override + public boolean hasNext() { + return cursor != size; + } + + @Override + public E next() { + if (cursor > size) { + throw new NoSuchElementException(); + } + return get(lastRet = cursor++); + } + + public void remove() { + if (lastRet < 0) + throw new IllegalStateException(); + try { + LinkedList.this.remove(lastRet); + cursor = lastRet; + lastRet = -1; + size--; + } catch (IndexOutOfBoundsException ex) { + throw new ConcurrentModificationException(); + } + } + + } + + @Override + public boolean add(E e) { + linkLast(e); + return true; + } + + @Override + public boolean add(int index, E element) { + checkPositionIndex(index);// 位置范围检查 + // 如果索引等于元素个数,则直接插入尾部 + if (index == size) { + linkLast(element); + } else { + linkBefore(element, node(index)); + } + return true; + } + + @Override + public E get(int index) { + return node(index).item; + } + + /** + * 维护头节点 + * + * @param e + */ + void linkFirst(E e) { + Node f = first; + // 创建新节点,将原头节点作为新节点的下一个节点 + Node newNode = new Node(null, e, f); + // 将新节点设置为头节点 + first = newNode; + // 如原头节点为null,则尾节点也为newNode + if (f == null) { + last = newNode; + } else {// 否则将新节点作为原头节点的上一个节点 + f.prev = newNode; + } + size++; + + } + + /** + * 维护尾节点 + * + * @param e + */ + void linkLast(E e) { + Node l = last; + // 创建新节点,将尾节点作为新节点的上一个节点 + Node newNode = new Node(l, e, null); + // 将新节点设置为尾节点 + last = newNode; + // 如原尾节点为null,则头节点也为newNode + if (l == null) { + first = newNode; + } else {// 否则将新节点作为原尾节点的下一个节点 + l.next = newNode; + } + size++; + } + + /** + * 在指定节点前插入新节点 + * + * @param e + * @param node + */ + void linkBefore(E e, Node node) { + // 获取node的上一个节点,并创建新节点,将pred做为新节点的上一个节点,将node作为新节点的下一个节点 + final Node pred = node.prev; + final Node newNode = new Node<>(pred, e, node); + // 将node的上一个节点指向newNode + node.prev = newNode; + // 如prev为null,则说明node为first,那么将新节点设为first + if (pred == null) { + first = newNode; + } else {// 否则,将新节点设为pred的下一个节点 + pred.next = newNode; + } + size++; + } + + /** + * 获取节点 + * + * @param index + * @return + */ + Node node(int index) { + // 索引小于长度的2分之一则从前向后遍历,否则从后向前遍历,减少遍历次数 + if (index < (size >> 1)) { + Node x = first; + for (int i = 0; i < index; i++) + x = x.next; + return x; + } else { + Node x = last; + for (int i = size - 1; i > index; i--) + x = x.prev; + return x; + } + } + + /** + * 获取头节点 + * + * @return + */ + public E getFirst() { + Node f = first; + if (f == null) + throw new NoSuchElementException(); + return f.item; + } + + /** + * 获取尾节点 + * + * @return + */ + public E getLast() { + Node l = last; + if (l == null) + throw new NoSuchElementException(); + return l.item; + } + + @Override + public E set(int index, E e) { + checkElementIndex(index);// 索引范围检查 + //获取索引处节点,填入新值,返回原值 + Node x = node(index); + E oldVal = x.item; + x.item = e; + return oldVal; + } + + @Override + public E remove(int index) { + checkElementIndex(index);// 索引范围检查 + return unlink(node(index)); + } + + /** + * 删除节点 + * + * @param x + * @return + */ + E unlink(Node x) { + // 获取此节点的上一个节点和下一个节点 + E element = x.item; + Node prev = x.prev; + Node next = x.next; + // 如prev节点为null,则说明x节点为first,那么将next节点设为first + if (prev == null) { + first = next; + } else {// 否则,将prev节点的下一个节点设为next + prev.next = next; + } + // 如next节点为null,则说明x节点为last,那么将prev节点设为last + if (next == null) { + last = prev; + } else {// 否则,将next节点的上一个节点设为prev + next.prev = prev; + } + x.item = null; + size--; + return element; + } + + /** + * 位置范围检查 >0 && <=size + * + * @param index + */ + private void checkPositionIndex(int index) { + if (index > this.size || index < 0)// 添加可以往末位插入,所以这里索引等于元素个数也可以 + throw new IndexOutOfBoundsException(outOfBoundsMsg(index)); + } + + /** + * 索引范围检查 >0 && = this.size) + throw new IndexOutOfBoundsException(outOfBoundsMsg(index)); + } + + /** + * 以字符串形式返回索引和元素个数信息 + * + * @param index + * @return + */ + private String outOfBoundsMsg(int index) { + return "Index: " + index + ", Size: " + this.size; + } +} diff --git a/group20/592146505/data _structure/src/cn/wsc/util/List.java b/group20/592146505/data _structure/src/cn/wsc/util/List.java new file mode 100644 index 0000000000..900a8a8634 --- /dev/null +++ b/group20/592146505/data _structure/src/cn/wsc/util/List.java @@ -0,0 +1,99 @@ +package cn.wsc.util; + +import java.util.Iterator; + +/** + * List接口 + * + * @author Administrator + * @date 2017年2月20日下午9:15:32 + * @version v1.0 + * + * @param + */ +public interface List { + + /** + * 获取集合元素个数 + * @return + */ + int size(); + + /** + * 集合是否为空 + * @return + */ + boolean isEmpty(); + +// /** +// * 是否包含指定元素 +// * @param o +// * @return +// */ +// boolean contains(Object o); + + /** + * 获取当前集合迭代器对象 + * @return + */ + Iterator iterator(); +// +// /** +// * 返回集合数组对象 +// * +// * @return +// */ +// Object[] toArray(); +// +// /** +// * 将集合元素复制到新数组中 +// * @param a +// * @return +// */ +// T[] toArray(T[] a); + + /** + * 在集合末尾追加元素 + * @param e + * @return + */ + boolean add(E e); + + /** + * 将元素添加至指定指定索引处 + * @param index + * @param e + * @return + */ + boolean add(int index,E e); + + /** + * 获取指定索引处元素 + * @param index + * @return + */ + E get(int index); + + /** + * 替换指定索引处元素为新元素,并返回被替换元素, + * @param index + * @param e + * @return + */ + E set(int index, E e); + + /** + * 删除并返回指定指定索引处元素 + * @param index + * @return + */ + E remove(int index); + +// /** +// * 返回该对象在集合中的下标,不存在返回-1 +// * @param o +// * @return +// */ +// int indexOf(Object o); + +} \ No newline at end of file diff --git a/group20/592146505/data _structure/src/cn/wsc/utils/Stack.java b/group20/592146505/data _structure/src/cn/wsc/utils/Stack.java new file mode 100644 index 0000000000..3f156461e8 --- /dev/null +++ b/group20/592146505/data _structure/src/cn/wsc/utils/Stack.java @@ -0,0 +1,22 @@ +package cn.wsc.utils; + +public class Stack { + private ArrayList elementData = new ArrayList(); + + public void push(Object o){ + } + + public Object pop(){ + return null; + } + + public Object peek(){ + return null; + } + public boolean isEmpty(){ + return false; + } + public int size(){ + return -1; + } +} From baf1e6864e700cdcb2cec21b0ea4e42bf4631dd0 Mon Sep 17 00:00:00 2001 From: Alvin Date: Fri, 24 Feb 2017 23:58:10 -0800 Subject: [PATCH 120/216] Basic Data Structure implementation In Java --- .../com/basic/datastructure/ArrayList.java | 12 +- .../com/basic/datastructure/LinkedList.java | 109 ++++++++++++++---- .../src/com/basic/datastructure/Queue.java | 33 ++++++ .../src/com/basic/datastructure/Stack.java | 41 +++++++ 4 files changed, 165 insertions(+), 30 deletions(-) create mode 100644 group20/404130810/src/com/basic/datastructure/Queue.java create mode 100644 group20/404130810/src/com/basic/datastructure/Stack.java diff --git a/group20/404130810/src/com/basic/datastructure/ArrayList.java b/group20/404130810/src/com/basic/datastructure/ArrayList.java index 8aa4575882..86c001b2c1 100644 --- a/group20/404130810/src/com/basic/datastructure/ArrayList.java +++ b/group20/404130810/src/com/basic/datastructure/ArrayList.java @@ -97,12 +97,14 @@ private Object[] growIfNeeded() { public static void main(String[] args) { ArrayList list = new ArrayList(); - for (int i = 1; i <= 11; i++) { + for (int i = 0; i <= 11; i++) { list.add(String.valueOf(i)); } - list.add(10,"test"); - list.get(10); - list.remove(10); - System.out.println(list); + System.out.println(list.get(11)); + //list.add(10,"test"); + //list.get(10); + //list.remove(10); + //System.out.println(list); } + } diff --git a/group20/404130810/src/com/basic/datastructure/LinkedList.java b/group20/404130810/src/com/basic/datastructure/LinkedList.java index c0981aa8c4..43ba7ddd59 100644 --- a/group20/404130810/src/com/basic/datastructure/LinkedList.java +++ b/group20/404130810/src/com/basic/datastructure/LinkedList.java @@ -6,27 +6,32 @@ public class LinkedList implements List { private int size; - public void add(Object o) { - addLast(o); + public void add(Object item) { + addLast(item); } - public void add(int index, Object o) { + public void add(int index, Object item) { checkRange(index); if (index == 0) { - addFirst(o); + addFirst(item); } else if (index == size) { - addLast(o); + addLast(item); } else { - + Node tmpNode = new Node(item); + Node preNode = get(index - 1); + Node nextNode = get(index + 1); + preNode.next = tmpNode; + tmpNode.next = nextNode; + size ++; } } - public Object get(int index) { + public Node get(int index) { checkRange(index); if(size > 0){ int loopTimes = 0; Node p = first; - while(index > loopTimes){ + while(index > loopTimes){ p = p.next; loopTimes ++; } @@ -37,31 +42,45 @@ public Object get(int index) { } public Object remove(int index) { - return null; + checkRange(index); + Node tmpNode = null; + if(index == 0){ + removeFirst(); + }else if(index == size -1){ + removeLast(); + }else{ + tmpNode = get(index); + Node preNode = get(index-1); + Node nextNode = get(index + 1); + preNode.next = nextNode; + size --; + } + + return tmpNode; } public int size() { return size; } - private void addFirst(Object o) { + public void addFirst(Object item) { if (size == 0) { - first = new Node(o); + first = new Node(item); last = first; } else { - Node tmpNode = new Node(o); + Node tmpNode = new Node(item); tmpNode.next = first; first = tmpNode; } size++; } - private void addLast(Object o) { + public void addLast(Object item) { if (size == 0) { - first = new Node(o); + first = new Node(item); last = first; } else { - last.next = new Node(o); + last.next = new Node(item); last = last.next; } size++; @@ -69,15 +88,31 @@ private void addLast(Object o) { public Object removeFirst() { Node tmpNode = first; - first = first.next; - size--; + if(tmpNode == null){ + last = null; + }else if(size == 2){ + first = last; + last = null; + size --; + }else{ + first = first.next; + size--; + } return tmpNode; } public Object removeLast() { - Node tmpNode = last; - - return null; + Node tmpNode = null; + if(size == 1){ + this.removeFirst(); + }else if(size >0){ + int index = size - 1; + tmpNode = last; + get(index - 1).next = null; + last = get(index - 1); + size --; + } + return tmpNode; } private void checkRange(int index) { @@ -99,19 +134,43 @@ public String toString() { private static class Node { private Object item; private Node next; - Node(Object item) { this.item = item; } } public static void main(String[] args) { + + /*Test add LinkedList list = new LinkedList(); - for (int i = 0; i < 5; i++) { + for (int i = 0; i <= 5; i++) { list.add(i); - } - list.get(5); - + } + list.add(3, "test"); + System.out.println(list); + */ + + /*Test remove + list.remove(3); + System.out.println(list); + */ + + /*Test removeLast and removeFirst + System.out.println(list); + list.removeLast(); + System.out.println(list); + list.removeLast(); + System.out.println(list); + list.removeLast(); System.out.println(list); + */ + + /*Test from Java API + java.util.LinkedList linkedList = new java.util.LinkedList(); + linkedList.add("test"); + linkedList.removeFirst(); + System.out.println(linkedList); + */ + } } diff --git a/group20/404130810/src/com/basic/datastructure/Queue.java b/group20/404130810/src/com/basic/datastructure/Queue.java new file mode 100644 index 0000000000..f83d937e5c --- /dev/null +++ b/group20/404130810/src/com/basic/datastructure/Queue.java @@ -0,0 +1,33 @@ +package com.basic.datastructure; + +public class Queue { + LinkedList list = new LinkedList(); + private int size; + + public void enQueue(Object o){ + list.add(o); + size ++; + } + + public Object deQueue(){ + size --; + return list.removeLast(); + } + + public boolean isEmpty(){ + return list.size() == 0; + } + + public int size(){ + return size; + } + + public static void main(String[] args) { + Queue queue = new Queue(); + for (int i = 0; i < 10; i++) { + queue.enQueue(i); + } + queue.deQueue(); + System.out.println("Finished"); + } +} diff --git a/group20/404130810/src/com/basic/datastructure/Stack.java b/group20/404130810/src/com/basic/datastructure/Stack.java new file mode 100644 index 0000000000..7a58fd49e6 --- /dev/null +++ b/group20/404130810/src/com/basic/datastructure/Stack.java @@ -0,0 +1,41 @@ +package com.basic.datastructure; + +public class Stack { + private ArrayList elementData = new ArrayList(); + private int size; + + public void push(Object o){ + elementData.add(o); + size++; + } + public Object pop(){ + size --; + return elementData.remove(elementData.size() - 1); + } + + /** + * Looks at the object at the top of this stack without removing it from the stack. + * @return Object + */ + public Object peek(){ + return elementData.get(elementData.size() - 1); + } + public boolean isEmpty(){ + return size == 0; + } + public int size(){ + return size; + } + + public static void main(String[] args) { + Stack stack = new Stack(); + for (int i = 0; i < 10; i++) { + stack.push(i); + } + System.out.println(stack.peek()); + + stack.pop(); + System.out.println("Finished"); + } + +} From 5ca4bf2f17017284fb1ea9f7dc6cd9bd99a2f29a Mon Sep 17 00:00:00 2001 From: vvvandbb Date: Sat, 25 Feb 2017 16:00:00 +0800 Subject: [PATCH 121/216] add code 2-26 --- group08/649859235/2-26/article.md | 2 + .../2-26/com/vvv/base/ArrayList.java | 68 ++++++++++ .../2-26/com/vvv/base/BinaryTreeNode.java | 37 ++++++ .../649859235/2-26/com/vvv/base/IList.java | 9 ++ .../2-26/com/vvv/base/LinkedList.java | 117 ++++++++++++++++++ .../649859235/2-26/com/vvv/base/Queue.java | 73 +++++++++++ .../649859235/2-26/com/vvv/base/Stack.java | 30 +++++ 7 files changed, 336 insertions(+) create mode 100644 group08/649859235/2-26/article.md create mode 100644 group08/649859235/2-26/com/vvv/base/ArrayList.java create mode 100644 group08/649859235/2-26/com/vvv/base/BinaryTreeNode.java create mode 100644 group08/649859235/2-26/com/vvv/base/IList.java create mode 100644 group08/649859235/2-26/com/vvv/base/LinkedList.java create mode 100644 group08/649859235/2-26/com/vvv/base/Queue.java create mode 100644 group08/649859235/2-26/com/vvv/base/Stack.java diff --git a/group08/649859235/2-26/article.md b/group08/649859235/2-26/article.md new file mode 100644 index 0000000000..556350e58d --- /dev/null +++ b/group08/649859235/2-26/article.md @@ -0,0 +1,2 @@ +文章地址 +http://note.youdao.com/noteshare?id=a0345eff655b1cfc5877cc267452eed0&sub=FE5CD301B3C742269D04973B0DD2393C diff --git a/group08/649859235/2-26/com/vvv/base/ArrayList.java b/group08/649859235/2-26/com/vvv/base/ArrayList.java new file mode 100644 index 0000000000..e250afe294 --- /dev/null +++ b/group08/649859235/2-26/com/vvv/base/ArrayList.java @@ -0,0 +1,68 @@ +package com.vvv.base; + +public class ArrayList implements IList { + + private static final int DEFAULT_SIZE = 100; + + private int size; + private Object[] data = new Object[DEFAULT_SIZE]; + + @Override + public void add(Object o) { + if (size > data.length) { + increase(); + } + data[size] = o; + size++; + } + + @Override + public void add(int index, Object o) { + check(index); + + if (index > data.length - 1) { + increase(); + } + System.arraycopy(data, index, data, index + 1, size - index); + data[index] = o; + size++; + } + + private void check(int index) { + if (index < 0 || index > size) + throw new IndexOutOfBoundsException("index: " + index + ", size: " + + size); + } + + private void increase() { + Object[] newData = new Object[DEFAULT_SIZE * 2]; + System.arraycopy(data, 0, newData, 0, size); + data = newData; + } + + @Override + public Object get(int index) { + check(index); + return data[index]; + } + + @Override + public Object remove(int index) { + if (index > 0 && index < size) { + Object d = data[index]; + int diff = size - index - 1; + if (diff > 0) + System.arraycopy(data, index + 1, data, index, size - index - 1); + size--; + data[size] = null; + return d; + } + return null; + } + + @Override + public int size() { + return this.size; + } + +} diff --git a/group08/649859235/2-26/com/vvv/base/BinaryTreeNode.java b/group08/649859235/2-26/com/vvv/base/BinaryTreeNode.java new file mode 100644 index 0000000000..a5d5ee1d2a --- /dev/null +++ b/group08/649859235/2-26/com/vvv/base/BinaryTreeNode.java @@ -0,0 +1,37 @@ +package com.vvv.base; + +public class BinaryTreeNode { + + private Object data; + private BinaryTreeNode left; + private BinaryTreeNode right; + + 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) { + return null; + } + +} diff --git a/group08/649859235/2-26/com/vvv/base/IList.java b/group08/649859235/2-26/com/vvv/base/IList.java new file mode 100644 index 0000000000..3b449fab3f --- /dev/null +++ b/group08/649859235/2-26/com/vvv/base/IList.java @@ -0,0 +1,9 @@ +package com.vvv.base; + +public interface IList { + 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(); +} diff --git a/group08/649859235/2-26/com/vvv/base/LinkedList.java b/group08/649859235/2-26/com/vvv/base/LinkedList.java new file mode 100644 index 0000000000..fa03aba962 --- /dev/null +++ b/group08/649859235/2-26/com/vvv/base/LinkedList.java @@ -0,0 +1,117 @@ +package com.vvv.base; + +public class LinkedList implements IList { + private int size; + private Node head; + private Node tail; + + @Override + public void add(Object o) { + Node node = new Node(o); + if (head == null) { + head = node; + tail = node; + } else { + tail.next = node; + node.prev = tail; + tail = node; + } + size++; + } + + @Override + public void add(int index, Object o) { + check(index); + Node node = new Node(o); + Node temp = head; + for (int i = 0; i < index; i++) { + temp = temp.next; + } + if (temp.prev != null && temp.next != null) { + Node prevNode = temp.prev; + prevNode.next = node; + node.prev = prevNode; + node.next = temp; + temp.prev = node; + } else if (temp.prev == null) { + head = node; + temp.prev = node; + node.next = temp; + } else if (temp.next == null) { + temp.next = node; + node.prev = temp; + tail = node; + } + size++; + } + + @Override + public Object get(int index) { + check(index); + Node temp = head; + for (int i = 0; i < index; i++) { + temp = temp.next; + } + return temp.data; + } + + @Override + public Object remove(int index) { + check(index); + Node temp = head; + for (int i = 0; i < index; i++) { + temp = temp.next; + } + Object oldValue = temp.data; + if (temp.prev != null && temp.next != null) { + temp.prev.next = temp.next; + temp.next.prev = temp.prev; + temp = null; + } else if (temp.prev == null) { + head = temp.next; + temp.next.prev = null; + temp = null; + } else if (temp.next == null) { + tail = temp.prev; + temp.prev.next = null; + temp = null; + } + size--; + return oldValue; + } + + public boolean remove(Object obj) { + Node temp = head; + for (int i = 0; i < size; i++) { + if (obj.equals(temp.data)) { + remove(i); + return true; + } + temp = temp.next; + } + return false; + } + + private void check(int index) { + if (index < 0 || index > size) + throw new IndexOutOfBoundsException("index: " + index + ", size: " + + size); + } + + @Override + public int size() { + return size; + } + + @SuppressWarnings("hiding") + private static class Node { + Object data; + Node next; + Node prev; + + public Node(Object data) { + this.data = data; + } + } + +} diff --git a/group08/649859235/2-26/com/vvv/base/Queue.java b/group08/649859235/2-26/com/vvv/base/Queue.java new file mode 100644 index 0000000000..f97bd9d298 --- /dev/null +++ b/group08/649859235/2-26/com/vvv/base/Queue.java @@ -0,0 +1,73 @@ +package com.vvv.base; + +public class Queue { + + QueueNode head; + QueueNode tail; + private int size; + + public Queue() { + this.head = null; + this.tail = null; + } + + public void enQueue(Object o) { + if (head == null && tail == null) { + tail = new QueueNode(o); + head = tail; + } else { + QueueNode node = new QueueNode(o); + tail.next = node; + tail = tail.next; + } + size++; + } + + public Object deQueue() { + if (head == null) { + return null; + } + + if (head == tail && tail != null) { + QueueNode node = head; + tail = null; + head = null; + size--; + return node.data; + } + + Object obj = head.data; + head = head.next; + size--; + return obj; + } + + public boolean isEmpty() { + if(head==null && tail == null) + return true; + return false; + } + + public int size() { + return size; + } + +} + +class QueueNode { + Object data; + QueueNode next; + + public QueueNode() { + this(null, null); + } + + public QueueNode(Object data) { + this(data, null); + } + + public QueueNode(Object data, QueueNode next) { + this.data = data; + this.next = next; + } +} diff --git a/group08/649859235/2-26/com/vvv/base/Stack.java b/group08/649859235/2-26/com/vvv/base/Stack.java new file mode 100644 index 0000000000..5e3ed32e14 --- /dev/null +++ b/group08/649859235/2-26/com/vvv/base/Stack.java @@ -0,0 +1,30 @@ +package com.vvv.base; + +public class Stack { + private ArrayList data = new ArrayList(); + + public void push(Object o) { + data.add(o); + } + + public Object pop() { + return data.remove(data.size() - 1); + } + + public Object peek() { + if (data.size() > 0) { + return data.get(data.size() - 1); + } + return null; + } + + public boolean isEmpty() { + if (data.size() > 0) + return false; + return true; + } + + public int size() { + return data.size(); + } +} From a42e407ff8ce912ada8de2c75212bc7e3f1e59e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E5=8A=A0=E6=B6=9B?= Date: Sat, 25 Feb 2017 16:26:33 +0800 Subject: [PATCH 122/216] LinkedList Completed --- .../com/coding/basic/LinkedList.java | 140 ++++++++++++++++-- 1 file changed, 128 insertions(+), 12 deletions(-) diff --git a/group08/108621969/com/coding/basic/LinkedList.java b/group08/108621969/com/coding/basic/LinkedList.java index ac58b002a5..dadf8caeaf 100644 --- a/group08/108621969/com/coding/basic/LinkedList.java +++ b/group08/108621969/com/coding/basic/LinkedList.java @@ -1,58 +1,174 @@ package com.coding.basic; +import java.util.Objects; + /** * Created by zhangjiatao on 2017/2/25. */ public class LinkedList implements List { - private Node head; + private Node head = null,tail = null; + private int size=0; + private LinkedListIterator iterator = null; @Override public void add(Object o) { - + Node newNode = new Node(o); + if(tail == null) { + head = tail = newNode; + }else { + tail.next = newNode; + tail = newNode; + } + size++; } @Override public void add(int index, Object o) { - + ifOutOfBounds(index); + Node temp = head,previousNode = head; + Node newNode = new Node(o); + if(index == 0) { + newNode.next = head; + head = newNode; + return ; + } + while(index-- > 0) { + previousNode = temp; + temp = temp.next; + } + previousNode.next = newNode; + newNode.next = temp; + size++; } @Override public Object get(int index) { - return null; + ifOutOfBounds(index); + Node temp = head; + while(index-- > 0) { + temp = temp.next; + } + return temp; } @Override public Object remove(int index) { - return null; + ifOutOfBounds(index); + Node temp = head,previousNode = head; + if(head == tail) { + head = tail = null; + return temp; + } + while(index-- > 0) { + previousNode = temp; + temp = temp.next; + } + if(tail == temp) { + tail = previousNode; + } + previousNode.next = temp.next; + size--; + return temp; } @Override public int size() { - return 0; + return size; } public void addFirst(Object o) { - + add(0,o); } public void addLast(Object o) { - + add(o); } public Object removeFirst() { - return null; + return remove(0); } public Object removeLast() { - return null; + return remove(size()-1); + } + + public LinkedListIterator Iterator() { + if(iterator ==null) { + iterator = new LinkedListIterator(this); + } + return iterator; } - public Iterator iterator() { - return null; + private void ifOutOfBounds(int index) { + if(index >= size || index < 0) { + throw new IndexOutOfBoundsException(); + } + } + + private boolean isEmpty() { + return size==0; + } + + public String toString() { + String str = ""; + Node temp = head; + while(temp!=tail) { + str = str + temp.data + " "; + temp = temp.next; + } + return str + tail.data; } private static class Node { Object data; Node next; + public Node(Object o) { + this.data = o; + this.next = null; + } + } + + private class LinkedListIterator implements Iterator { + private LinkedList linkedList = null; + private Node currentNode = null; + + public LinkedListIterator(LinkedList linkedList) { + this.linkedList = linkedList; + this.currentNode = this.linkedList.head; + } + + @Override + public boolean hasNext() { + if(linkedList.isEmpty()) return false; + return currentNode.next != null; + } + + @Override + public Object next() { + Object data = currentNode.data; + if(hasNext()) { + currentNode = currentNode.next; + } + return data; + } + } + + public static void main(String[] args) { + LinkedList arr = new LinkedList(); + arr.add(1); + arr.add(2); + arr.add(3); + arr.add(5); + arr.add(1,4); + arr.remove(2); + arr.removeLast(); + arr.addFirst(5); + System.out.println(arr.toString()); + System.out.println(arr.size()); + System.out.println(arr.Iterator().hasNext()); + System.out.println(arr.Iterator().next()); + System.out.println(arr.Iterator().next()); + System.out.println(arr.Iterator().next()); + System.out.println(arr.Iterator().next()); } } From 9ef84dcc387db5c4963de062d6655f3607758454 Mon Sep 17 00:00:00 2001 From: xiaoyuan Date: Sat, 25 Feb 2017 17:09:20 +0800 Subject: [PATCH 123/216] implement basic data structure --- .../src/com/coding/basic/ArrayList.java | 88 ++++++++ .../src/com/coding/basic/BinaryTreeNode.java | 62 ++++++ .../src/com/coding/basic/Iterator.java | 7 + .../src/com/coding/basic/LinkedList.java | 192 ++++++++++++++++++ .../542087872/src/com/coding/basic/List.java | 9 + .../542087872/src/com/coding/basic/Queue.java | 22 ++ .../542087872/src/com/coding/basic/Stack.java | 25 +++ .../542087872/src/com/coding/basic/Test.java | 166 +++++++++++++++ 8 files changed, 571 insertions(+) create mode 100644 group16/542087872/src/com/coding/basic/ArrayList.java create mode 100644 group16/542087872/src/com/coding/basic/BinaryTreeNode.java create mode 100644 group16/542087872/src/com/coding/basic/Iterator.java create mode 100644 group16/542087872/src/com/coding/basic/LinkedList.java create mode 100644 group16/542087872/src/com/coding/basic/List.java create mode 100644 group16/542087872/src/com/coding/basic/Queue.java create mode 100644 group16/542087872/src/com/coding/basic/Stack.java create mode 100644 group16/542087872/src/com/coding/basic/Test.java diff --git a/group16/542087872/src/com/coding/basic/ArrayList.java b/group16/542087872/src/com/coding/basic/ArrayList.java new file mode 100644 index 0000000000..1b10b441cf --- /dev/null +++ b/group16/542087872/src/com/coding/basic/ArrayList.java @@ -0,0 +1,88 @@ +package com.coding.basic; + +import java.util.Arrays; + +public class ArrayList implements List { + + private int size = 0; + + private Object[] elementData = new Object[10]; + + // 每次乘2增长 + private void grow() { + elementData = Arrays.copyOf(elementData, elementData.length * 2); + } + + + public void add(Object o){ + if (size >= elementData.length) { + this.grow(); + } + + elementData[size++] = o; + } + public void add(int index, Object o){ + if (size >= elementData.length) { + this.grow(); + } + System.arraycopy(elementData, index, elementData, index + 1, size - index); + + elementData[index] = o; + size++; + } + + public Object get(int index){ + if (index >= size) { + throw new IndexOutOfBoundsException(); + } + return elementData[index]; + } + + public Object remove(int index){ + if (index >= size) { + throw new IndexOutOfBoundsException(); + } + + Object el = elementData[index]; + System.arraycopy(elementData, index + 1, elementData, index, size - index - 1); + + size--; + return el; + } + + public int size(){ + return size; + } + + private class ArrIter implements Iterator { + int cursor = 0; + + @Override + public boolean hasNext() { + return cursor < size; + } + + @Override + public Object next() { + return elementData[cursor++]; + } + } + + public Iterator iterator(){ + return new ArrIter(); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("["); + for (int i = 0; i < size; i++) { + sb.append(elementData[i]); + if (i < size - 1) { + sb.append(","); + } + } + sb.append("]"); + return sb.toString(); + } +} diff --git a/group16/542087872/src/com/coding/basic/BinaryTreeNode.java b/group16/542087872/src/com/coding/basic/BinaryTreeNode.java new file mode 100644 index 0000000000..df167343a0 --- /dev/null +++ b/group16/542087872/src/com/coding/basic/BinaryTreeNode.java @@ -0,0 +1,62 @@ +package com.coding.basic; + +public class BinaryTreeNode { + + private int data; + private BinaryTreeNode left; + private BinaryTreeNode right; + + public int getData() { + return data; + } + public void setData(int 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(int data) { + this.data = data; + } + + private BinaryTreeNode insertAt(BinaryTreeNode node, int o) { + if (o < node.getData()) { + if (node.getLeft() != null) { + return insertAt(node.getLeft(), o); + } else { + BinaryTreeNode nowNode = new BinaryTreeNode(o); + node.setLeft(nowNode); + + return nowNode; + } + } else { + if (node.getRight() != null) { + return insertAt(node.getRight(), o); + } else { + BinaryTreeNode nowNode = new BinaryTreeNode(o); + node.setRight(nowNode); + return nowNode; + } + } + } + + public BinaryTreeNode insert(int o){ + return insertAt(this, o); + } + + @Override + public String toString() { + return "data: " + data; + } +} diff --git a/group16/542087872/src/com/coding/basic/Iterator.java b/group16/542087872/src/com/coding/basic/Iterator.java new file mode 100644 index 0000000000..06ef6311b2 --- /dev/null +++ b/group16/542087872/src/com/coding/basic/Iterator.java @@ -0,0 +1,7 @@ +package com.coding.basic; + +public interface Iterator { + public boolean hasNext(); + public Object next(); + +} diff --git a/group16/542087872/src/com/coding/basic/LinkedList.java b/group16/542087872/src/com/coding/basic/LinkedList.java new file mode 100644 index 0000000000..144af4ec8d --- /dev/null +++ b/group16/542087872/src/com/coding/basic/LinkedList.java @@ -0,0 +1,192 @@ +package com.coding.basic; + +public class LinkedList implements List { + + private Node head; + private Node tail; + + public void add(Object o){ + Node nowNode = new Node(o); + if (head == null) { + head = nowNode; + } else { + tail.next = nowNode; + } + tail = nowNode; + } + public void add(int index , Object o){ + int count = 0; + Node lastOne = null; + Node tpHead = head; + while (tpHead != null && count != index) { + count++; + lastOne = tpHead; + tpHead = tpHead.next; + } + if (count != index) { + throw new IndexOutOfBoundsException(); + } + + + Node nowNode = new Node(o); + if (lastOne == null) { + head = nowNode; + head.next = tpHead; + } else { + lastOne.next = nowNode; + nowNode.next = tpHead; + } + } + public Object get(int index){ + int count = 0; + Node tpHead = head; + while (tpHead != null && count != index) { + count++; + tpHead = tpHead.next; + } + if (count != index) { + throw new IndexOutOfBoundsException(); + } + + return tpHead.data; + } + public Object remove(int index){ + int count = 0; + Node lastOne = null; + Node tpHead = head; + while (tpHead != null && count != index) { + count++; + lastOne = tpHead; + tpHead = tpHead.next; + } + if (count != index) { + throw new IndexOutOfBoundsException(); + } + + if (lastOne == null) { + head = tpHead.next; + } else { + lastOne.next = tpHead.next; + } + + if (tpHead.next == null) { + tail = lastOne; + } + + return tpHead.data; + } + + public int size(){ + int count = 0; + Node tpHead = head; + while (tpHead != null) { + count ++; + tpHead = tpHead.next; + } + + return count; + } + + public void addFirst(Object o){ + Node nowNode = new Node(o); + if (head == null) { + head = nowNode; + tail = nowNode; + } else { + nowNode.next = head; + head = nowNode; + } + } + public void addLast(Object o){ + Node nowNode = new Node(o); + if (head == null) { + head = nowNode; + tail = nowNode; + } else { + tail.next = nowNode; + tail = nowNode; + } + } + public Object removeFirst(){ + if (head == null) { + throw new IndexOutOfBoundsException(); + } + + Node nowValue = head; + + Node nextNode = head.next; + if (nextNode == null) { + tail = null; + } + head = nextNode; + + return nowValue.data; + } + public Object removeLast(){ + if (head == null) { + throw new IndexOutOfBoundsException(); + } + + Node nowValue = tail; + + Node lastOne = null; + Node tpHead = head; + while (tpHead != tail) { + lastOne = tpHead; + tpHead = tpHead.next; + } + if (lastOne == null) { + head = null; + } else { + lastOne.next = null; + } + tail = lastOne; + + return nowValue.data; + } + + private class LinkIter implements Iterator { + + Node cursor = head; + + @Override + public boolean hasNext() { + return cursor != null; + } + + @Override + public Object next() { + Node ret = cursor; + cursor = cursor.next; + return ret.data; + } + } + + public Iterator iterator(){ + return new LinkIter(); + } + + + private static class Node{ + Object data; + Node next; + + public Node(Object data) { + this.data = data; + } + } + + @Override + public String toString() { + Node tpHead = head; + StringBuilder sb = new StringBuilder("["); + while (tpHead != null) { + sb.append(tpHead.data); + sb.append(","); + tpHead = tpHead.next; + } + sb.append("]"); + return sb.toString(); + } + +} diff --git a/group16/542087872/src/com/coding/basic/List.java b/group16/542087872/src/com/coding/basic/List.java new file mode 100644 index 0000000000..10d13b5832 --- /dev/null +++ b/group16/542087872/src/com/coding/basic/List.java @@ -0,0 +1,9 @@ +package com.coding.basic; + +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(); +} diff --git a/group16/542087872/src/com/coding/basic/Queue.java b/group16/542087872/src/com/coding/basic/Queue.java new file mode 100644 index 0000000000..8e4285464b --- /dev/null +++ b/group16/542087872/src/com/coding/basic/Queue.java @@ -0,0 +1,22 @@ +package com.coding.basic; + +public class Queue { + + private LinkedList linkedList = new LinkedList(); + + public void enQueue(Object o){ + linkedList.addLast(o); + } + + public Object deQueue(){ + return linkedList.removeFirst(); + } + + public boolean isEmpty(){ + return linkedList.size() == 0; + } + + public int size(){ + return linkedList.size(); + } +} diff --git a/group16/542087872/src/com/coding/basic/Stack.java b/group16/542087872/src/com/coding/basic/Stack.java new file mode 100644 index 0000000000..bfe98dd8b7 --- /dev/null +++ b/group16/542087872/src/com/coding/basic/Stack.java @@ -0,0 +1,25 @@ +package com.coding.basic; + +public class Stack { + private ArrayList elementData = new ArrayList(); + + public void push(Object o){ + elementData.add(o); + } + + public Object pop(){ + Object o = elementData.get(elementData.size() - 1); + elementData.remove(elementData.size() - 1); + return o; + } + + public Object peek(){ + return elementData.get(elementData.size() - 1); + } + public boolean isEmpty(){ + return elementData.size() == 0; + } + public int size(){ + return elementData.size(); + } +} diff --git a/group16/542087872/src/com/coding/basic/Test.java b/group16/542087872/src/com/coding/basic/Test.java new file mode 100644 index 0000000000..2db5b2f9ab --- /dev/null +++ b/group16/542087872/src/com/coding/basic/Test.java @@ -0,0 +1,166 @@ +package com.coding.basic; + + +/** + * Created by xiaoyuan on 25/02/2017. + */ +public class Test { + public static void main(String[] args) { + + testArrayList(); + testLinkedList(); + + testQueue(); + testStack(); + + + testBinaryTreeNode(); + } + + private static void testBinaryTreeNode() { + + BinaryTreeNode binaryTreeNode = new BinaryTreeNode(10); + binaryTreeNode.insert(5); + binaryTreeNode.insert(4); + binaryTreeNode.insert(6); + binaryTreeNode.insert(11); + + traverse(binaryTreeNode); + + } + + private static void traverse(BinaryTreeNode node) { + if (node.getLeft() != null) { + traverse(node.getLeft()); + } + + System.out.println("-- " + node.getData() + " --"); + + if (node.getRight() != null) { + traverse(node.getRight()); + } + + } + + + static void testStack() { + + Stack stack = new Stack(); + stack.push(1); + stack.push(2); + stack.push(3); + stack.push(4); + + System.out.println(stack.size()); + System.out.println(stack.isEmpty()); + + System.out.println(stack.pop()); + System.out.println(stack.pop()); + System.out.println(stack.pop()); + System.out.println(stack.pop()); + + System.out.println(stack.isEmpty()); + + } + + static void testQueue() { + Queue queue = new Queue(); + queue.enQueue(1); + queue.enQueue(2); + + System.out.println(queue.size()); + System.out.println(queue.deQueue()); + System.out.println(queue.deQueue()); + System.out.println(queue.size()); + } + static void testLinkedList() { + LinkedList linkedList = new LinkedList(); + linkedList.add(1); + linkedList.add(2); + + System.out.println(linkedList.size()); + System.out.println(linkedList); + + linkedList.add(4); + linkedList.add(5); + System.out.println(linkedList.size()); + System.out.println(linkedList); + + + linkedList.add(0, 10); + linkedList.add(0, 9); + System.out.println(linkedList.size()); + System.out.println(linkedList); + + System.out.println(linkedList.get(3)); + + linkedList.remove(0); + System.out.println(linkedList.size()); + System.out.println(linkedList); + + + linkedList.addFirst(100); + linkedList.addLast(8888); + System.out.println(linkedList.size()); + System.out.println(linkedList); + + + linkedList.removeFirst(); + linkedList.removeLast(); + System.out.println(linkedList.size()); + System.out.println(linkedList); + + Iterator iterator = linkedList.iterator(); + while (iterator.hasNext()) { + System.out.println(iterator.next()); + } + + } + + static void testArrayList() { + ArrayList arrayList = new ArrayList(); + arrayList.add("1"); + arrayList.add("2"); + // test size and add + System.out.println(arrayList.size()); + System.out.println(arrayList); + + + arrayList.add("3"); + arrayList.add("4"); + arrayList.add("5"); + arrayList.add("6"); + arrayList.add("7"); + arrayList.add("8"); + arrayList.add("9"); + arrayList.add("10"); + arrayList.add("11"); + arrayList.add("12"); + arrayList.add("13"); + + // test size + // test grow + System.out.println(arrayList.size()); + System.out.println(arrayList); + + // test add at index + arrayList.add(2, 100); + System.out.println(arrayList.size()); + System.out.println(arrayList); + + // test remove + arrayList.remove(0); + System.out.println(arrayList.size()); + System.out.println(arrayList); + arrayList.remove(2); + System.out.println(arrayList.size()); + System.out.println(arrayList); + + // test iterator + Iterator iterator = arrayList.iterator(); + while (iterator.hasNext()) { + System.out.println(iterator.next()); + } + + } +} From c6b11b7f869d536ca04eb3fe9fa0da1661166cbc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E5=8A=A0=E6=B6=9B?= Date: Sat, 25 Feb 2017 17:15:24 +0800 Subject: [PATCH 124/216] Stack & Queue Completed --- .../108621969/com/coding/basic/ArrayList.java | 2 +- group08/108621969/com/coding/basic/Queue.java | 18 ++++++++-- group08/108621969/com/coding/basic/Stack.java | 33 +++++++++++++++++++ 3 files changed, 49 insertions(+), 4 deletions(-) diff --git a/group08/108621969/com/coding/basic/ArrayList.java b/group08/108621969/com/coding/basic/ArrayList.java index e8b6553ef3..a06488acb9 100644 --- a/group08/108621969/com/coding/basic/ArrayList.java +++ b/group08/108621969/com/coding/basic/ArrayList.java @@ -63,7 +63,7 @@ private boolean isFull() { return false; } - private boolean isEmpty() { + public boolean isEmpty() { if(size == 0) { return true; } diff --git a/group08/108621969/com/coding/basic/Queue.java b/group08/108621969/com/coding/basic/Queue.java index bd282cbaf1..fd087cbd9b 100644 --- a/group08/108621969/com/coding/basic/Queue.java +++ b/group08/108621969/com/coding/basic/Queue.java @@ -4,18 +4,30 @@ * Created by zhangjiatao on 2017/2/25. */ public class Queue { + private ArrayList elementData = new ArrayList(); + public void enQueue(Object o) { + elementData.add(0, o); } public Object deQueue() { - return null; + return elementData.remove(elementData.size() - 1); } public boolean isEmpty() { - return false; + return elementData.isEmpty(); } public int size() { - return -1; + return elementData.size(); + } + + public static void main(String[] args) { + Queue queue = new Queue(); + queue.enQueue(1); + queue.enQueue(2); + queue.enQueue(3); + System.out.println(queue.deQueue()); + System.out.println(queue.toString()); } } diff --git a/group08/108621969/com/coding/basic/Stack.java b/group08/108621969/com/coding/basic/Stack.java index 6460d91c30..d600d86fe5 100644 --- a/group08/108621969/com/coding/basic/Stack.java +++ b/group08/108621969/com/coding/basic/Stack.java @@ -1,7 +1,40 @@ package com.coding.basic; +import java.util.ArrayList; + + /** * Created by zhangjiatao on 2017/2/25. */ public class Stack { + private ArrayList elementData = new ArrayList(); + + public void push(Object o) { + elementData.add(elementData.size(), o); + } + + public Object pop() { + return elementData.remove(elementData.size() - 1); + } + + public Object peek() { + return elementData.get(elementData.size() - 1); + } + + public boolean isEmpty() { + return elementData.isEmpty(); + } + + public int size() { + return elementData.size(); + } + + public static void main(String[] args) { + Stack stack = new Stack(); + stack.push(1); + stack.push(2); + stack.push(3); + System.out.println(stack.pop()); + System.out.println(stack.toString()); + } } From d728768324c7c36025de457387ead73aedcb63e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E5=8A=A0=E6=B6=9B?= Date: Sat, 25 Feb 2017 17:19:32 +0800 Subject: [PATCH 125/216] BinaryTreeNode Completed --- .../com/coding/basic/BinaryTreeNode.java | 24 ++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/group08/108621969/com/coding/basic/BinaryTreeNode.java b/group08/108621969/com/coding/basic/BinaryTreeNode.java index 75fb4efad2..f86efd62f5 100644 --- a/group08/108621969/com/coding/basic/BinaryTreeNode.java +++ b/group08/108621969/com/coding/basic/BinaryTreeNode.java @@ -8,8 +8,14 @@ public class BinaryTreeNode { private BinaryTreeNode left; private BinaryTreeNode right; - public Object getData() { - return data; + public BinaryTreeNode(Object o) { + this.data = o; + this.left = null; + this.right = null; + } + + public int getData() { + return (int) data; } public void setData(Object data) { @@ -33,6 +39,18 @@ public void setRight(BinaryTreeNode right) { } public BinaryTreeNode insert(Object o) { - return null; + BinaryTreeNode newNode = new BinaryTreeNode(o); + insertInto(this, newNode); + return this; + } + + private void insertInto(BinaryTreeNode tree, BinaryTreeNode o) { + if (o.getData() <= tree.getData()) { + if (tree.getLeft() != null) insertInto(tree.getLeft(), o); + else tree.setLeft(o); + } else { + if (tree.getRight() != null) insertInto(tree.getRight(), o); + else tree.setRight(o); + } } } From 6e39ef65d41ba58d08b422fa31782b417d245fee Mon Sep 17 00:00:00 2001 From: maishihang <446031103@qq.com> Date: Sat, 25 Feb 2017 17:39:20 +0800 Subject: [PATCH 126/216] complete 20170225 complete --- .../src/com/coding/basic/ArrayList.java | 121 ++++++++++ .../src/com/coding/basic/BinaryTreeNode.java | 44 ++++ .../src/com/coding/basic/Iterator.java | 7 + .../src/com/coding/basic/LinkedList.java | 225 ++++++++++++++++++ .../446031103/src/com/coding/basic/List.java | 9 + .../446031103/src/com/coding/basic/Queue.java | 68 ++++++ .../446031103/src/com/coding/basic/Stack.java | 81 +++++++ 7 files changed, 555 insertions(+) create mode 100644 group12/446031103/src/com/coding/basic/ArrayList.java create mode 100644 group12/446031103/src/com/coding/basic/BinaryTreeNode.java create mode 100644 group12/446031103/src/com/coding/basic/Iterator.java create mode 100644 group12/446031103/src/com/coding/basic/LinkedList.java create mode 100644 group12/446031103/src/com/coding/basic/List.java create mode 100644 group12/446031103/src/com/coding/basic/Queue.java create mode 100644 group12/446031103/src/com/coding/basic/Stack.java diff --git a/group12/446031103/src/com/coding/basic/ArrayList.java b/group12/446031103/src/com/coding/basic/ArrayList.java new file mode 100644 index 0000000000..c627a7d2fa --- /dev/null +++ b/group12/446031103/src/com/coding/basic/ArrayList.java @@ -0,0 +1,121 @@ +package com.coding.basic; + +import java.util.Arrays; + +/** + * + * arrayList集合-数组 + * + * @ClassName ArrayList + * @author msh + * @date 2017年2月21日 下午3:49:24 + */ +public class ArrayList implements List { + // 记录ArrayList集合大小 + private int size = 0; + // 初始化存储数组 + private Object[] elementData = new Object[100]; + /** + * + * 向最后插入元素 + * + * @Method add 添加 + * @param o 元素 + * @see com.coding.basic.List#add(java.lang.Object) + */ + public void add(Object o){ + // 数组不够时增长 + growOrNot(size + 1); + elementData[size] = o; + ++size; + } + /** + * + * 向指定位置插入元素 + * + * @Method add 添加 + * @param index 下标 + * @param o 元素 + * @see com.coding.basic.List#add(int, java.lang.Object) + */ + public void add(int index, Object o){ + validate(index); + growOrNot(size + 1); + System.arraycopy(elementData, index, elementData, index + 1, size - index); + elementData[index] = o; + ++size; + } + /** + * + * 取得元素 + * + * @Method get 取得 + * @param index 下标 + * @return + * @see com.coding.basic.List#get(int) + */ + public Object get(int index){ + validate(index); + return elementData[index]; + } + /** + * + * 删除元素 + * + * @Method remove 删除 + * @param index 下标 + * @return 删除的元素 + * @see com.coding.basic.List#remove(int) + */ + public Object remove(int index){ + Object oldValue = elementData[index]; + validate(index); + System.arraycopy(elementData, index + 1, elementData, index, size - index - 1); + elementData[size] = null; + --size; + return oldValue; + } + /** + * + * 取得集合大小 + * + * @Method size 集合大小 + * @return 集合大小 + * @see com.coding.basic.List#size() + */ + public int size(){ + return size; + } + + public Iterator iterator(){ + return null; + } + /** + * + * 判断是否需要增长数组 + * + * @MethodName growOrNot + * @author msh + * @date 2017年2月21日 下午3:53:29 + * @param minCapacity + */ + private void growOrNot(int minCapacity) { + // 当增加长度大于数组长度时,增长 + if (minCapacity > elementData.length) { + elementData = Arrays.copyOf(elementData, elementData.length * 2); + } + } + /** + * + * 验证 + * + * @MethodName validate 下标 + * @author msh + * @date 2017年2月21日 下午3:54:21 + * @param index + */ + private void validate(int index) { + if (index < 0 || index >= size) + throw new IndexOutOfBoundsException("Index: " + index + ", Size: " + size); + } +} diff --git a/group12/446031103/src/com/coding/basic/BinaryTreeNode.java b/group12/446031103/src/com/coding/basic/BinaryTreeNode.java new file mode 100644 index 0000000000..ed26d946bb --- /dev/null +++ b/group12/446031103/src/com/coding/basic/BinaryTreeNode.java @@ -0,0 +1,44 @@ +package com.coding.basic; + + +public class BinaryTreeNode { + private Object data; + private BinaryTreeNode left; + private BinaryTreeNode right; + private BinaryTreeNode( Object data,BinaryTreeNode left,BinaryTreeNode right){ + this.data = data; + this.left = left; + this.right = right; + } + 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(BinaryTreeNode tree,Object o){ + if(null== tree){ + tree = new BinaryTreeNode(o, null, null); + } + if(Integer.valueOf(o.toString())>Integer.valueOf(tree.data.toString())){ + tree.right =insert(tree.right,o); + }else{ + tree.left = insert(tree.left,o); + } + return tree; + } + +} diff --git a/group12/446031103/src/com/coding/basic/Iterator.java b/group12/446031103/src/com/coding/basic/Iterator.java new file mode 100644 index 0000000000..06ef6311b2 --- /dev/null +++ b/group12/446031103/src/com/coding/basic/Iterator.java @@ -0,0 +1,7 @@ +package com.coding.basic; + +public interface Iterator { + public boolean hasNext(); + public Object next(); + +} diff --git a/group12/446031103/src/com/coding/basic/LinkedList.java b/group12/446031103/src/com/coding/basic/LinkedList.java new file mode 100644 index 0000000000..de508694a0 --- /dev/null +++ b/group12/446031103/src/com/coding/basic/LinkedList.java @@ -0,0 +1,225 @@ +package com.coding.basic; + +/** + * + * LinkedList集合-链 + * + * @ClassName LinkedList + * @author msh + * @date 2017年2月21日 下午4:08:01 + */ +public class LinkedList implements List { + //链头 + private Node head; + //集合大小 + private int size=0; + /** + * + * 向链中添加元素 + * + * @Method add 添加 + * @param o 元素 + * @see com.coding.basic.List#add(java.lang.Object) + */ + public void add(Object o){ + Node newNode = new Node(o, null); + if (null == head) { + head = newNode; + } else { + Node lastNode = null; + for (int i = 0; i < size; i++) { + lastNode = (Node) get(i); + } + lastNode.next = newNode; + } + size++; + } + /** + * + * 向链中添加元素 + * + * @Method add 增加 + * @param index 下标 + * @param o 元素 + * @see com.coding.basic.List#add(int, java.lang.Object) + */ + public void add(int index , Object o){ + validate(index); + Node newNode = null; + Node perNode = null; + Node nextNode = null; + // 当为最后插入时 + if (index == size - 1) { + newNode = new Node(o, null); + for (int i = 0; i < index; i++) { + Node tempNode = (Node) get(i); + perNode = tempNode.next; + } + perNode.next = newNode; + } else if (0 == index) { + nextNode = head.next; + newNode = new Node(o, nextNode); + head = newNode; + } else { + for (int i = 0; i < index; i++) { + Node tempNode = (Node) get(i); + perNode = tempNode.next; + } + nextNode = perNode.next.next; + newNode = new Node(o, nextNode); + perNode.next = newNode; + } + size++; + } + /** + * + * 取得元素 + * + * @Method get 取得 + * @param index 下标 + * @return + * @see com.coding.basic.List#get(int) + */ + public Object get(int index){ + validate(index); + Node tempNode = head; + for (int i = 0; i <= index; i++) { + tempNode = tempNode.next; + } + return tempNode; + } + /** + * + * 删除元素 + * + * @Method remove 删除 + * @param index 下标 + * @return + * @see com.coding.basic.List#remove(int) + */ + public Object remove(int index){ + Node removeNode = (Node) get(index); + validate(index); + if (index == size - 1) { + Node tempNode = head; + for (int i = 0; i < index; i++) { + tempNode = tempNode.next; + } + tempNode.next = null; + } else if (index == 0) { + Node tempNode = head.next; + head.next = null; + head = tempNode; + } else { + } + size--; + return removeNode; + } + /** + * + * 取得集合大小 + * + * @Method size 集合大小 + * @return 集合大小 + * @see com.coding.basic.List#size() + */ + public int size(){ + return size; + } + /** + * + * 想链头中插入元素 + * + * @MethodName addFirst + * @author msh + * @date 2017年2月21日 下午4:10:56 + * @param o + */ + public void addFirst(Object o){ + Node newNode = new Node(o, head); + head = newNode; + } + /** + * + * 向链后加入元素 + * + * @MethodName addLast + * @author msh + * @date 2017年2月21日 下午4:11:43 + * @param o + */ + public void addLast(Object o){ + add(o); + } + /** + * + * 删除链头 + * + * @MethodName removeFirst + * @author msh + * @date 2017年2月21日 下午4:12:14 + * @return + */ + public Object removeFirst(){ + if(null==head) + throw new IndexOutOfBoundsException("Size: " + size); + Node orgHead = head; + Node tempNode = head.next; + head.next = null; + head = tempNode; + return orgHead; + } + /** + * + * 删除链尾 + * + * @MethodName removeLast + * @author zhaogd + * @date 2017年2月21日 下午4:12:44 + * @return + */ + public Object removeLast(){ + if(null==head) + throw new IndexOutOfBoundsException("Size: " + size); + Node lastNode = (Node) get(size); + Node tempNode = head; + for (int i = 0; i < (size - 1); i++) { + tempNode = tempNode.next; + } + tempNode.next = null; + return lastNode; + } + public Iterator iterator(){ + return null; + } + + /** + * + * 验证 + * + * @MethodName validate 下标 + * @author msh + * @date 2017年2月21日 下午3:54:21 + * @param index + */ + private void validate(int index) { + if (index < 0 || index >= size) + throw new IndexOutOfBoundsException("Index: " + index + ", Size: " + size); + } + /** + * + * 链中元素 + * + * @ClassName Node + * @author zhaogd + * @date 2017年2月21日 下午4:13:10 + */ + private static class Node{ + Object data; + Node next; + public Node(Object data, Node next) { + this.data = data; + this.next = next; + } + } +} diff --git a/group12/446031103/src/com/coding/basic/List.java b/group12/446031103/src/com/coding/basic/List.java new file mode 100644 index 0000000000..10d13b5832 --- /dev/null +++ b/group12/446031103/src/com/coding/basic/List.java @@ -0,0 +1,9 @@ +package com.coding.basic; + +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(); +} diff --git a/group12/446031103/src/com/coding/basic/Queue.java b/group12/446031103/src/com/coding/basic/Queue.java new file mode 100644 index 0000000000..3844d9dd24 --- /dev/null +++ b/group12/446031103/src/com/coding/basic/Queue.java @@ -0,0 +1,68 @@ +package com.coding.basic; + +/** + * + * 队列-先进先出 + * + * @ClassName Queue + * @author msh + * @date 2017年2月21日 下午9:29:03 + */ +public class Queue { + private LinkedList elementData = new LinkedList(); + /** + * + * 入队列 + * + * @MethodName enQueue + * @author msh + * @date 2017年2月21日 下午9:45:15 + * @param o + */ + public void enQueue(Object o){ + elementData.add(o); + } + /** + * + * 离开队列 + * + * @MethodName deQueue + * @author msh + * @date 2017年2月21日 下午9:56:06 + * @return + */ + public Object deQueue(){ + if(isEmpty()) + throw new IndexOutOfBoundsException("size:"+size()); + Object o=elementData.get(0); + elementData.removeFirst(); + return o; + } + /** + * + * 是否为空 + * + * @MethodName isEmpty + * @author msh + * @date 2017年2月21日 下午9:57:14 + * @return + */ + public boolean isEmpty(){ + boolean temp = false; + if(0==elementData.size()) + temp= true; + return temp; + } + /** + * + * 队列中元素 + * + * @MethodName size + * @author msh + * @date 2017年2月21日 下午9:57:28 + * @return + */ + public int size(){ + return elementData.size(); + } +} diff --git a/group12/446031103/src/com/coding/basic/Stack.java b/group12/446031103/src/com/coding/basic/Stack.java new file mode 100644 index 0000000000..4d1c58b671 --- /dev/null +++ b/group12/446031103/src/com/coding/basic/Stack.java @@ -0,0 +1,81 @@ +package com.coding.basic; + +/** + * + * 栈-先进后出 + * + * @ClassName Stack + * @author msh + * @date 2017年2月21日 下午9:05:39 + */ +public class Stack { + + private ArrayList elementData = new ArrayList(); + /** + * + * 向栈中加入元素 + * + * @MethodName push + * @author msh + * @date 2017年2月21日 下午9:12:03 + * @param o + */ + public void push(Object o){ + elementData.add(o); + } + /** + * + * 从栈中取出元素 + * + * @MethodName pop + * @author msh + * @date 2017年2月21日 下午9:12:51 + * @return + */ + public Object pop(){ + Object o= peek(); + elementData.remove(size()-1); + return o; + } + /** + * + * 取出栈顶元素 + * + * @MethodName peek + * @author msh + * @date 2017年2月21日 下午9:13:08 + * @return + */ + public Object peek(){ + Object o=elementData.get(size()-1); + return o; + } + /** + * + * 判断栈中是否有元素 + * + * @MethodName isEmpty + * @author msh + * @date 2017年2月21日 下午9:14:26 + * @return + */ + public boolean isEmpty(){ + boolean temp = false; + if(0==size()) + temp = true; + return temp; + } + /** + * + * 栈中有多少元素 + * + * @MethodName size + * @author msh + * @date 2017年2月21日 下午9:16:42 + * @return + */ + public int size(){ + return elementData.size(); + } + +} From 749c2856ea7fea72a6d7d9bc0b5dfe22c1d5d6b8 Mon Sep 17 00:00:00 2001 From: wzy <1264835468@qq.com> Date: Sat, 25 Feb 2017 17:42:28 +0800 Subject: [PATCH 127/216] =?UTF-8?q?=E6=B3=9B=E5=9E=8B=E5=92=8C=E8=BF=AD?= =?UTF-8?q?=E4=BB=A3=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../1264835468/src/assignment/BinaryTree.java | 28 +++++++++++++------ .../1264835468/src/assignment/Iterable.java | 5 ++++ group17/1264835468/src/assignment/List.java | 13 +++++++++ 3 files changed, 38 insertions(+), 8 deletions(-) create mode 100644 group17/1264835468/src/assignment/Iterable.java create mode 100644 group17/1264835468/src/assignment/List.java diff --git a/group17/1264835468/src/assignment/BinaryTree.java b/group17/1264835468/src/assignment/BinaryTree.java index 65e2137bdc..d818a2a29d 100644 --- a/group17/1264835468/src/assignment/BinaryTree.java +++ b/group17/1264835468/src/assignment/BinaryTree.java @@ -77,6 +77,7 @@ public BinaryTreeNode deQueue() { throw new QueueIsEmptyException(); } + // 把所有出队节点放进另一个队列中 public MyQueue> getResult() { prepare(); MyQueue> result = new MyQueue<>(); @@ -86,20 +87,21 @@ public MyQueue> getResult() { return result; } + private void prepare() { + clearQueue(); + enQueue(root); + } + public void clearQueue() { while (!isEmpty()) { deQueue(); } } - private void prepare() { - clearQueue(); - enQueue(root); - } - @Override public String toString() { StringBuilder stringBuilder = new StringBuilder(); + Iterator> iterator = iterator(); while (iterator.hasNext()) { stringBuilder.append(iterator.next() + "\n"); @@ -114,16 +116,26 @@ public Iterator> iterator() { } private class BFSIterator implements Iterator> { - MyQueue> BFSQueue = new BFSNodeQueue().getResult(); + MyArrayList> list; + Iterator> iterator; + + public BFSIterator() { + MyQueue> BFSQueue = new BFSNodeQueue().getResult(); + list = new MyArrayList<>(); + while (!BFSQueue.isEmpty()) { + list.add(BFSQueue.deQueue()); + } + iterator = list.iterator(); + } @Override public boolean hasNext() { - return !BFSQueue.isEmpty(); + return iterator.hasNext(); } @Override public BinaryTreeNode next() { - return BFSQueue.deQueue(); + return iterator.next(); } } diff --git a/group17/1264835468/src/assignment/Iterable.java b/group17/1264835468/src/assignment/Iterable.java new file mode 100644 index 0000000000..31c8953ade --- /dev/null +++ b/group17/1264835468/src/assignment/Iterable.java @@ -0,0 +1,5 @@ +package assignment; + +public interface Iterable { + Iterator iterator(); +} diff --git a/group17/1264835468/src/assignment/List.java b/group17/1264835468/src/assignment/List.java new file mode 100644 index 0000000000..b987459e56 --- /dev/null +++ b/group17/1264835468/src/assignment/List.java @@ -0,0 +1,13 @@ +package assignment; + +public interface List { + public void add(E o); + + public void add(int index, E o); + + public E get(int index); + + public E remove(int index); + + public int size(); +} From 120db2740b3c3247ac3b94c5ce0eff3456ccb2d4 Mon Sep 17 00:00:00 2001 From: wzy <1264835468@qq.com> Date: Sat, 25 Feb 2017 17:45:34 +0800 Subject: [PATCH 128/216] =?UTF-8?q?=E6=B3=9B=E5=9E=8B=E5=92=8C=E8=BF=AD?= =?UTF-8?q?=E4=BB=A3=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- group17/1264835468/src/assignment/BinaryTree.java | 1 + group17/1264835468/src/assignment/BinaryTreeNode.java | 1 - group17/1264835468/src/assignment/Iterable.java | 1 + group17/1264835468/src/assignment/Iterator.java | 1 - group17/1264835468/src/assignment/List.java | 1 + group17/1264835468/src/assignment/MyArrayList.java | 1 - group17/1264835468/src/assignment/MyLinkedList.java | 1 - group17/1264835468/src/assignment/MyQueue.java | 1 - group17/1264835468/src/assignment/MyStack.java | 1 - 9 files changed, 3 insertions(+), 6 deletions(-) diff --git a/group17/1264835468/src/assignment/BinaryTree.java b/group17/1264835468/src/assignment/BinaryTree.java index d818a2a29d..7dcf7e963b 100644 --- a/group17/1264835468/src/assignment/BinaryTree.java +++ b/group17/1264835468/src/assignment/BinaryTree.java @@ -1,5 +1,6 @@ package assignment; +// public class BinaryTree> implements Iterable> { private BinaryTreeNode root; diff --git a/group17/1264835468/src/assignment/BinaryTreeNode.java b/group17/1264835468/src/assignment/BinaryTreeNode.java index 5d3e3987e0..81d9e13004 100644 --- a/group17/1264835468/src/assignment/BinaryTreeNode.java +++ b/group17/1264835468/src/assignment/BinaryTreeNode.java @@ -1,6 +1,5 @@ package assignment; -// public class BinaryTreeNode> { private T data; private BinaryTreeNode left; diff --git a/group17/1264835468/src/assignment/Iterable.java b/group17/1264835468/src/assignment/Iterable.java index 31c8953ade..7cf6048b3d 100644 --- a/group17/1264835468/src/assignment/Iterable.java +++ b/group17/1264835468/src/assignment/Iterable.java @@ -1,5 +1,6 @@ package assignment; +// public interface Iterable { Iterator iterator(); } diff --git a/group17/1264835468/src/assignment/Iterator.java b/group17/1264835468/src/assignment/Iterator.java index d0f06972df..5152d882c6 100644 --- a/group17/1264835468/src/assignment/Iterator.java +++ b/group17/1264835468/src/assignment/Iterator.java @@ -1,6 +1,5 @@ package assignment; -// public interface Iterator { public boolean hasNext(); diff --git a/group17/1264835468/src/assignment/List.java b/group17/1264835468/src/assignment/List.java index b987459e56..5ab03b0fdf 100644 --- a/group17/1264835468/src/assignment/List.java +++ b/group17/1264835468/src/assignment/List.java @@ -1,5 +1,6 @@ package assignment; +// public interface List { public void add(E o); diff --git a/group17/1264835468/src/assignment/MyArrayList.java b/group17/1264835468/src/assignment/MyArrayList.java index d7150b8aec..5aac3325f5 100644 --- a/group17/1264835468/src/assignment/MyArrayList.java +++ b/group17/1264835468/src/assignment/MyArrayList.java @@ -1,6 +1,5 @@ package assignment; -// import java.util.Arrays; public class MyArrayList implements List, Iterable { diff --git a/group17/1264835468/src/assignment/MyLinkedList.java b/group17/1264835468/src/assignment/MyLinkedList.java index e364dc0c93..4d393e6eff 100644 --- a/group17/1264835468/src/assignment/MyLinkedList.java +++ b/group17/1264835468/src/assignment/MyLinkedList.java @@ -1,6 +1,5 @@ package assignment; -// public class MyLinkedList implements List, Iterable { private Node head; private int size; diff --git a/group17/1264835468/src/assignment/MyQueue.java b/group17/1264835468/src/assignment/MyQueue.java index 91e8f08091..d39b19c4b5 100644 --- a/group17/1264835468/src/assignment/MyQueue.java +++ b/group17/1264835468/src/assignment/MyQueue.java @@ -1,6 +1,5 @@ package assignment; -// public class MyQueue { private MyLinkedList elementData = new MyLinkedList<>(); diff --git a/group17/1264835468/src/assignment/MyStack.java b/group17/1264835468/src/assignment/MyStack.java index ad086caa55..c3d4f9fb9a 100644 --- a/group17/1264835468/src/assignment/MyStack.java +++ b/group17/1264835468/src/assignment/MyStack.java @@ -1,6 +1,5 @@ package assignment; -// public class MyStack { private MyArrayList elementData = new MyArrayList<>(); From 6009626ea866c3a6d4435d92dca5576119a26824 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E5=8A=A0=E6=B6=9B?= Date: Sat, 25 Feb 2017 17:47:18 +0800 Subject: [PATCH 129/216] Move Files To 2-26 --- group08/108621969/{ => 2-26}/com/coding/basic/ArrayList.java | 0 group08/108621969/{ => 2-26}/com/coding/basic/BinaryTreeNode.java | 0 group08/108621969/{ => 2-26}/com/coding/basic/Iterator.java | 0 group08/108621969/{ => 2-26}/com/coding/basic/LinkedList.java | 0 group08/108621969/{ => 2-26}/com/coding/basic/List.java | 0 group08/108621969/{ => 2-26}/com/coding/basic/Queue.java | 0 group08/108621969/{ => 2-26}/com/coding/basic/Stack.java | 0 7 files changed, 0 insertions(+), 0 deletions(-) rename group08/108621969/{ => 2-26}/com/coding/basic/ArrayList.java (100%) rename group08/108621969/{ => 2-26}/com/coding/basic/BinaryTreeNode.java (100%) rename group08/108621969/{ => 2-26}/com/coding/basic/Iterator.java (100%) rename group08/108621969/{ => 2-26}/com/coding/basic/LinkedList.java (100%) rename group08/108621969/{ => 2-26}/com/coding/basic/List.java (100%) rename group08/108621969/{ => 2-26}/com/coding/basic/Queue.java (100%) rename group08/108621969/{ => 2-26}/com/coding/basic/Stack.java (100%) diff --git a/group08/108621969/com/coding/basic/ArrayList.java b/group08/108621969/2-26/com/coding/basic/ArrayList.java similarity index 100% rename from group08/108621969/com/coding/basic/ArrayList.java rename to group08/108621969/2-26/com/coding/basic/ArrayList.java diff --git a/group08/108621969/com/coding/basic/BinaryTreeNode.java b/group08/108621969/2-26/com/coding/basic/BinaryTreeNode.java similarity index 100% rename from group08/108621969/com/coding/basic/BinaryTreeNode.java rename to group08/108621969/2-26/com/coding/basic/BinaryTreeNode.java diff --git a/group08/108621969/com/coding/basic/Iterator.java b/group08/108621969/2-26/com/coding/basic/Iterator.java similarity index 100% rename from group08/108621969/com/coding/basic/Iterator.java rename to group08/108621969/2-26/com/coding/basic/Iterator.java diff --git a/group08/108621969/com/coding/basic/LinkedList.java b/group08/108621969/2-26/com/coding/basic/LinkedList.java similarity index 100% rename from group08/108621969/com/coding/basic/LinkedList.java rename to group08/108621969/2-26/com/coding/basic/LinkedList.java diff --git a/group08/108621969/com/coding/basic/List.java b/group08/108621969/2-26/com/coding/basic/List.java similarity index 100% rename from group08/108621969/com/coding/basic/List.java rename to group08/108621969/2-26/com/coding/basic/List.java diff --git a/group08/108621969/com/coding/basic/Queue.java b/group08/108621969/2-26/com/coding/basic/Queue.java similarity index 100% rename from group08/108621969/com/coding/basic/Queue.java rename to group08/108621969/2-26/com/coding/basic/Queue.java diff --git a/group08/108621969/com/coding/basic/Stack.java b/group08/108621969/2-26/com/coding/basic/Stack.java similarity index 100% rename from group08/108621969/com/coding/basic/Stack.java rename to group08/108621969/2-26/com/coding/basic/Stack.java From 6036020dd864fa497a2536155138c4d556783276 Mon Sep 17 00:00:00 2001 From: wzy <1264835468@qq.com> Date: Sat, 25 Feb 2017 17:47:59 +0800 Subject: [PATCH 130/216] 1 --- group17/.gitignore | 16 ++++++++++++++++ group17/1264835468/.classpath | 6 ++++++ group17/1264835468/.gitignore | 1 + group17/1264835468/.project | 17 +++++++++++++++++ 4 files changed, 40 insertions(+) create mode 100644 group17/.gitignore create mode 100644 group17/1264835468/.classpath create mode 100644 group17/1264835468/.gitignore create mode 100644 group17/1264835468/.project diff --git a/group17/.gitignore b/group17/.gitignore new file mode 100644 index 0000000000..4e10476e66 --- /dev/null +++ b/group17/.gitignore @@ -0,0 +1,16 @@ +*.class + +# Mobile Tools for Java (J2ME) +.mtj.tmp/ + +# Package Files # +*.jar +*.war +*.ear + +# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml +hs_err_pid* + +#ide config +.metadata +.recommenders diff --git a/group17/1264835468/.classpath b/group17/1264835468/.classpath new file mode 100644 index 0000000000..d171cd4c12 --- /dev/null +++ b/group17/1264835468/.classpath @@ -0,0 +1,6 @@ + + + + + + diff --git a/group17/1264835468/.gitignore b/group17/1264835468/.gitignore new file mode 100644 index 0000000000..ae3c172604 --- /dev/null +++ b/group17/1264835468/.gitignore @@ -0,0 +1 @@ +/bin/ diff --git a/group17/1264835468/.project b/group17/1264835468/.project new file mode 100644 index 0000000000..d2cad6d6dd --- /dev/null +++ b/group17/1264835468/.project @@ -0,0 +1,17 @@ + + + 1264835468 + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + From 0815268803bad7d3424260849f4d3eb888d0e32f Mon Sep 17 00:00:00 2001 From: tigerfour <1737036540@qq.com> Date: Sat, 25 Feb 2017 17:54:44 +0800 Subject: [PATCH 131/216] =?UTF-8?q?=E6=95=B0=E6=8D=AE=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- group08/406166841/.DS_Store | Bin 0 -> 6148 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 group08/406166841/.DS_Store diff --git a/group08/406166841/.DS_Store b/group08/406166841/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..9fb74f29c082fd26e87f48ba0939987072b741e8 GIT binary patch literal 6148 zcmeHK&2G~`5S~p9tW^*>AeEypNE`x+X-JEzN>&Jm-jIyo0I0R&sIg>wqr_=MLy&L0 z0z3mR!UG`nabRY5Yb7d?dO`?hq}gwGem353qWu8?(VHbcKobBYDq+LL<~Krq(ks%i z7IF%j<0w;uI8!l>X+oC2p8=|!15e-)YInVUg6jM2rxv}CIxe11$F|Pj<8hWw%Xa%h zG`5@@H*ZNPx8)uAJ{+leSVrY++KVP{^(ak-vF*Q7Dy#cZ{5l=ZkDK?NtD=n3VmMg| zfA=OW5;gCsS&>ZjJTIeigt@NkO82W2fBk1w68zFhVD$*ddz{J3yF>xeopSII`- zc(i%Wvv5*msyM~j==*L%2injDAGHhnIP&2!Z1fWV(Lu8o?CYyPqDKbAz+z<(EhxgIBAQfT zpBTcv9E3?ne_-P)gC-sH Date: Sat, 25 Feb 2017 18:10:18 +0800 Subject: [PATCH 132/216] Article Of Comp-Units-Relations --- .../article/Comp-Units-Relations(2-16).md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 group08/108621969/article/Comp-Units-Relations(2-16).md diff --git a/group08/108621969/article/Comp-Units-Relations(2-16).md b/group08/108621969/article/Comp-Units-Relations(2-16).md new file mode 100644 index 0000000000..b3fdcbb61b --- /dev/null +++ b/group08/108621969/article/Comp-Units-Relations(2-16).md @@ -0,0 +1,14 @@ +# CPU +由寄存器、运算器、控制器组成 +还有一级缓存、二级缓存等 +# 内存 +我们所说的内存都是系统内存,是SDRAM,动态随机存储器 +速度快容量小 +# 硬盘 +容量大速度慢 +# 指令 +程序在计算机中被分解为一条条的指令 +# 关系 +程序文件在硬盘中,当调用时,从硬盘载入内存, +控制器从内存中读取程序的第一条指令,指令通知运算器读取内存中的数据的地址, +运算器结合寄存器计算出结果,读取下一条指令,直到指令结束。 From 28c88919219b2537dce8c7f1217203c474fcf76f Mon Sep 17 00:00:00 2001 From: 592146505 <592146505@qq.com> Date: Sat, 25 Feb 2017 18:25:37 +0800 Subject: [PATCH 133/216] update List --- .../src/cn/wsc/util/ArrayList.java | 12 +-- .../src/cn/wsc/util/LinkedList.java | 4 +- .../data _structure/src/cn/wsc/util/List.java | 86 ++++++++++--------- 3 files changed, 54 insertions(+), 48 deletions(-) diff --git a/group20/592146505/data _structure/src/cn/wsc/util/ArrayList.java b/group20/592146505/data _structure/src/cn/wsc/util/ArrayList.java index ff3ec6575e..94bb1f3217 100644 --- a/group20/592146505/data _structure/src/cn/wsc/util/ArrayList.java +++ b/group20/592146505/data _structure/src/cn/wsc/util/ArrayList.java @@ -2,7 +2,6 @@ import java.util.Arrays; import java.util.ConcurrentModificationException; -import java.util.Iterator; import java.util.NoSuchElementException; /** @@ -45,11 +44,11 @@ public boolean isEmpty() { return size == 0; } -// @Override -// public boolean contains(Object o) { -// // TODO Auto-generated method stub -// return false; -// } + // @Override + // public boolean contains(Object o) { + // // TODO Auto-generated method stub + // return false; + // } @Override public Iterator iterator() { @@ -78,6 +77,7 @@ public E next() { return (E) elementData[lastRet = cursor++]; } + @Override public void remove() { if (lastRet < 0) throw new IllegalStateException(); diff --git a/group20/592146505/data _structure/src/cn/wsc/util/LinkedList.java b/group20/592146505/data _structure/src/cn/wsc/util/LinkedList.java index 772b04b88d..ccb9ff2783 100644 --- a/group20/592146505/data _structure/src/cn/wsc/util/LinkedList.java +++ b/group20/592146505/data _structure/src/cn/wsc/util/LinkedList.java @@ -1,7 +1,6 @@ package cn.wsc.util; import java.util.ConcurrentModificationException; -import java.util.Iterator; import java.util.NoSuchElementException; /** @@ -63,6 +62,7 @@ public E next() { return get(lastRet = cursor++); } + @Override public void remove() { if (lastRet < 0) throw new IllegalStateException(); @@ -211,7 +211,7 @@ public E getLast() { @Override public E set(int index, E e) { checkElementIndex(index);// 索引范围检查 - //获取索引处节点,填入新值,返回原值 + // 获取索引处节点,填入新值,返回原值 Node x = node(index); E oldVal = x.item; x.item = e; diff --git a/group20/592146505/data _structure/src/cn/wsc/util/List.java b/group20/592146505/data _structure/src/cn/wsc/util/List.java index 900a8a8634..9b61278fc7 100644 --- a/group20/592146505/data _structure/src/cn/wsc/util/List.java +++ b/group20/592146505/data _structure/src/cn/wsc/util/List.java @@ -1,7 +1,5 @@ package cn.wsc.util; -import java.util.Iterator; - /** * List接口 * @@ -12,88 +10,96 @@ * @param */ public interface List { - + /** * 获取集合元素个数 + * * @return */ int size(); - + /** * 集合是否为空 + * * @return */ boolean isEmpty(); - -// /** -// * 是否包含指定元素 -// * @param o -// * @return -// */ -// boolean contains(Object o); - + + // /** + // * 是否包含指定元素 + // * @param o + // * @return + // */ + // boolean contains(Object o); + /** * 获取当前集合迭代器对象 + * * @return */ Iterator iterator(); -// -// /** -// * 返回集合数组对象 -// * -// * @return -// */ -// Object[] toArray(); -// -// /** -// * 将集合元素复制到新数组中 -// * @param a -// * @return -// */ -// T[] toArray(T[] a); - + // + // /** + // * 返回集合数组对象 + // * + // * @return + // */ + // Object[] toArray(); + // + // /** + // * 将集合元素复制到新数组中 + // * @param a + // * @return + // */ + // T[] toArray(T[] a); + /** * 在集合末尾追加元素 + * * @param e * @return */ boolean add(E e); - + /** * 将元素添加至指定指定索引处 + * * @param index * @param e * @return */ - boolean add(int index,E e); - + boolean add(int index, E e); + /** * 获取指定索引处元素 + * * @param index * @return */ E get(int index); - + /** * 替换指定索引处元素为新元素,并返回被替换元素, + * * @param index * @param e * @return */ E set(int index, E e); - + /** * 删除并返回指定指定索引处元素 + * * @param index * @return */ E remove(int index); - -// /** -// * 返回该对象在集合中的下标,不存在返回-1 -// * @param o -// * @return -// */ -// int indexOf(Object o); - + + // /** + // * 返回该对象在集合中的下标,不存在返回-1 + // * @param o + // * @return + // */ + // int indexOf(Object o); + } \ No newline at end of file From b2d3ddeab25eed027692e57eb72a6b626c9ab869 Mon Sep 17 00:00:00 2001 From: wayss000 Date: Sat, 25 Feb 2017 18:33:49 +0800 Subject: [PATCH 134/216] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/basic/BinaryTreeNode.java | 49 ++++++++++ .../firstPractice/src/basic/MyArrayList.java | 34 ++++++- .../firstPractice/src/basic/MyLinkedList.java | 89 ++++++++++++++++--- .../firstPractice/src/basic/MyQueue.java | 18 +++- .../src/basic/MySortBinaryTree.java | 81 +++++++++++++++++ .../firstPractice/src/basic/MyStack.java | 21 +++-- 6 files changed, 270 insertions(+), 22 deletions(-) create mode 100644 group08/1144989424/firstPractice/src/basic/BinaryTreeNode.java create mode 100644 group08/1144989424/firstPractice/src/basic/MySortBinaryTree.java diff --git a/group08/1144989424/firstPractice/src/basic/BinaryTreeNode.java b/group08/1144989424/firstPractice/src/basic/BinaryTreeNode.java new file mode 100644 index 0000000000..6300e92259 --- /dev/null +++ b/group08/1144989424/firstPractice/src/basic/BinaryTreeNode.java @@ -0,0 +1,49 @@ +package basic; + +/** + * 二叉树的数据结构 + * @author Wayss + * 2017-02-25 + */ + +public class BinaryTreeNode { + + private Object data; + private BinaryTreeNode left; + private BinaryTreeNode right; + + public BinaryTreeNode(){ + + } + + public BinaryTreeNode(Integer val){ + data = val; + left = null; + right = null; + } + + + 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){ + return null; + } + +} diff --git a/group08/1144989424/firstPractice/src/basic/MyArrayList.java b/group08/1144989424/firstPractice/src/basic/MyArrayList.java index 365c2363cb..f9cf5b1b80 100644 --- a/group08/1144989424/firstPractice/src/basic/MyArrayList.java +++ b/group08/1144989424/firstPractice/src/basic/MyArrayList.java @@ -1,5 +1,11 @@ package basic; +/** + * 我的ArrayList实现 + * @author Wayss + * 2017-02-22 + */ + public class MyArrayList implements MyList { private int size = 0; @@ -26,7 +32,7 @@ public void add(Object o){ */ public void add(int index, Object o){ int length = elementData.length; - //0.先对index的值进行判断,不能小于0,且不能大于size + //0.先对index的值进行判断,小于0,或者,大于size,越界 if(index < 0 || index > size){ throw new IndexOutOfBoundsException("插入的下标越界了:"+"插入的下标为:"+index+"集合大小为:"+size); } @@ -43,15 +49,37 @@ public void add(int index, Object o){ } public Object get(int index){ - return null; + int length = elementData.length; + //0.先对index的值进行判断,小于0,或者,大于等于size,便越界 + if(index < 0 || index >= size){ + throw new IndexOutOfBoundsException("插入的下标越界了:"+"插入的下标为:"+index+"集合大小为:"+size); + } + //2.拿出index位置的值, + Object o = elementData[index]; + + return o; } public Object remove(int index){ + //remove 前两步的逻辑和get方法相同 + int length = elementData.length; + //0.先对index的值进行判断,小于0,或者,大于等于size,便越界 + if(index < 0 || index >= size){ + throw new IndexOutOfBoundsException("插入的下标越界了:"+"插入的下标为:"+index+"集合大小为:"+size); + } + //2.拿出index位置的值, + Object o = elementData[index]; + + //3.删除index位置的值,之后的值,向前移动。 + for(int i = index; i < size-1; i++){ + elementData[i] = elementData[i+1]; + } + size--; return null; } public int size(){ - return -1; + return size; } public MyIterator iterator(){ diff --git a/group08/1144989424/firstPractice/src/basic/MyLinkedList.java b/group08/1144989424/firstPractice/src/basic/MyLinkedList.java index a62e77bc92..3894884373 100644 --- a/group08/1144989424/firstPractice/src/basic/MyLinkedList.java +++ b/group08/1144989424/firstPractice/src/basic/MyLinkedList.java @@ -1,46 +1,113 @@ package basic; +/** + * 实现LinkedList基本功能 + * @author Wayss + * 2017-02-23 + */ + public class MyLinkedList implements MyList { private Node head; + private int size = 0; public void add(Object o){ - + Node n = new Node(o); + head.next = n; + size++; } public void add(int index , Object o){ - + //1.index校验 + if(index < 0 || index > size){ + throw new IndexOutOfBoundsException("插入的下标越界了:"+"插入的下标为:"+index+"集合大小为:"+size); + } + //2. 查找index位置的前一个节点 + //tempNode为当前链表的第一个节点 + Node tempNode = head.next; + for(int i = 0; i < index - 1 ; i++){ + tempNode = tempNode.next; + } + Node behindNode = tempNode.next; + Node insertNode = new Node(o); + tempNode.next = insertNode; + insertNode.next = behindNode; + size++; } public Object get(int index){ - return null; + //1.index校验 + if(index < 0 || index > size){ + throw new IndexOutOfBoundsException("插入的下标越界了:"+"插入的下标为:"+index+"集合大小为:"+size); + } + //2. 查找当前节点 + Node tempNode = head.next; + for(int i = 0; i < index; i++){ + tempNode = tempNode.next; + } + return tempNode.data; } public Object remove(int index){ - return null; + //1.index校验 + if(index < 0 || index > size){ + throw new IndexOutOfBoundsException("插入的下标越界了:"+"插入的下标为:"+index+"集合大小为:"+size); + } + //2. 查找当前节点的上一个节点 + Node tempNode = head.next; + for(int i = 0; i < index - 1; i++){ + tempNode = tempNode.next; + } + Node deleteNode = tempNode.next; + Node behideNode = tempNode.next.next; + tempNode.next = behideNode; + size--; + return deleteNode.data; } public int size(){ - return -1; + return size; } public void addFirst(Object o){ - + Node insertNode = new Node(o); + insertNode.next = head.next; + head.next = insertNode; + size++; } public void addLast(Object o){ - + Node insertNode = new Node(o); + Node tempNode = head.next; + for(int i = 0; i < size; i++){ + tempNode = tempNode.next; + } + tempNode.next = insertNode; + size++; } public Object removeFirst(){ - return null; + Node firstNode = head.next; + head = firstNode.next; + size--; + return firstNode; } public Object removeLast(){ - return null; + Node tempNode = head.next; + //1.移除需要找到最后一个点的前一个点 + for(int i = 0; i < size - 1; i++){ + tempNode = tempNode.next; + } + Node deleteNode = tempNode.next; + tempNode.next = null; + size--; + return deleteNode; } public MyIterator iterator(){ return null; } - private static class Node{ + private static class Node{ Object data; Node next; - + public Node(Object data){ + this.data = data; + } } } diff --git a/group08/1144989424/firstPractice/src/basic/MyQueue.java b/group08/1144989424/firstPractice/src/basic/MyQueue.java index ee17135a2d..31fab53105 100644 --- a/group08/1144989424/firstPractice/src/basic/MyQueue.java +++ b/group08/1144989424/firstPractice/src/basic/MyQueue.java @@ -1,19 +1,31 @@ package basic; +/** + * 实现队列 + * @author Wayss + * 2017-02-25 + */ + public class MyQueue { - public void enQueue(Object o){ + MyLinkedList linkList = new MyLinkedList(); + + public void enQueue(Object o){ + linkList.addLast(o); } public Object deQueue(){ - return null; + return linkList.removeFirst(); } public boolean isEmpty(){ + if(linkList.size() == 0){ + return true; + } return false; } public int size(){ - return -1; + return linkList.size(); } } diff --git a/group08/1144989424/firstPractice/src/basic/MySortBinaryTree.java b/group08/1144989424/firstPractice/src/basic/MySortBinaryTree.java new file mode 100644 index 0000000000..a4579217e5 --- /dev/null +++ b/group08/1144989424/firstPractice/src/basic/MySortBinaryTree.java @@ -0,0 +1,81 @@ +package basic; + +import java.util.Comparator; + +/** + * 实现二叉排序树,使左节点的值,始终父节点小,右节点的值,始终比父节点大 + * @author Wayss + * 2017-02-25 + */ + +public class MySortBinaryTree { + + public BinaryTreeNode root = new BinaryTreeNode(); + + /** + * 1. 添加时,先判断与root节点值的大小 + * 2. insert的值小于root的值,则插入到root的左边。 + * 3. insert的值大于root的值,则插入到root的右边。 + * PS:目前只支持Integer类型的对象插入 + * @param val + */ + public void add(Integer val){ + BinaryTreeNode treeNode = new BinaryTreeNode(val); + insert(root, treeNode); + } + + private void insert(BinaryTreeNode node, BinaryTreeNode insertNode){ + + int result = compare((Integer)insertNode.getData(),(Integer)node.getData()); + + if(0 == result){ + //相等的话,当重复数据,不插了.呵呵 + } + //insert的值小于root的值,则插入到root的左边。 + //如果左节点有值,则递归 + if(-1 == result){ + if(node.getLeft() != null){ + insert(node.getLeft(), insertNode); + }else{ + node.setLeft(insertNode); + } + } + //insert的值大于root的值,则插入到root的右边。 + if(1 == result){ + if(node.getRight() != null){ + insert(node.getRight(), insertNode); + }else{ + node.setRight(insertNode); + } + } + } + + public MyArrayList getValue(){ + MyArrayList malist = new MyArrayList(); + getTreeValue(root,malist); + return malist; + } + + private void getTreeValue(BinaryTreeNode node,MyArrayList list){ + //遍历左子数 + if(node.getLeft() != null){ + getTreeValue(node.getLeft(),list); + } + list.add(node.getData()); + //遍历右子数 + if(node.getRight() != null){ + getTreeValue(node.getRight(),list); + } + } + + public static int compare(Integer i1, Integer i2){ + if(i1 < i2){ + return -1; + }else if(i1 == i2){ + return 0; + }else { + return 1; + } + } + +} diff --git a/group08/1144989424/firstPractice/src/basic/MyStack.java b/group08/1144989424/firstPractice/src/basic/MyStack.java index 0460746cf7..c8e8e0d2fd 100644 --- a/group08/1144989424/firstPractice/src/basic/MyStack.java +++ b/group08/1144989424/firstPractice/src/basic/MyStack.java @@ -1,22 +1,33 @@ package basic; +/** + * 栈实现 + * @author Wayss + * 2017-02-25 + */ + public class MyStack { - private MyArrayList elementData = new MyArrayList(); + private MyArrayList arrList = new MyArrayList(); - public void push(Object o){ + public void push(Object o){ + arrList.add(o); } public Object pop(){ - return null; + //elementData.size()-1是当前数组的最后一个元素的下标 + return arrList.remove(arrList.size() - 1); } public Object peek(){ - return null; + return arrList.get(arrList.size() - 1); } public boolean isEmpty(){ + if(arrList.size() == 0){ + return true; + } return false; } public int size(){ - return -1; + return arrList.size(); } } From ccac23d98edd4cee88ac440b46df2d56e31b9cbc Mon Sep 17 00:00:00 2001 From: wayss000 Date: Sat, 25 Feb 2017 18:58:40 +0800 Subject: [PATCH 135/216] =?UTF-8?q?=E5=88=A0=E9=99=A4=E4=B8=80=E4=B8=AA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/basic/MyBinaryTreeNode.java | 32 ------------------- 1 file changed, 32 deletions(-) delete mode 100644 group08/1144989424/firstPractice/src/basic/MyBinaryTreeNode.java diff --git a/group08/1144989424/firstPractice/src/basic/MyBinaryTreeNode.java b/group08/1144989424/firstPractice/src/basic/MyBinaryTreeNode.java deleted file mode 100644 index 1cad28c4a8..0000000000 --- a/group08/1144989424/firstPractice/src/basic/MyBinaryTreeNode.java +++ /dev/null @@ -1,32 +0,0 @@ -package basic; - -public class MyBinaryTreeNode { - - private Object data; - private MyBinaryTreeNode left; - private MyBinaryTreeNode right; - - public Object getData() { - return data; - } - public void setData(Object data) { - this.data = data; - } - public MyBinaryTreeNode getLeft() { - return left; - } - public void setLeft(MyBinaryTreeNode left) { - this.left = left; - } - public MyBinaryTreeNode getRight() { - return right; - } - public void setRight(MyBinaryTreeNode right) { - this.right = right; - } - - public MyBinaryTreeNode insert(Object o){ - return null; - } - -} From 172fa74af793e405aec93c59521ba566bfc648e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=9D=BE=E6=98=93?= Date: Sat, 25 Feb 2017 19:01:58 +0800 Subject: [PATCH 136/216] first commit --- group17/1540186032/First/src/ArrayList.java | 64 +++++++++ .../1540186032/First/src/BinaryTreeNode.java | 31 +++++ group17/1540186032/First/src/Iterator.java | 6 + group17/1540186032/First/src/LinkedList.java | 131 ++++++++++++++++++ group17/1540186032/First/src/List.java | 8 ++ group17/1540186032/First/src/Queue.java | 23 +++ group17/1540186032/First/src/Stack.java | 28 ++++ 7 files changed, 291 insertions(+) create mode 100644 group17/1540186032/First/src/ArrayList.java create mode 100644 group17/1540186032/First/src/BinaryTreeNode.java create mode 100644 group17/1540186032/First/src/Iterator.java create mode 100644 group17/1540186032/First/src/LinkedList.java create mode 100644 group17/1540186032/First/src/List.java create mode 100644 group17/1540186032/First/src/Queue.java create mode 100644 group17/1540186032/First/src/Stack.java diff --git a/group17/1540186032/First/src/ArrayList.java b/group17/1540186032/First/src/ArrayList.java new file mode 100644 index 0000000000..c039889a8e --- /dev/null +++ b/group17/1540186032/First/src/ArrayList.java @@ -0,0 +1,64 @@ +public class ArrayList implements List { + + private int size = 0; + + private Object[] elementData = new Object[5]; + + public void add(Object o) { + if (size >= elementData.length) { + resize(2 * size); + } + elementData[size] = o; + size++; + } + + public void add(int index, Object o) { + if (index > size) { + throw new IndexOutOfBoundsException("Index: " + index + ", Size: " + + size); + } + if (size >= elementData.length) { + resize(2 * size); + } + for (int i = size; i > index; i--) { + elementData[i] = elementData[i - 1]; + } + elementData[index] = o; + size++; + } + + public Object get(int index) { + if (index >= size) { + throw new IndexOutOfBoundsException("Index: " + index + ", Size: " + + size); + } + return elementData[index]; + } + + public Object remove(int index) { + Object o = elementData[index]; + for (int i = index; i < size - 1; i++) { + elementData[i] = elementData[i + 1]; + } + elementData[size - 1] = null; + size--; + return o; + } + + public int size() { + return size; + } + + public Iterator iterator() { + return null; + } + + private void resize(int n) { + Object[] temp = elementData; + elementData = new Object[n]; + for (int i = 0; i < temp.length; i++) { + elementData[i] = temp[i]; + } + } + +} diff --git a/group17/1540186032/First/src/BinaryTreeNode.java b/group17/1540186032/First/src/BinaryTreeNode.java new file mode 100644 index 0000000000..f5ff087138 --- /dev/null +++ b/group17/1540186032/First/src/BinaryTreeNode.java @@ -0,0 +1,31 @@ + +public class BinaryTreeNode { + + private Object data; + private BinaryTreeNode left; + private BinaryTreeNode right; + + 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){ + return null; + } + +} diff --git a/group17/1540186032/First/src/Iterator.java b/group17/1540186032/First/src/Iterator.java new file mode 100644 index 0000000000..73b303c8c2 --- /dev/null +++ b/group17/1540186032/First/src/Iterator.java @@ -0,0 +1,6 @@ + +public interface Iterator { + public boolean hasNext(); + public Object next(); + +} diff --git a/group17/1540186032/First/src/LinkedList.java b/group17/1540186032/First/src/LinkedList.java new file mode 100644 index 0000000000..8510036684 --- /dev/null +++ b/group17/1540186032/First/src/LinkedList.java @@ -0,0 +1,131 @@ +public class LinkedList implements List { + public static void main(String[] args) { + LinkedList linkedList = new LinkedList(); + linkedList.add(0); + + System.out.println(linkedList.get(0)); + + } + + private Node first; + + private Node last; + + private int size = 0; + + public void add(Object o) { + Node oldLast = last; + last = new Node(); + last.data = o; + last.next = null; + if (oldLast != null) { + oldLast.next = last; + } + if (first == null) { + first = last; + } + size++; + } + + public void add(int index, Object o) { + if (index > size) { + throw new IndexOutOfBoundsException("Index: " + index + ", Size: " + + size); + } + if (index == 0) { + addFirst(o); + return; + } + if (index == size) { + addLast(o); + return; + } + Node curserNode = cursor(index - 1); + Node newNode = new Node(); + newNode.data = o; + newNode.next = curserNode.next; + curserNode.next = newNode; + size++; + } + + public Object get(int index) { + return cursor(index).data; + } + + public Object remove(int index) { + Node node = cursor(index - 1).next; + cursor(index - 1).next = node.next; + node.next = null; + return node.data; + } + + public int size() { + return size; + } + + public void addFirst(Object o) { + Node newNode = new Node(); + newNode.data = o; + if (first == null) { + first = newNode; + } else { + newNode.next = first; + first = newNode; + } + if (last == null) { + last = first; + } + size++; + } + + public void addLast(Object o) { + Node newNode = new Node(); + newNode.data = o; + if (last == null) { + last = newNode; + } else { + last.next = newNode; + last = newNode; + } + if (first == null) { + first = last; + } + size++; + } + + public Object removeFirst() { + Node node = first; + Node newFirst = first.next; + first.next = null; + first = newFirst; + size--; + return node.data; + } + + public Object removeLast() { + Node node = last; + Node newLast = cursor(size - 1); + newLast.next = null; + last = newLast; + size--; + return node.data; + } + + public Iterator iterator() { + return null; + } + + private Node cursor(int index) { + Node curserNode = first; + for (int i = 0; i < index; i++) { + curserNode = curserNode.next; + } + return curserNode; + } + + private static class Node { + Object data; + Node next; + + } +} diff --git a/group17/1540186032/First/src/List.java b/group17/1540186032/First/src/List.java new file mode 100644 index 0000000000..8cb4ba5aff --- /dev/null +++ b/group17/1540186032/First/src/List.java @@ -0,0 +1,8 @@ + +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(); +} diff --git a/group17/1540186032/First/src/Queue.java b/group17/1540186032/First/src/Queue.java new file mode 100644 index 0000000000..325fa033d1 --- /dev/null +++ b/group17/1540186032/First/src/Queue.java @@ -0,0 +1,23 @@ + +public class Queue { + LinkedList elementData = new LinkedList(); + + public void enQueue(Object o) { + elementData.add(o); + } + + public Object deQueue() { + if (elementData.size() == 0) { + + } + return elementData.removeFirst(); + } + + public boolean isEmpty() { + return elementData.size() == 0; + } + + public int size() { + return elementData.size(); + } +} diff --git a/group17/1540186032/First/src/Stack.java b/group17/1540186032/First/src/Stack.java new file mode 100644 index 0000000000..47f5244f0d --- /dev/null +++ b/group17/1540186032/First/src/Stack.java @@ -0,0 +1,28 @@ +import java.util.EmptyStackException; + +public class Stack { + private ArrayList elementData = new ArrayList(); + + public void push(Object o) { + elementData.add(o); + } + + public Object pop() { + if (elementData.size() == 0) { + throw new EmptyStackException(); + } + return elementData.remove(elementData.size() - 1); + } + + public Object peek() { + return elementData.get(elementData.size() - 1); + } + + public boolean isEmpty() { + return elementData.size() == 0; + } + + public int size() { + return elementData.size(); + } +} From 73c69e86571f2c06dc11e6c311e66c2c51426028 Mon Sep 17 00:00:00 2001 From: tigerfour <1737036540@qq.com> Date: Sat, 25 Feb 2017 20:38:46 +0800 Subject: [PATCH 137/216] add List ... --- group08/406166841/2-26/CustomArrayList.java | 92 ++++++++++ group08/406166841/2-26/CustomLinkedList.java | 172 +++++++++++++++++++ group08/406166841/2-26/CustomQueue.java | 51 ++++++ group08/406166841/2-26/CustomStack.java | 70 ++++++++ group08/406166841/2-26/Iterator.java | 10 ++ group08/406166841/2-26/List.java | 13 ++ 6 files changed, 408 insertions(+) create mode 100644 group08/406166841/2-26/CustomArrayList.java create mode 100644 group08/406166841/2-26/CustomLinkedList.java create mode 100644 group08/406166841/2-26/CustomQueue.java create mode 100644 group08/406166841/2-26/CustomStack.java create mode 100644 group08/406166841/2-26/Iterator.java create mode 100644 group08/406166841/2-26/List.java diff --git a/group08/406166841/2-26/CustomArrayList.java b/group08/406166841/2-26/CustomArrayList.java new file mode 100644 index 0000000000..46dbe3d40d --- /dev/null +++ b/group08/406166841/2-26/CustomArrayList.java @@ -0,0 +1,92 @@ +package net.iyouqu.bruceretrofit.util.java; + +import java.util.Arrays; + +/** + * Created by liq on 2017/2/25. + */ + +public class CustomArrayList implements List { + + private int size = 0; + + private final static int DEFAULT_CAPACITY = 10; + private final static int MAX_ARRAY_LENGTH = Integer.MAX_VALUE - 8; + + private Object[] elementData = new Object[DEFAULT_CAPACITY]; + private String desc = "index超过界限"; + + @Override + public void add(Object o) { + isCapacityEnough(size + 1); + elementData[size++] = o; + } + + @Override + public void add(int index, Object o) { + checkRangeForAdd(index); + isCapacityEnough(size + 1); + System.arraycopy(elementData, index, elementData, index + 1, size - index); + elementData[index] = o; + size++; + } + + @Override + public Object get(int index) { + checkRange(index); + return elementData[index]; + } + + @Override + public Object remove(int index) { + Object value = get(index); + int moveSize = size - index - 1; + if (moveSize > 0){ + System.arraycopy(elementData,index + 1, elementData,index,size - index - 1); + } + elementData[--size] = null; + return value; + } + + @Override + public int size() { + return size; + } + + private void checkRange(int index) { + if (index >= size || index < 0) { + throw new IndexOutOfBoundsException(desc); + } + } + + private void checkRangeForAdd(int index) { + if (index < 0 || index > size) { + throw new IndexOutOfBoundsException(desc); + } + } + + private void explicitCapacity(int capacity) { + int newLength = elementData.length * 2; + if (newLength - capacity < 0) { + newLength = capacity; + } + if (newLength > (MAX_ARRAY_LENGTH)) { + newLength = (capacity > MAX_ARRAY_LENGTH ? Integer.MAX_VALUE : MAX_ARRAY_LENGTH); + } + elementData = Arrays.copyOf(elementData, newLength); + } + + private void isCapacityEnough(int size) { + if (size > DEFAULT_CAPACITY) { + explicitCapacity(size); + } + if (size < 0) { + throw new OutOfMemoryError(); + } + } + + public Iterator iterator() { + return null; + } + +} diff --git a/group08/406166841/2-26/CustomLinkedList.java b/group08/406166841/2-26/CustomLinkedList.java new file mode 100644 index 0000000000..532b9b8eaf --- /dev/null +++ b/group08/406166841/2-26/CustomLinkedList.java @@ -0,0 +1,172 @@ +package net.iyouqu.bruceretrofit.util.java; + +/** + * Created by liq on 2017/2/25. + */ + +public class CustomLinkedList implements List { + + //链表长度 + private int size = 0; + //链表头指针 + private Node first; + //链表尾部指针 + private Node last; + //操作次数 + private int modCount; + + @Override + public void add(Object o) { + linkLast(o); + } + + @Override + public void add(int index, Object o) { + checkPositionIndex(index); + if (index == size) { + linkLast(o); + } else { + linkBefore(o, node(index)); + } + } + + @Override + public Object get(int index) { + checkPositionIndex(index); + return node(index).data; + } + + @Override + public Object remove(int index) { + checkPositionIndex(index); + return unlink(node(index)); + } + + @Override + public int size() { + return size; + } + + /** + * 添加节点到链表尾部 + */ + public void addLast(Object e) { + linkLast(e); + } + + /** + * 解除传入节点的属性,并且将传入节点的上一个和下一个节点 链接。使传入节点的属性 全部为 null + */ + private Object unlink(Node node) { + //获取当前节点node的属性 + final Object element = node.data; + final Node next = node.next; + final Node prev = node.prev; + if (prev == null) { + //上一个节点为null将首节点设置为下一个节点 + first = next; + } else { + //上一个节点有 将上一个节点的下一个节点 设置为当前节点的下一个节点 + prev.next = next; + //将当前节点的上一个节点设置为null + node.prev = null; + } + if (next == null) { + //下一个节点为null将末尾节点设置为上一个节点 + last = prev; + } else { + //将下一个节点的上一个节点 设置为当前节点的上一个节点 + next.prev = prev; + node.next = null; + } + node.data = null; + size--; + modCount++; + return element; + } + + /** + * 获取一个节点 + * 判断index 在前半区间还是后半区间。而不是一直从头到尾搜索 + * 将节点访问复杂度从O(n)变为O(n/2) + */ + private Node node(int index) { + checkPositionIndex(index); + if (index < (size / 2)) { + Node x = first; + for (int i = 0; i < index; i++) { + x = x.next; + } + return x; + } else { + Node x = last; + for (int i = size - 1; i > index; i--) { + x = x.prev; + } + return x; + } + } + + /** + * 在参数节点之前插入一个节点 + */ + private void linkBefore(Object element, Node node) { + //获取添加节点的上一个节点 + final Node pred = node.prev; + //创建一个新节点 + final Node newNode = new Node<>(pred, element, node); + //添加节点的上一个节点为 新节点 + node.prev = newNode; + //判断上一个节点是否为null + if (pred == null) { + //首节点设置为新创建的节点 + first = newNode; + } else { + //上个节点不为null。将其下个节点设置为新创建的节点。 + pred.next = newNode; + } + size++; + modCount++; + } + + /** + * 链接 节点到 last + */ + private void linkLast(Object e) { + final Node l = last; + final Node newNode = new Node<>(l, e, null); + last = newNode; + //判断链表last是否为null + if (l == null) { + //链表first指向新添加的 节点 + first = newNode; + } else { + //链表last不为null将链表last节点的的next设置为新节点 + l.next = newNode; + } + size++; + modCount++; + } + + /** + * 检查index是否越界 + */ + private void checkPositionIndex(int index) { + if (index < 0 || index > size) { + throw new IndexOutOfBoundsException("index超过界限"); + } + } + + private static class Node { + Object data; + //下一个节点 + Node next; + //上一个节点 + Node prev; + public Node(Node prev, Object item, Node next) { + this.data = item; + this.next = next; + this.prev = prev; + } + } +} diff --git a/group08/406166841/2-26/CustomQueue.java b/group08/406166841/2-26/CustomQueue.java new file mode 100644 index 0000000000..00f3d89f6d --- /dev/null +++ b/group08/406166841/2-26/CustomQueue.java @@ -0,0 +1,51 @@ +package net.iyouqu.bruceretrofit.util.java; + +/** + * Created by liq on 2017/2/25. + */ + +public class CustomQueue { + + Object[] data = null; + //容量 + private int capacity; + //队尾指针 + private int tail; + + CustomQueue(int initSize) { + if (initSize >= 0) { + this.capacity = initSize; + data = new Object[initSize]; + tail = 0; + } else { + throw new RuntimeException("初始化大小不能小于0" + initSize); + } + } + + public void enQueue(E o){ + ensureCapacity(); + data[tail] = o; + tail++; + } + + public E deQueue(){ + return (E) data[0]; + } + + public boolean isEmpty(){ + return tail == 0; + } + + public int size(){ + return tail; + } + + private void ensureCapacity() { + if (tail == capacity) { + capacity *= 2; + Object[] newData = new Object[capacity]; + System.arraycopy(data, 0, newData, 0, tail); + data = newData; + } + } +} diff --git a/group08/406166841/2-26/CustomStack.java b/group08/406166841/2-26/CustomStack.java new file mode 100644 index 0000000000..c83c7aee78 --- /dev/null +++ b/group08/406166841/2-26/CustomStack.java @@ -0,0 +1,70 @@ +package net.iyouqu.bruceretrofit.util.java; + +import java.util.ArrayList; + +/** + * Created by liq on 2017/2/25. + */ + +public class CustomStack { + + //重载因子 + private static final float LOAD_FACTOR = 0.75f; + //需要扩充容量时的大小 + private int resizeCapacity; + private Object[] data = null; + //栈容量 + private int capacity; + //栈顶 + private int top; + + public CustomStack(int initSize) { + if (initSize >= 0) { + this.capacity = initSize; + data = new Object[initSize]; + top = 0; + this.resizeCapacity = (int) (capacity * LOAD_FACTOR); + } else { + throw new RuntimeException("初始化大小不能小于0:" + initSize); + } + } + + private ArrayList elementData = new ArrayList(); + + public void push(E o){ + checkStackCapacity(); + data[top] = o; + top++; + } + + public E pop(){ + if(top<=0) + throw new RuntimeException("没有元素不能弹出"); + E e = (E) data[top - 1]; + data[top-1] = null; + --top; + return e; + } + + public E peek(){ + + return (E) data[top - 1]; + + } + public boolean isEmpty(){ + return top == 0; + } + public int size(){ + return top; + } + + private void checkStackCapacity() { + if (top == resizeCapacity) { + capacity = capacity * 2; + Object[] newData = new Object[capacity]; + System.arraycopy(data, 0, newData, 0, top); + data = newData; + } + } + +} diff --git a/group08/406166841/2-26/Iterator.java b/group08/406166841/2-26/Iterator.java new file mode 100644 index 0000000000..2a90aac57b --- /dev/null +++ b/group08/406166841/2-26/Iterator.java @@ -0,0 +1,10 @@ +package net.iyouqu.bruceretrofit.util.java; + +/** + * Created by liq on 2017/2/25. + */ + +public interface Iterator { + public boolean hasNext(); + public Object next(); +} diff --git a/group08/406166841/2-26/List.java b/group08/406166841/2-26/List.java new file mode 100644 index 0000000000..b302910fb0 --- /dev/null +++ b/group08/406166841/2-26/List.java @@ -0,0 +1,13 @@ +package net.iyouqu.bruceretrofit.util.java; + +/** + * Created by liq on 2017/2/25. + */ + +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(); +} From 8b504764149da37a8488a6096ccd0f5279df127f Mon Sep 17 00:00:00 2001 From: zhi <1536161030@qq.com> Date: Sat, 25 Feb 2017 20:44:15 +0800 Subject: [PATCH 138/216] 0206 --- group07/1536161030/.classpath | 6 + group07/1536161030/.gitignore | 22 ++++ group07/1536161030/.project | 17 +++ ...\347\233\230,\346\214\207\344\273\244.txt" | 12 ++ .../src/com/coding/basic/ArrayList.java | 91 ++++++++++++++ .../src/com/coding/basic/BinaryTreeNode.java | 75 ++++++++++++ .../src/com/coding/basic/Iterator.java | 8 ++ .../src/com/coding/basic/LinkedList.java | 115 ++++++++++++++++++ .../1536161030/src/com/coding/basic/List.java | 13 ++ .../src/com/coding/basic/Queue.java | 62 ++++++++++ .../src/com/coding/basic/Stack.java | 43 +++++++ 11 files changed, 464 insertions(+) create mode 100644 group07/1536161030/.classpath create mode 100644 group07/1536161030/.gitignore create mode 100644 group07/1536161030/.project create mode 100644 "group07/1536161030/CPU,\345\206\205\345\255\230,\347\241\254\347\233\230,\346\214\207\344\273\244.txt" create mode 100644 group07/1536161030/src/com/coding/basic/ArrayList.java create mode 100644 group07/1536161030/src/com/coding/basic/BinaryTreeNode.java create mode 100644 group07/1536161030/src/com/coding/basic/Iterator.java create mode 100644 group07/1536161030/src/com/coding/basic/LinkedList.java create mode 100644 group07/1536161030/src/com/coding/basic/List.java create mode 100644 group07/1536161030/src/com/coding/basic/Queue.java create mode 100644 group07/1536161030/src/com/coding/basic/Stack.java diff --git a/group07/1536161030/.classpath b/group07/1536161030/.classpath new file mode 100644 index 0000000000..d171cd4c12 --- /dev/null +++ b/group07/1536161030/.classpath @@ -0,0 +1,6 @@ + + + + + + diff --git a/group07/1536161030/.gitignore b/group07/1536161030/.gitignore new file mode 100644 index 0000000000..be00f4a4de --- /dev/null +++ b/group07/1536161030/.gitignore @@ -0,0 +1,22 @@ +# Compiled class file +*.class + +# Log file +*.log + +# BlueJ files +*.ctxt + +# Mobile Tools for Java (J2ME) +.mtj.tmp/ + +# Package Files # +*.jar +*.war +*.ear +*.zip +*.tar.gz +*.rar + +# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml +hs_err_pid* \ No newline at end of file diff --git a/group07/1536161030/.project b/group07/1536161030/.project new file mode 100644 index 0000000000..11a1957bfe --- /dev/null +++ b/group07/1536161030/.project @@ -0,0 +1,17 @@ + + + homework + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git "a/group07/1536161030/CPU,\345\206\205\345\255\230,\347\241\254\347\233\230,\346\214\207\344\273\244.txt" "b/group07/1536161030/CPU,\345\206\205\345\255\230,\347\241\254\347\233\230,\346\214\207\344\273\244.txt" new file mode 100644 index 0000000000..32d83cd08b --- /dev/null +++ "b/group07/1536161030/CPU,\345\206\205\345\255\230,\347\241\254\347\233\230,\346\214\207\344\273\244.txt" @@ -0,0 +1,12 @@ +ڲҪCPUڴ棬Ӳָ̣ +CPUҲд˿˼ԿCPU㡣CPUҪͿƵIJ֣˼壬ǿƵԪ㵥Ԫ֣˵ĴԽмһ +ԵļһģÿܵԪǷֹȷġпƵԪݳָͨ㵥ԪóȻƴ洢Ԫ洢мĽ +ڴǴ洢CPUҪϣҪУϵͳеʱݣӲ̶ȡݣṩCPUʹá +ӲǸ洢Ҫô洢ݣǵijݣŵǷdz̶׼ȷԴ洢Ϣʱ +ڴȡݵٶȱӲ̵Ĵȡٶȿ10 ijЩܻ +CPUٶȱڴ治֪ҪٱǰѳӲ̷ŵڴԺCPUֱڴгCPUֱӲгҪܶࡣ +ڴһCPUй죬Ӳݴȡ̫⡣ ǵĵԵٶȡ +гʱCPUȽܵǵ֮CPUǸӲ̣Ҫ洢ijAѳA͵ڴȥCPUڴ˵Ӳ̰ѳA͵ˣ㱣һ¡ ȳA͵ڴ֮CPUͿʼִгACPU㣬ȡδ洢ݣζйͨҪָˡ +ָҲǻԵһ䣬൱CPUڴ棬Ӳ֮ԡָӼݵ㣬߼㣬ݴͣĿƣָȡ + + diff --git a/group07/1536161030/src/com/coding/basic/ArrayList.java b/group07/1536161030/src/com/coding/basic/ArrayList.java new file mode 100644 index 0000000000..bc843efd99 --- /dev/null +++ b/group07/1536161030/src/com/coding/basic/ArrayList.java @@ -0,0 +1,91 @@ +package com.coding.basic; + +public class ArrayList implements List{ + + private int size = 0; + + private Object[] elementData; + + public ArrayList(int size) { + this.elementData = new Object[size]; + } + + public ArrayList() { + this.elementData = new Object[100]; + } + + public void add(Object o) { + if(isFull()) + resize(); + elementData[size++] = o; + } + + public void add(int index, Object o) { + rangeCheckForAdd(index); + System.arraycopy(elementData, index, elementData, index + 1, size - index); + elementData[index] = o; + size++; + + } + + public Object get(int index) { + rangeCheckForAdd(index); + return elementData[index]; + } + + public Object remove(int index) { + rangeCheckForAdd(index); + Object o = elementData[index]; + System.arraycopy(elementData, index + 1, elementData, index, size - index); + elementData[--size] = null; + return o; + } + + public int size() { + return elementData.length; + } + + public com.coding.basic.Iterator iterator() { + return new Itr(); + } + + private class Itr implements com.coding.basic.Iterator { + int cursor; + + @Override + public boolean hasNext() { + return cursor != size; + } + + @Override + public Object next() { + int i = cursor; + if (i < elementData.length) { + cursor = i + 1; + return elementData[i]; + } + return null; + } + } + + //檢查下表越界 + public void rangeCheckForAdd(int index) { + if (index < 0 || index > size) + throw new RuntimeException("下标越界"); + } + + //数组是否满 + public boolean isFull(){ + return size == elementData.length; + } + + //扩容 + public void resize(){ + Object[] newElementData = new Object[elementData.length * 2]; + System.arraycopy(elementData, 0, newElementData, 0, size); + this.elementData = newElementData; + newElementData = null; + } + + +} diff --git a/group07/1536161030/src/com/coding/basic/BinaryTreeNode.java b/group07/1536161030/src/com/coding/basic/BinaryTreeNode.java new file mode 100644 index 0000000000..b1143e1a74 --- /dev/null +++ b/group07/1536161030/src/com/coding/basic/BinaryTreeNode.java @@ -0,0 +1,75 @@ +package com.coding.basic; + +public class BinaryTreeNode > { + + private Object data; + + private BinaryTreeNode left; + + private BinaryTreeNode right; + + public BinaryTreeNode(Object data){ + this.data = data; + this.left=null; + this.right =null; + } + + public BinaryTreeNode root; + + 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; + } + /* + * 二叉树 b 插入对象 o 父节点 pnode + * 若b为空树,插入节点作为根 + * o 等于根节点 直接返回 + * o 小于根节点 pnode = 左子树 + * else pnode = 右子树 + * + */ + public BinaryTreeNode insert(Object o) { + BinaryTreeNode current = root; + + if(current == null){ + return new BinaryTreeNode(o); + } + if (o.compareTo((Object) current.data)<0){ + if(current.left !=null){ + current = current.left; + }else{ + current.left = new BinaryTreeNode(o); + return current; + } + }else if(o.compareTo((Object) current.data)==0){ + return current; + }else{ + if(current.right !=null){ + current = current.right; + }else{ + current.right = new BinaryTreeNode(o); + return current; + } + } + return current; + } +} diff --git a/group07/1536161030/src/com/coding/basic/Iterator.java b/group07/1536161030/src/com/coding/basic/Iterator.java new file mode 100644 index 0000000000..2ab5f039d5 --- /dev/null +++ b/group07/1536161030/src/com/coding/basic/Iterator.java @@ -0,0 +1,8 @@ +package com.coding.basic; + +public interface Iterator { + boolean hasNext(); + + Object next(); + +} diff --git a/group07/1536161030/src/com/coding/basic/LinkedList.java b/group07/1536161030/src/com/coding/basic/LinkedList.java new file mode 100644 index 0000000000..0fb1a8726c --- /dev/null +++ b/group07/1536161030/src/com/coding/basic/LinkedList.java @@ -0,0 +1,115 @@ +package com.coding.basic; + +public class LinkedList implements List { + + private Node head; + int size; + + public void add(Object o) { + Node newNode = new Node(o); + newNode.next = head.next; + head.next = newNode; + size++; + } + + public void add(int index, Object o) { + Node indexNode = node(index); + Node newNode = new Node(o); + newNode.next = indexNode.next; + indexNode.next = newNode; + size++; + } + + public Object get(int index) { + return node(index).data; + } + + public Object remove(int index) { + Node indexNode = node(index); + Node preNode = node(index); + preNode.next = indexNode.next; + indexNode.next = null; + size--; + return indexNode.data; + } + + public int size() { + return size; + } + + public void addFirst(Object o) { + if(o == null){ + throw new RuntimeException("不能加入null元素"); + } + Node newNode = new Node(o); + newNode.next = head; + size++; + } + + public void addLast(Object o) { + Node newNode = new Node(o); + Node last = node(size); + + newNode.next = last.next; + last.next = newNode; + size++; + } + + public Object removeFirst() { + Node oldNode = head; + head = head.next; + head.next = null; + size--; + return oldNode.data; + } + + public Object removeLast() { + Node oldNode = node(size); + Node preNode = node(size - 1); + preNode.next = null; + size--; + return oldNode.data; + } + + public Iterator iterator(int index) { + return new Itr(index); + } + + // TODO: 2017/2/24 + private class Itr implements com.coding.basic.Iterator { + private int nextIndex; + + public Itr(int index) { + this.nextIndex = index; + } + + @Override + public boolean hasNext() { + return nextIndex < size; + } + + @Override + public Object next() { + return null; + } + } + + + private static class Node { + public Object data; + public Node next; + + public Node(Object data) { + this.data = data; + this.next = null; + } + + } + + Node node(int index) { + Node x = head; + for (int i = 0; i < index; i++) + x = x.next; + return x; + } +} diff --git a/group07/1536161030/src/com/coding/basic/List.java b/group07/1536161030/src/com/coding/basic/List.java new file mode 100644 index 0000000000..df30cc6e07 --- /dev/null +++ b/group07/1536161030/src/com/coding/basic/List.java @@ -0,0 +1,13 @@ +package com.coding.basic; + +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(); +} diff --git a/group07/1536161030/src/com/coding/basic/Queue.java b/group07/1536161030/src/com/coding/basic/Queue.java new file mode 100644 index 0000000000..4a732d323f --- /dev/null +++ b/group07/1536161030/src/com/coding/basic/Queue.java @@ -0,0 +1,62 @@ +package com.coding.basic; + +public class Queue { + private int size; + + //头标志位 + private int head; + + //尾标志位 + private int tail; + + private Object[] queue; + + public Queue() { + this.queue = new Object[100]; + this.size = 0 ; + this.head = 0; + this.tail = 0; + } + + public void enQueue(Object o) { + if(isFull()){ + resize(); + head=0; + } + int newtail = (head + size )% queue.length; + queue[newtail]=o; + size ++; + } + + public Object deQueue() { + if(isEmpty()) + throw new RuntimeException("队列为空!"); + Object old = queue[head]; + queue[head] =null; + head = (head + 1)% queue.length; + size --; + return old; + + } + + public boolean isEmpty() { + return size == 0; + } + + public int size() { + int diff = tail - head; + return diff; + } + + public boolean isFull(){ + return size == queue.length; + } + + //扩容 + public void resize(){ + Object[] newQueue = new Object[queue.length * 2]; + System.arraycopy(queue, 0, newQueue, 0, size); + this.queue = newQueue; + newQueue = null; + } +} diff --git a/group07/1536161030/src/com/coding/basic/Stack.java b/group07/1536161030/src/com/coding/basic/Stack.java new file mode 100644 index 0000000000..5412ebc14f --- /dev/null +++ b/group07/1536161030/src/com/coding/basic/Stack.java @@ -0,0 +1,43 @@ +package com.coding.basic; + +import com.coding.basic.ArrayList; + +public class Stack { + private ArrayList elementData; + private int size; + private int top = 0; + + public Stack() { + this.size = 0; + this.elementData = new ArrayList(20); + } + + public void push(Object o) { + elementData.add(top, o); + size++; + } + + public Object pop() { + elementData.remove(top); + size--; + return elementData.get(top); + } + + public Object peek() { + int len = size(); + if (len >= 0) { + return elementData.get(len - 1); + } + return null; + } + + public boolean isEmpty() { + return false; + } + + public int size() { + return size; + } +} + + From dcb6d21dcb72699ef8d394d2d6920ba1e809af03 Mon Sep 17 00:00:00 2001 From: Brucelq Date: Sat, 25 Feb 2017 20:44:34 +0800 Subject: [PATCH 139/216] Delete .DS_Store --- group08/406166841/.DS_Store | Bin 6148 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 group08/406166841/.DS_Store diff --git a/group08/406166841/.DS_Store b/group08/406166841/.DS_Store deleted file mode 100644 index 9fb74f29c082fd26e87f48ba0939987072b741e8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHK&2G~`5S~p9tW^*>AeEypNE`x+X-JEzN>&Jm-jIyo0I0R&sIg>wqr_=MLy&L0 z0z3mR!UG`nabRY5Yb7d?dO`?hq}gwGem353qWu8?(VHbcKobBYDq+LL<~Krq(ks%i z7IF%j<0w;uI8!l>X+oC2p8=|!15e-)YInVUg6jM2rxv}CIxe11$F|Pj<8hWw%Xa%h zG`5@@H*ZNPx8)uAJ{+leSVrY++KVP{^(ak-vF*Q7Dy#cZ{5l=ZkDK?NtD=n3VmMg| zfA=OW5;gCsS&>ZjJTIeigt@NkO82W2fBk1w68zFhVD$*ddz{J3yF>xeopSII`- zc(i%Wvv5*msyM~j==*L%2injDAGHhnIP&2!Z1fWV(Lu8o?CYyPqDKbAz+z<(EhxgIBAQfT zpBTcv9E3?ne_-P)gC-sH Date: Sat, 25 Feb 2017 20:45:34 +0800 Subject: [PATCH 140/216] update Stack.java --- group18/1159828430/20170219/.classpath | 1 + group18/1159828430/20170219/src/com/coding/basic/Stack.java | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/group18/1159828430/20170219/.classpath b/group18/1159828430/20170219/.classpath index d171cd4c12..2d7497573f 100644 --- a/group18/1159828430/20170219/.classpath +++ b/group18/1159828430/20170219/.classpath @@ -2,5 +2,6 @@ + diff --git a/group18/1159828430/20170219/src/com/coding/basic/Stack.java b/group18/1159828430/20170219/src/com/coding/basic/Stack.java index 3005fa2ef7..ef5b637050 100644 --- a/group18/1159828430/20170219/src/com/coding/basic/Stack.java +++ b/group18/1159828430/20170219/src/com/coding/basic/Stack.java @@ -43,7 +43,7 @@ public int size(){ return elementData.size(); } } -class TestMyStack { +class TestStack { public static void main(String[] args){ Stack myStack=new Stack(); myStack.push("a"); From bf5dbbdbe133024257375b0b277161fbd239afd2 Mon Sep 17 00:00:00 2001 From: akinaru-lu Date: Sat, 25 Feb 2017 22:13:24 +0900 Subject: [PATCH 141/216] 2-26 assignment --- group08/729770920/.gitignore | 1 + group08/729770920/2-26/resource/report.txt | 5 + .../2-26/src/com/coding/basic/ArrayList.java | 111 ++++++++++++ .../2-26/src/com/coding/basic/Iterator.java | 9 + .../2-26/src/com/coding/basic/LinkedList.java | 164 ++++++++++++++++++ .../2-26/src/com/coding/basic/List.java | 19 ++ .../2-26/src/com/coding/basic/Queue.java | 21 +++ .../2-26/src/com/coding/basic/Stack.java | 25 +++ group08/729770920/{729770920.md => README.md} | 0 9 files changed, 355 insertions(+) create mode 100644 group08/729770920/.gitignore create mode 100644 group08/729770920/2-26/resource/report.txt create mode 100644 group08/729770920/2-26/src/com/coding/basic/ArrayList.java create mode 100644 group08/729770920/2-26/src/com/coding/basic/Iterator.java create mode 100644 group08/729770920/2-26/src/com/coding/basic/LinkedList.java create mode 100644 group08/729770920/2-26/src/com/coding/basic/List.java create mode 100644 group08/729770920/2-26/src/com/coding/basic/Queue.java create mode 100644 group08/729770920/2-26/src/com/coding/basic/Stack.java rename group08/729770920/{729770920.md => README.md} (100%) diff --git a/group08/729770920/.gitignore b/group08/729770920/.gitignore new file mode 100644 index 0000000000..6b468b62a9 --- /dev/null +++ b/group08/729770920/.gitignore @@ -0,0 +1 @@ +*.class diff --git a/group08/729770920/2-26/resource/report.txt b/group08/729770920/2-26/resource/report.txt new file mode 100644 index 0000000000..f256165498 --- /dev/null +++ b/group08/729770920/2-26/resource/report.txt @@ -0,0 +1,5 @@ +CPU是计算机的大脑,由运算器和寄存器组成。可以储存指令和数据,并执行指令进行简单的计算。 +指令是CPU可以直接执行的命令。 +内存是所谓的RAM,读写速度较快。常用来作为CPU和硬盘之间数据交换的缓存。 +硬盘容量极大,但是读写速度比内存慢很多。用来存放程序的二进制码,音频,视频等等数据资源。 +程序运行时,数据由硬盘拷贝到内存,CPU再从内存里加载包含指令的数据,逐一执行。 \ No newline at end of file diff --git a/group08/729770920/2-26/src/com/coding/basic/ArrayList.java b/group08/729770920/2-26/src/com/coding/basic/ArrayList.java new file mode 100644 index 0000000000..8fe149f4ad --- /dev/null +++ b/group08/729770920/2-26/src/com/coding/basic/ArrayList.java @@ -0,0 +1,111 @@ +package com.coding.basic; + +public class ArrayList implements List { + + private int size; + + private E[] data; + + public void add(E e){ + add(size, e); + } + + public ArrayList() { + clear(); + } + + public ArrayList(int capacity) { + clear(); + ensureCapacity(capacity); + } + + public void add(int index, E e){ + if (index < 0 || index > size) { + throw new IndexOutOfBoundsException(Integer.toString(index)); + } + if (data.length == size) { + ensureCapacity(size * 2 + 1); + } + for (int i = size++; i > index; --i) { + data[i] = data[i - 1]; + } + data[index] = e; + } + + public E get(int index){ + return data[index]; + } + + public E remove(int index){ + if (index < 0 || index >= size) { + throw new IndexOutOfBoundsException(Integer.toString(index)); + } + E copy = data[index]; + --size; + for (int i = index; i < size; ++i) { + data[i] = data[i + 1]; + } + return copy; + } + + public boolean contains(E e) { + for (int i = 0; i < size; ++i) { + if (data[i] == e) { + return true; + } + } + return false; + } + + public void clear() { + size = 0; + data = (E[]) new Object[0]; + } + + public int size(){ + return size; + } + + public boolean isEmpty() { + return size == 0; + } + + public Iterator iterator(){ + return new ArrayListIterator(); + } + + public void ensureCapacity(int capacity) { + E[] newData = (E[]) new Object[capacity]; + for (int i = 0; i < size; ++i) { + newData[i] = data[i]; + } + data = newData; + } + + public void trimToSize() { + E[] newData = (E[]) new Object[size]; + for (int i = 0; i < size; ++i) { + newData[i] = data[i]; + } + data = newData; + } + + private class ArrayListIterator implements Iterator { + int current = 0; + + public boolean hasNext() { + return current < size; + } + + public E next() { + if (!hasNext()) { + throw new java.util.NoSuchElementException(); + } + return data[current++]; + } + + public void remove() { + ArrayList.this.remove(current); + } + } +} diff --git a/group08/729770920/2-26/src/com/coding/basic/Iterator.java b/group08/729770920/2-26/src/com/coding/basic/Iterator.java new file mode 100644 index 0000000000..f0e2eddde8 --- /dev/null +++ b/group08/729770920/2-26/src/com/coding/basic/Iterator.java @@ -0,0 +1,9 @@ +package com.coding.basic; + +public interface Iterator { + boolean hasNext(); + + E next(); + + void remove(); +} diff --git a/group08/729770920/2-26/src/com/coding/basic/LinkedList.java b/group08/729770920/2-26/src/com/coding/basic/LinkedList.java new file mode 100644 index 0000000000..899e0be08e --- /dev/null +++ b/group08/729770920/2-26/src/com/coding/basic/LinkedList.java @@ -0,0 +1,164 @@ +package com.coding.basic; + +public class LinkedList implements List { + private int size = 0; + private Node head = new Node<>(); + private Node tail = new Node<>(); + + public LinkedList() { + head.next = tail; + tail.prev = head; + } + + public void add(E e) { + addLast(e); + } + + public void add(int index, E e) { + if (index < 0 || index > size) { + throw new IndexOutOfBoundsException(Integer.toString(index)); + } + Node cursor; + if (index < size/2) { + cursor = head; + for (int i = 0, num = index; i < num; ++i) { + cursor = cursor.next; + } + } else { + cursor = tail.prev; + for (int i = 0, num = size-index; i < num; ++i) { + cursor = cursor.prev; + } + } + cursor.next = cursor.next.prev = new Node(e, cursor, cursor.next); + ++size; + } + + public E get(int index) { + if (index < 0 || index >= size) { + throw new IndexOutOfBoundsException(Integer.toString(index)); + } + Node cursor; + if (index < size/2) { + cursor = head.next; + for (int i = 0; i < index; ++i) { + cursor = cursor.next; + } + } else { + cursor = tail.prev; + for (int i = 0, num = size-index-1; i < num; ++i) { + cursor = cursor.prev; + } + } + return cursor.data; + } + + public E remove(int index) { + if (index < 0 || index >= size) { + throw new IndexOutOfBoundsException(Integer.toString(index)); + } + Node cursor; + if (index < size/2) { + cursor = head.next; + for (int i = 0; i < index; ++i) { + cursor = cursor.next; + } + } else { + cursor = tail.prev; + for (int i = 0, num = size-index-1; i < num; ++i) { + cursor = cursor.prev; + } + } + cursor.prev.next = cursor.next; + cursor.next.prev = cursor.prev; + --size; + return cursor.data; + } + + public int size() { + return size; + } + + public boolean isEmpty() { + return size == 0; + } + + public void addFirst(E e) { + add(0, e); + } + + public void addLast(E e) { + add(size, e); + } + + public E removeFirst() { + return remove(0); + } + + public E removeLast() { + return remove(size-1); + } + + public void clear() { + while (!isEmpty()) { + removeFirst(); + } + } + + public boolean contains(E e) { + Iterator it = this.iterator(); + while (it.hasNext()) { + if (it.next() == e) { + return true; + } + } + return false; + } + + public Iterator iterator() { + return new LinkedListIterator(); + } + + private static class Node { + E data = null; + Node prev = null; + Node next = null; + + public Node() { + } + + public Node(E e, Node p, Node n) { + data = e; + prev = p; + next = n; + } + } + + private class LinkedListIterator implements Iterator { + Node currentNode = head.next; + + public boolean hasNext() { + return currentNode != tail; + } + + public E next() { + if (!hasNext()) { + throw new java.util.NoSuchElementException(); + } + E data = currentNode.data; + currentNode = currentNode.next; + return data; + } + + public void remove() { + if (!hasNext()) { + throw new java.util.NoSuchElementException(); + } + Node nextNode = currentNode.next; + currentNode.next.prev = currentNode.prev; + currentNode.prev.next = currentNode.next; + currentNode = nextNode; + --size; + } + } +} diff --git a/group08/729770920/2-26/src/com/coding/basic/List.java b/group08/729770920/2-26/src/com/coding/basic/List.java new file mode 100644 index 0000000000..babed5a71f --- /dev/null +++ b/group08/729770920/2-26/src/com/coding/basic/List.java @@ -0,0 +1,19 @@ +package com.coding.basic; + +public interface List { + void add(E e); + + void add(int index, E e); + + void clear(); + + E get(int index); + + E remove(int index); + + int size(); + + boolean contains(E e); + + Iterator iterator(); +} diff --git a/group08/729770920/2-26/src/com/coding/basic/Queue.java b/group08/729770920/2-26/src/com/coding/basic/Queue.java new file mode 100644 index 0000000000..a660ad6729 --- /dev/null +++ b/group08/729770920/2-26/src/com/coding/basic/Queue.java @@ -0,0 +1,21 @@ +package com.coding.basic; + +public class Queue { + private LinkedList data = new LinkedList<>(); + + public void enQueue(E e){ + data.addFirst(e); + } + + public Object deQueue() { + return data.removeLast(); + } + + public boolean isEmpty() { + return data.size() == 0; + } + + public int size(){ + return data.size(); + } +} diff --git a/group08/729770920/2-26/src/com/coding/basic/Stack.java b/group08/729770920/2-26/src/com/coding/basic/Stack.java new file mode 100644 index 0000000000..c7e7773de5 --- /dev/null +++ b/group08/729770920/2-26/src/com/coding/basic/Stack.java @@ -0,0 +1,25 @@ +package com.coding.basic; + +public class Stack { + private LinkedList data = new LinkedList<>(); + + public void push(E e) { + data.addFirst(e); + } + + public Object pop() { + return data.removeFirst(); + } + + public Object peek() { + return data.get(0); + } + + public boolean isEmpty() { + return data.size() == 0; + } + + public int size() { + return data.size(); + } +} diff --git a/group08/729770920/729770920.md b/group08/729770920/README.md similarity index 100% rename from group08/729770920/729770920.md rename to group08/729770920/README.md From 9073ff3d79410ef7559e07abd8f2c5a0ef9a8887 Mon Sep 17 00:00:00 2001 From: tigerfour <1737036540@qq.com> Date: Sat, 25 Feb 2017 21:27:49 +0800 Subject: [PATCH 142/216] CPU related --- group08/406166841/2-26/CPU.md | 76 +++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 group08/406166841/2-26/CPU.md diff --git a/group08/406166841/2-26/CPU.md b/group08/406166841/2-26/CPU.md new file mode 100644 index 0000000000..0184372f60 --- /dev/null +++ b/group08/406166841/2-26/CPU.md @@ -0,0 +1,76 @@ +CPU:中央处理单元(Cntral Pocessing Uit)的缩写,也叫处理器,是计算机的运算核心和控制核心。人靠大脑思考,电脑靠CPU来运算、控制。让电脑的各个部件顺利工作,起到协调和控制作用。 + +内存:1. 负责硬盘等硬件上的数据与CPU之间数据交换处理;2. 缓存系统中的临时数据。3. 断电后数据丢失。 +硬盘:存储资料和软件等数据的设备,有容量大,断电数据不丢失的特点。也被人们称之为“数据仓库”。 + +现在我们来说一下CPU、硬盘、内存三者之间的关系。 + +首先 ,我们先回想一下三者的作用: + +CPU:是计算机的运算核心和控制核心,让电脑的各个部件顺利工作,起到协调和控制作用。 +硬盘:存储资料和软件等数据的设备,有容量大,断电数据不丢失的特点。也被人们称之为“数据仓库”。 +内存:1. 负责硬盘等硬件上的数据与CPU之间数据交换处理;2. 缓存系统中的临时数据。3. 断电后数据丢失。 + +然后, 我们再来看一下程序是如何执行起来的。 + +当我们在电脑上打开QQ时(右键-打开 或者双击QQ图标),其实是通过鼠标(输入设备)向CPU发送了一条命令,CPU接收到这条命令后,QQ程序就从硬盘里被加载到内存(加载时不通过处理器,直接从硬盘加载程序到内存里),加载完成后,CPU就开始执行QQ程序。程序执行起来后,CPU可以让QQ程序显示在我们的在显示器上。也就是你看到了QQ 程序运行起来了。如果这个时候,你用QQ截取了一张屏幕的图片,那么这张图片会首先保存到内存,在没有退出截屏状态时,你可以在这张图片上写字、画线条,等你右键保存这张图片的时候,这张图片就会保存到硬盘里。 + +通过了解一个程序是如何运行起来的,我们就可以了解三者是如何工作的 。 + +可能有些人会不明白,如果程序是这样执行起来的话,那么为什么CPU不直接在硬盘里执行程序,而非要把程序放到内存后在执行呢? + +因为速度差别太大: +内存存取数据的速度比硬盘的存取速度快了10倍, 在某些环境里,硬盘和内存之间的速度差距可能会更大。 + +而CPU的速度比内存不知还要快多少倍。当我们把程序从硬盘放到内存以后,CPU就直接在内存运行程序,这样比CPU直接在硬盘运行程序就要快很多。 + +内存解决了一部分CPU运行过快,而硬盘数据存取太慢的问题。 提高了我们的电脑的运行速度。 + +内存就如同一条“高速车道”一般,数据由传输速度较慢的硬盘通过这条高速车道传送至CPU进行处理! + +但内存是带电存储的(一旦断电数据就会消失),而且容量有限,所以要长时间储存程序或数据就需要使用硬盘。 + +其实内存在这里起了两个作用: + +1. 保存从硬盘读取的数据,提供给CPU使用 + +2. 保存CPU的一些临时执行结果,以便CPU下次使用或保存到硬盘 + + + +数字电子中有各种逻辑功能,最简单的是与或非,数字电子中用01表示数据比如你表示 12(10进制) + +12 = 8*1+4*1+2*0+1*0表示为 1100你可以试试所有数字都可以这么表示出来,而1和0在数电中用"高电平","低电平"表示,说白了就是通电表示1断电表示0. + +硅片上的集成电路可以把这些门电路作到非常小,这样人们用各种逻辑电路就能实现复杂的计算器功能, + +我们姑且认为只能算加减乘除吧.你想算什么算式都可以用逻辑电路来实现.但是人们往往想算的东西都比较复杂比如这个 + +1*1+2*2+3*3+4*4...10000000*10000000 + +如果一次运算需要一个逻辑电路,那么这就需要2*10000000个逻辑电路, + +额,恕我直言,这个成本有点高, + +于是人们想到了一个好办法,就是做一个逻辑器件,有2个输入,分别是数据输入,指令输入,数据输入就是输入要运算的两个数据,指令输入输入让这个器件干什么,比如00就是做加法,01就是做减法,10是乘法,11是除法,然后给他配个储存设备用来保存数据,这样我们让这一个设备不断的运行,按照一定规则把输出的数据送回输入就能完成上面提到的运算了. + +后来这个设备被称为CPU, + +CPU除了运算逻辑以外,还能执行: 1 移动数据 2 逻辑运算 3 跳转指令 还有些杂七杂八的指令 + +移动数据就是把输出的数据送回输入的指令,通常数据存储在寄存器或者RAM中,储存器就像游泳馆的柜子,上面有个编号,里面存了个数字.后来编号被程序猿称为地址. + +有了这些我们还有一件事没做,想想是什么? + +就是告诉CPU,今天要做的指令,最开始指令是存储在穿孔纸带上的,现在是储存在硬盘里的 + +CPU一个一个地读进来,读一个执行一个操作.因此执行上面的操作要在纸带上打 2*10000000个以上的孔,这也有点麻烦 + +幸好我们的运算是有规律的,因此我们可以让纸带走一走倒带再走一走,直到某个条件满足了为止.这样的指令就是转移指令。 + +from: + +http://www.guokr.com/question/482025/ + + + From cc5465d3d0b0f79d6d9f0b600f288ef5bdf3a295 Mon Sep 17 00:00:00 2001 From: YukoOshima Date: Sat, 25 Feb 2017 21:29:28 +0800 Subject: [PATCH 143/216] hand in homework --- .idea/misc.xml | 20 +++++ .idea/vcs.xml | 6 ++ group08/125980622/first_hw/ArrayList.java | 44 +++++++++ .../125980622/first_hw/BinaryTreeNode.java | 52 +++++++++++ group08/125980622/first_hw/Iterator.java | 4 + group08/125980622/first_hw/LinkedList.java | 90 +++++++++++++++++++ group08/125980622/first_hw/List.java | 7 ++ group08/125980622/first_hw/Queue.java | 21 +++++ group08/125980622/first_hw/Stack.java | 24 +++++ group08/125980622/first_hw/myIterator.java | 37 ++++++++ 10 files changed, 305 insertions(+) create mode 100644 .idea/misc.xml create mode 100644 .idea/vcs.xml create mode 100644 group08/125980622/first_hw/ArrayList.java create mode 100644 group08/125980622/first_hw/BinaryTreeNode.java create mode 100644 group08/125980622/first_hw/Iterator.java create mode 100644 group08/125980622/first_hw/LinkedList.java create mode 100644 group08/125980622/first_hw/List.java create mode 100644 group08/125980622/first_hw/Queue.java create mode 100644 group08/125980622/first_hw/Stack.java create mode 100644 group08/125980622/first_hw/myIterator.java diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000000..3c979f4745 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,20 @@ + + + + + + + + 1.8 + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000000..35eb1ddfbb --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/group08/125980622/first_hw/ArrayList.java b/group08/125980622/first_hw/ArrayList.java new file mode 100644 index 0000000000..862b426261 --- /dev/null +++ b/group08/125980622/first_hw/ArrayList.java @@ -0,0 +1,44 @@ +import java.util.Objects; + +public class ArrayList implements List { + + private int size = 0; + + private Object[] elementData = new Object[100]; + + public void add(Object o){ + elementData[size++] = o; + } + public void add(int index, Object o){ + for (int i = size; i >index; i++) { + elementData[i] = elementData[i - 1]; + } + elementData[index] = o; + } + + public Object get(int index){ + return elementData[index]; + } + + public Object removeLast() { + return elementData[size--]; + } + + public Object remove(int index){ + Object temp = elementData[index]; + for (int i = index; i < size - 1; i++) { + elementData[i] = elementData[i + 1]; + } + size -= 1; + return temp; + } + + public int size(){ + return size; + } + + public Iterator iterator(){ + return new myIterator(this); + } + +} diff --git a/group08/125980622/first_hw/BinaryTreeNode.java b/group08/125980622/first_hw/BinaryTreeNode.java new file mode 100644 index 0000000000..0de773afd1 --- /dev/null +++ b/group08/125980622/first_hw/BinaryTreeNode.java @@ -0,0 +1,52 @@ +import com.sun.xml.internal.bind.v2.runtime.AttributeAccessor; + +public class BinaryTreeNode { + + private int data; + private BinaryTreeNode left; + private BinaryTreeNode right; + + public int getData() { + return data; + } + public void setData(int 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(int o){ + BinaryTreeNode returnNode = null; + if (data < o) { + if (right == null) { + right = new BinaryTreeNode(o, null, null); + returnNode = right; + } else { + returnNode = right.insert(o); + } + } else if (data > o) { + if (left == null) { + returnNode = left = new BinaryTreeNode(o, null, null); + } else { + returnNode = left.insert(o); + } + } + return returnNode; + } + + BinaryTreeNode (int initData, BinaryTreeNode initLeft, BinaryTreeNode initRight) { + data = initData; + left = initLeft; + right = initRight; + } +} diff --git a/group08/125980622/first_hw/Iterator.java b/group08/125980622/first_hw/Iterator.java new file mode 100644 index 0000000000..57b7ad9d11 --- /dev/null +++ b/group08/125980622/first_hw/Iterator.java @@ -0,0 +1,4 @@ +public interface Iterator { + public boolean hasNext(); + public Object next(); +} diff --git a/group08/125980622/first_hw/LinkedList.java b/group08/125980622/first_hw/LinkedList.java new file mode 100644 index 0000000000..f5477064bb --- /dev/null +++ b/group08/125980622/first_hw/LinkedList.java @@ -0,0 +1,90 @@ +public class LinkedList implements List { + + private Node head; + private int size = 0; + + public void add(Object o){ + if (head == null) { + head = new Node(o); + } else { + Node pointer = head.next; + while (pointer.next != null) { + pointer = pointer.next; + } + pointer.next = new Node(o); + } + size++; + } + public void add(int index , Object o){ + Node pointer = head; + for (int i = 0; i < index - 1; i++) { + pointer = pointer.next; + } + Node nNode = new Node(o, pointer.next); + pointer.next = nNode; + size++; + } + public Object get(int index){ + Node pointer = head; + for (int i= 0; i < index; i++) { + pointer = pointer.next; + } + return pointer; + } + public Object remove(int index){ + Node pointer = head; + for (int i = 0; i < index - 1; i++) { + pointer = pointer.next; + } + Node temp = pointer.next; + pointer.next = temp.next; + size--; + return temp; + } + + public int size(){ + return size; + } + + public void addFirst(Object o){ + head = new Node(o, head); + } + public void addLast(Object o){ + Node pointer = head; + while (pointer.next != null) { + pointer = pointer.next; + } + pointer.next = new Node(o); + } + public Object removeFirst(){ + Node temp = head; + head = head.next; + return temp; + } + public Object removeLast(){ + Node pointer = head; + while (pointer.next.next != null) { + pointer = pointer.next; + } + Node temp = pointer.next; + pointer.next = null; + return temp; + } + public myIterator iterator(){ + return new myIterator(this); + } + + + private static class Node{ + Object data; + Node next; + Node (Object o, Node n) { + data = o; + next = n; + } + Node (Object o) { + data = o; + next = null; + } + } +} diff --git a/group08/125980622/first_hw/List.java b/group08/125980622/first_hw/List.java new file mode 100644 index 0000000000..4f7bcc71a8 --- /dev/null +++ b/group08/125980622/first_hw/List.java @@ -0,0 +1,7 @@ +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(); +} diff --git a/group08/125980622/first_hw/Queue.java b/group08/125980622/first_hw/Queue.java new file mode 100644 index 0000000000..f176f2a256 --- /dev/null +++ b/group08/125980622/first_hw/Queue.java @@ -0,0 +1,21 @@ + +public class Queue { + + LinkedList queueList = new LinkedList(); + + public void enQueue(Object o){ + queueList.addLast(o); + } + + public Object deQueue(){ + return queueList.removeFirst(); + } + + public boolean isEmpty(){ + return queueList.size() <= 0; + } + + public int size(){ + return queueList.size(); + } +} diff --git a/group08/125980622/first_hw/Stack.java b/group08/125980622/first_hw/Stack.java new file mode 100644 index 0000000000..e3c15480b8 --- /dev/null +++ b/group08/125980622/first_hw/Stack.java @@ -0,0 +1,24 @@ +public class Stack { + private ArrayList elementData = new ArrayList(); + + private int size = 0; + + public void push(Object o){ + elementData.add(o); + size++; + } + + public Object pop(){ + return elementData.remove(size); + } + + public Object peek(){ + return elementData.get(size); + } + public boolean isEmpty(){ + return size <= 0; + } + public int size(){ + return size; + } +} diff --git a/group08/125980622/first_hw/myIterator.java b/group08/125980622/first_hw/myIterator.java new file mode 100644 index 0000000000..0a2f9bb13d --- /dev/null +++ b/group08/125980622/first_hw/myIterator.java @@ -0,0 +1,37 @@ +import java.util.Objects; + +/** + * Created by Yusen Meng on 25/02/2017. + */ +public class myIterator implements Iterator { + int index = 0; + ArrayList _array = null; + LinkedList _list = null; + myIterator (LinkedList theList) { + _list = theList; + } + myIterator (ArrayList theArray) { + _array = theArray; + } + public boolean hasNext() { + boolean result; + if (_array != null) { + result = index < _array.size(); + } else { + result = index < _list.size(); + } + return result; + } + + public Object next() { + Object returnValue; + if (_array != null) { + returnValue = _array.get(index); + index++; + } else { + returnValue = _list.get(index); + index++; + } + return returnValue; + } +} From c38a630f21b37df93f60bd0c5b6ad6a2e6e9bbb9 Mon Sep 17 00:00:00 2001 From: chhsalex Date: Sat, 25 Feb 2017 21:30:53 +0800 Subject: [PATCH 144/216] upload homework for 2-26 --- ...4\347\232\204\345\205\263\347\263\273.pdf" | Bin 0 -> 63305 bytes .../2-26/code/com/coding/basic/ArrayList.java | 80 ++++++++++ .../code/com/coding/basic/BinaryTreeNode.java | 47 ++++++ .../2-26/code/com/coding/basic/Iterator.java | 7 + .../code/com/coding/basic/LinkedList.java | 137 ++++++++++++++++++ .../2-26/code/com/coding/basic/List.java | 9 ++ .../2-26/code/com/coding/basic/Queue.java | 22 +++ .../2-26/code/com/coding/basic/Stack.java | 23 +++ .../2-26/code/com/coding/test/Main.java | 103 +++++++++++++ 9 files changed, 428 insertions(+) create mode 100644 "group08/619057560/2-26/article/CPU\357\274\214\345\206\205\345\255\230\357\274\214\347\241\254\347\233\230\357\274\214\346\214\207\344\273\244\344\271\213\351\227\264\347\232\204\345\205\263\347\263\273.pdf" create mode 100644 group08/619057560/2-26/code/com/coding/basic/ArrayList.java create mode 100644 group08/619057560/2-26/code/com/coding/basic/BinaryTreeNode.java create mode 100644 group08/619057560/2-26/code/com/coding/basic/Iterator.java create mode 100644 group08/619057560/2-26/code/com/coding/basic/LinkedList.java create mode 100644 group08/619057560/2-26/code/com/coding/basic/List.java create mode 100644 group08/619057560/2-26/code/com/coding/basic/Queue.java create mode 100644 group08/619057560/2-26/code/com/coding/basic/Stack.java create mode 100644 group08/619057560/2-26/code/com/coding/test/Main.java diff --git "a/group08/619057560/2-26/article/CPU\357\274\214\345\206\205\345\255\230\357\274\214\347\241\254\347\233\230\357\274\214\346\214\207\344\273\244\344\271\213\351\227\264\347\232\204\345\205\263\347\263\273.pdf" "b/group08/619057560/2-26/article/CPU\357\274\214\345\206\205\345\255\230\357\274\214\347\241\254\347\233\230\357\274\214\346\214\207\344\273\244\344\271\213\351\227\264\347\232\204\345\205\263\347\263\273.pdf" new file mode 100644 index 0000000000000000000000000000000000000000..f310b09e2d78a9290fe2a18338891dc0f5730889 GIT binary patch literal 63305 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%0AmlmIu_Zu{GADqo&$T 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 T7+m=P6P=Mcm#V6(zZ(|-PfiJ% literal 0 HcmV?d00001 diff --git a/group08/619057560/2-26/code/com/coding/basic/ArrayList.java b/group08/619057560/2-26/code/com/coding/basic/ArrayList.java new file mode 100644 index 0000000000..5fe3123515 --- /dev/null +++ b/group08/619057560/2-26/code/com/coding/basic/ArrayList.java @@ -0,0 +1,80 @@ +package com.coding.basic; + +import java.util.Arrays; +import java.util.NoSuchElementException; + +public class ArrayList implements List { + + private int size = 0; + + private Object[] elementData = new Object[100]; + + public void add(Object o){ + if (size + 1 > elementData.length) { + elementData = Arrays.copyOf(elementData, elementData.length * 3 / 2 + 1); + } + elementData[size++] = o; + } + public void add(int index, Object o){ + if (index < 0 || index > size) { + throw new IndexOutOfBoundsException(); + } + + if (size + 1 > elementData.length) { + elementData = Arrays.copyOf(elementData, elementData.length * 3 / 2 + 1); + } + + System.arraycopy(elementData, index, elementData, index+1, size-index); + elementData[index] = o; + size++; + } + + public Object get(int index){ + if (index < 0 || index >= size) { + throw new IndexOutOfBoundsException(); + } + + return elementData[index]; + } + + public Object remove(int index){ + if (index < 0 || index >= size) { + throw new IndexOutOfBoundsException(); + } + + Object old = elementData[index]; + size--; + System.arraycopy(elementData, index+1, elementData, index, size-index); + elementData[size] = null; + + return old; + } + + public int size(){ + return size; + } + + public Iterator iterator(){ + return new Itr(); + } + + private class Itr implements Iterator { + + int cursor = 0; + + @Override + public boolean hasNext() { + return (cursor < size); + } + + @Override + public Object next() { + if (cursor < 0 || cursor >= size) { + throw new NoSuchElementException(); + } + return elementData[cursor++]; + } + + } + +} diff --git a/group08/619057560/2-26/code/com/coding/basic/BinaryTreeNode.java b/group08/619057560/2-26/code/com/coding/basic/BinaryTreeNode.java new file mode 100644 index 0000000000..af940807e6 --- /dev/null +++ b/group08/619057560/2-26/code/com/coding/basic/BinaryTreeNode.java @@ -0,0 +1,47 @@ +package com.coding.basic; + +public class BinaryTreeNode { + + private Object data; + private BinaryTreeNode left; + private BinaryTreeNode right; + + 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){ + if (data == null || ((Integer)data).intValue() == ((Integer)o).intValue()) { + data = o; + return this; + } + else if (((Integer)o).intValue() < ((Integer)data).intValue()) { + if (left == null) { + left = new BinaryTreeNode(); + } + return left.insert(o); + } + else { + if (right == null) { + right = new BinaryTreeNode(); + } + return right.insert(o); + } + } + +} diff --git a/group08/619057560/2-26/code/com/coding/basic/Iterator.java b/group08/619057560/2-26/code/com/coding/basic/Iterator.java new file mode 100644 index 0000000000..dbe8b9afb2 --- /dev/null +++ b/group08/619057560/2-26/code/com/coding/basic/Iterator.java @@ -0,0 +1,7 @@ +package com.coding.basic; + +public interface Iterator { + public boolean hasNext(); + public Object next(); + +} diff --git a/group08/619057560/2-26/code/com/coding/basic/LinkedList.java b/group08/619057560/2-26/code/com/coding/basic/LinkedList.java new file mode 100644 index 0000000000..d2f1422cfb --- /dev/null +++ b/group08/619057560/2-26/code/com/coding/basic/LinkedList.java @@ -0,0 +1,137 @@ +package com.coding.basic; + +import java.util.NoSuchElementException; + +public class LinkedList implements List { + + private Node head; + + public void add(Object o){ + Node pNewNode = new Node(); + pNewNode.data = o; + + Node pNode = head; + + if (head == null) { + head = pNewNode; + return; + } + + while (pNode.next != null) { + pNode = pNode.next; + } + + pNode.next = pNewNode; + } + + public void add(int index , Object o){ + if (index < 0 && index > size()) { + throw new IndexOutOfBoundsException(); + } + + Node pNewNode = new Node(); + pNewNode.data = o; + + if (index == 0) { + pNewNode.next = head; + head = pNewNode; + return; + } + + Node pNode = head; + while (--index > 0) { + pNode = pNode.next; + } + pNewNode.next = pNode.next; + pNode.next = pNewNode; + } + + public Object get(int index){ + if (index < 0 && index >= size()) { + throw new IndexOutOfBoundsException(); + } + + Node pNode = head; + while (index-- > 0) { + pNode = pNode.next; + } + + return pNode.data; + } + + public Object remove(int index){ + if (index < 0 && index >= size()) { + throw new IndexOutOfBoundsException(); + } + + Node pNode = head; + if (index == 0) { + head = head.next; + return pNode.data; + } + + while (--index > 0) { + pNode = pNode.next; + } + Node pTargetNode = pNode.next; + pNode.next = pTargetNode.next; + + return pTargetNode.data; + } + + public int size(){ + Node pNode = head; + int num = 0; + while (pNode != null) { + pNode = pNode.next; + num++; + } + return num; + } + + public void addFirst(Object o){ + add(0, o); + } + + public void addLast(Object o){ + add(o); + } + + public Object removeFirst(){ + if (head == null) { + throw new NoSuchElementException(); + } + return remove(0); + } + + public Object removeLast(){ + if (head == null) { + throw new NoSuchElementException(); + } + + Node pNode = head; + Node pPrevNode = null; + while (pNode.next != null) { + pPrevNode = pNode; + pNode = pNode.next; + } + if (pPrevNode != null) { + pPrevNode.next = pNode.next; + } + else { + head = null; + } + return pNode.data; + } + + public Iterator iterator(){ + return null; + } + + + private static class Node{ + Object data; + Node next; + + } +} diff --git a/group08/619057560/2-26/code/com/coding/basic/List.java b/group08/619057560/2-26/code/com/coding/basic/List.java new file mode 100644 index 0000000000..396b1f6416 --- /dev/null +++ b/group08/619057560/2-26/code/com/coding/basic/List.java @@ -0,0 +1,9 @@ +package com.coding.basic; + +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(); +} diff --git a/group08/619057560/2-26/code/com/coding/basic/Queue.java b/group08/619057560/2-26/code/com/coding/basic/Queue.java new file mode 100644 index 0000000000..67a080f408 --- /dev/null +++ b/group08/619057560/2-26/code/com/coding/basic/Queue.java @@ -0,0 +1,22 @@ +package com.coding.basic; + +public class Queue { + + private LinkedList queueList = new LinkedList(); + + public void enQueue(Object o){ + queueList.addFirst(o); + } + + public Object deQueue(){ + return queueList.removeLast(); + } + + public boolean isEmpty(){ + return queueList.size() == 0; + } + + public int size(){ + return queueList.size(); + } +} diff --git a/group08/619057560/2-26/code/com/coding/basic/Stack.java b/group08/619057560/2-26/code/com/coding/basic/Stack.java new file mode 100644 index 0000000000..481c88bed7 --- /dev/null +++ b/group08/619057560/2-26/code/com/coding/basic/Stack.java @@ -0,0 +1,23 @@ +package com.coding.basic; + +public class Stack { + private ArrayList elementData = new ArrayList(); + + public void push(Object o){ + elementData.add(o); + } + + public Object pop(){ + return elementData.remove(elementData.size()-1); + } + + public Object peek(){ + return elementData.get(elementData.size()-1); + } + public boolean isEmpty(){ + return elementData.size() == 0; + } + public int size(){ + return elementData.size(); + } +} diff --git a/group08/619057560/2-26/code/com/coding/test/Main.java b/group08/619057560/2-26/code/com/coding/test/Main.java new file mode 100644 index 0000000000..c4b5b4b74d --- /dev/null +++ b/group08/619057560/2-26/code/com/coding/test/Main.java @@ -0,0 +1,103 @@ +package com.coding.test; + +import com.coding.basic.ArrayList; +import com.coding.basic.BinaryTreeNode; +import com.coding.basic.Iterator; +import com.coding.basic.LinkedList; +import com.coding.basic.Queue; +import com.coding.basic.Stack; + +public class Main { + + private static void printArrayList(ArrayList list) { + for (int i = 0; i < list.size(); i++) { + System.out.println(list.get(i)); + } + Iterator itr = list.iterator(); + while (itr.hasNext()) { + System.out.println(itr.next()); + } + } + + private static void printLinkedList(LinkedList list) { + for (int i = 0; i < list.size(); i++) { + System.out.println(list.get(i)); + } + } + + private static void printBinaryTree(BinaryTreeNode node) { + if (node == null) + return; + + printBinaryTree(node.getLeft()); + if (node.getData() != null) + System.out.println(node.getData()); + printBinaryTree(node.getRight()); + } + + private static void testArrayList() { + ArrayList arrayList = new ArrayList(); + arrayList.add(new Integer(1)); + arrayList.add(new Integer(2)); + arrayList.add(new Integer(3)); + arrayList.remove(2); + arrayList.add(new Integer(4)); + arrayList.add(0,new Integer(5)); + printArrayList(arrayList); + } + + private static void testLinkedList() { + LinkedList linkedList = new LinkedList(); + linkedList.add(new Integer(1)); + linkedList.add(new Integer(2)); + linkedList.add(new Integer(3)); + linkedList.remove(2); + linkedList.add(new Integer(4)); + linkedList.add(0,new Integer(5)); + linkedList.removeFirst(); + printLinkedList(linkedList); + } + + private static void testStack() { + Stack stack = new Stack(); + stack.push(new Integer(1)); + stack.push(new Integer(2)); + stack.push(new Integer(3)); + System.out.println(stack.peek()); + System.out.println(stack.peek()); + System.out.println(stack.pop()); + System.out.println(stack.pop()); + stack.push(new Integer(4)); + System.out.println(stack.pop()); + System.out.println(stack.pop()); + //System.out.println(stack.pop()); + } + + private static void testQueue() { + Queue queue = new Queue(); + queue.enQueue(new Integer(1)); + queue.enQueue(new Integer(2)); + queue.enQueue(new Integer(3)); + System.out.println(queue.deQueue()); + System.out.println(queue.deQueue()); + System.out.println(queue.deQueue()); + //System.out.println(queue.deQueue()); + } + + private static void testBinaryTree() { + BinaryTreeNode root = new BinaryTreeNode(); + root.insert(new Integer(4)); + root.insert(new Integer(3)); + root.insert(new Integer(5)); + root.insert(new Integer(1)); + root.insert(new Integer(8)); + root.insert(new Integer(2)); + root.insert(new Integer(7)); + root.insert(new Integer(6)); + printBinaryTree(root); + } + + public static void main(String[] args) { + testBinaryTree(); + } +} From b8e89d257415856e50253de0fd2a42987f19c3e9 Mon Sep 17 00:00:00 2001 From: stackwei Date: Sat, 25 Feb 2017 22:17:37 +0800 Subject: [PATCH 145/216] first commit homework of 2.19 --- .gitignore | 3 + .../1012075117/DataStructure219/.classpath | 6 + group16/1012075117/DataStructure219/.project | 17 ++ .../.settings/org.eclipse.jdt.core.prefs | 11 + .../com/stackwei/DataStructure/ArrayList.java | 94 +++++++++ .../stackwei/DataStructure/LinkedList.java | 194 ++++++++++++++++++ .../src/com/stackwei/DataStructure/List.java | 13 ++ .../src/com/stackwei/DataStructure/Queue.java | 52 +++++ .../src/com/stackwei/DataStructure/Stack.java | 59 ++++++ 9 files changed, 449 insertions(+) create mode 100644 group16/1012075117/DataStructure219/.classpath create mode 100644 group16/1012075117/DataStructure219/.project create mode 100644 group16/1012075117/DataStructure219/.settings/org.eclipse.jdt.core.prefs create mode 100644 group16/1012075117/DataStructure219/src/com/stackwei/DataStructure/ArrayList.java create mode 100644 group16/1012075117/DataStructure219/src/com/stackwei/DataStructure/LinkedList.java create mode 100644 group16/1012075117/DataStructure219/src/com/stackwei/DataStructure/List.java create mode 100644 group16/1012075117/DataStructure219/src/com/stackwei/DataStructure/Queue.java create mode 100644 group16/1012075117/DataStructure219/src/com/stackwei/DataStructure/Stack.java diff --git a/.gitignore b/.gitignore index 359bdf7ae5..cedabad551 100644 --- a/.gitignore +++ b/.gitignore @@ -17,3 +17,6 @@ hs_err_pid* #ide config .metadata .recommenders + +#macOS +.DS_Store diff --git a/group16/1012075117/DataStructure219/.classpath b/group16/1012075117/DataStructure219/.classpath new file mode 100644 index 0000000000..fceb4801b5 --- /dev/null +++ b/group16/1012075117/DataStructure219/.classpath @@ -0,0 +1,6 @@ + + + + + + diff --git a/group16/1012075117/DataStructure219/.project b/group16/1012075117/DataStructure219/.project new file mode 100644 index 0000000000..567baae65f --- /dev/null +++ b/group16/1012075117/DataStructure219/.project @@ -0,0 +1,17 @@ + + + DataStructure219 + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git a/group16/1012075117/DataStructure219/.settings/org.eclipse.jdt.core.prefs b/group16/1012075117/DataStructure219/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000000..3a21537071 --- /dev/null +++ b/group16/1012075117/DataStructure219/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,11 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/group16/1012075117/DataStructure219/src/com/stackwei/DataStructure/ArrayList.java b/group16/1012075117/DataStructure219/src/com/stackwei/DataStructure/ArrayList.java new file mode 100644 index 0000000000..a1d46a21d8 --- /dev/null +++ b/group16/1012075117/DataStructure219/src/com/stackwei/DataStructure/ArrayList.java @@ -0,0 +1,94 @@ +package com.stackwei.DataStructure; + +/** + * + * @author stackwei -2017.2.25 + * + */ +public class ArrayList implements List { + + private int flag = -1; + private static final int DEFAULT_CAPACITY = 1; + private Object[] elementData = new Object[DEFAULT_CAPACITY]; + + @Override + public void add(Object element) { + // 当要添加数据的位置已经超过数组长度时,增长数组长度 + if (size() + 1 == elementData.length) { + grow(); + } + elementData[flag + 1] = element; + flag++; + } + + @Override + public void add(int index, Object element) { + if (index < 0 || index > getFlag() + 1) { + System.out.println("在--" + index + "--添加的--" + element + "--无效,因为越界了!"); + return; + } + // 数组长度永远比已存数据大一个。 + if (size() + 1 == elementData.length) { + grow(); + } + elementData[index] = element; + if (index > getFlag()) { + flag++; + } + } + + @Override + public Object get(int index) { + if (index < 0 || index > getFlag()) { + System.out.print("在--" + index + "--的get无效,因为越界了!"); + return null; + } + return elementData[index]; + } + + @Override + public Object remove(int index) { + if (index < 0 || index > getFlag()) { + System.out.println("在--" + index + "--的remove无效,因为越界了!"); + return null; + } + Object oldValue = elementData[index]; + elementData[index] = null; + // 将删除处后面的数据往前移一格。 + Object[] data2 = new Object[elementData.length - 1]; + System.arraycopy(elementData, 0, data2, 0, getFlag()); + elementData = data2; + flag--; + return oldValue; + } + + @Override + public int size() { + return getFlag() + 1; + } + + public int getFlag() { + return flag; + } + + private void grow() { + Object[] data2 = new Object[elementData.length + 1]; + System.arraycopy(elementData, 0, data2, 0, getFlag() + 2);// 最后一个参数是需要复制的数据的数量。 + elementData = data2; + } + + /** + * 测试用例 + * + * @param args + */ + public static void main(String[] args) { + ArrayList al = new ArrayList(); + al.add(0, 99); + al.add(1, 100); + System.out.println(al.get(1)); + al.remove(1); + System.out.println(al.get(1)); + System.out.println(al.size()); + } +} \ No newline at end of file diff --git a/group16/1012075117/DataStructure219/src/com/stackwei/DataStructure/LinkedList.java b/group16/1012075117/DataStructure219/src/com/stackwei/DataStructure/LinkedList.java new file mode 100644 index 0000000000..a1c728f0a1 --- /dev/null +++ b/group16/1012075117/DataStructure219/src/com/stackwei/DataStructure/LinkedList.java @@ -0,0 +1,194 @@ +package com.stackwei.DataStructure; + +/** + * + * @author stackwei -2017.2.25 + * + */ +public class LinkedList implements List { + + private Node head = null; + private Node last = null; + private int size = 0; + + private static class Node { + Object item; + Node prev; + Node next; + + public Node(Node prev, Object item, Node next) { + this.prev = prev; + this.item = item; + this.next = next; + } + } + + @Override + public void add(Object element) { + addLast(element); + } + + @Override + public void add(int index, Object element) { + if (index < 0 || index > size) { + System.out.println("操作无效,越界了"); + return; + } + if (index == 0) { + addFirst(element); + return; + } + if (index == size) { + addLast(element); + return; + } + Node indexNode = node(index); + Node newNode = new Node(indexNode.prev, element, indexNode); + indexNode.prev.next = newNode; + indexNode.prev = newNode; + size++; + } + + @Override + public Object get(int index) { + if (index < 0 || index >= size) { + System.out.println("查询无效,越界了"); + return null; + } + if (index == 0) { + return head.item; + } + return node(index).item; + } + + @Override + public Object remove(int index) { + if (index < 0 || index > size) { + System.out.println("是空的,无法删除"); + return null; + } + if (index == 0) { + return removeFirst(); + } + if (index == size - 1) { + return removeLast(); + } + Node x = node(index); + final Object element = x.item; + final Node next = x.next; + final Node prev = x.prev; + + if (prev == null) { + head = next; + } else { + prev.next = next; + x.prev = null; + } + + if (next == null) { + last = prev; + } else { + next.prev = prev; + x.next = null; + } + + x.item = null; + size--; + return element; + } + + @Override + public int size() { + return size; + } + + private void addFirst(Object element) { + final Node f = head; + Node newNode = new Node(null, element, f); + head = newNode; + if (f == null) + last = newNode; + else + f.prev = newNode; + size++; + } + + public void addLast(Object element) { + if (head == null) { + addFirst(element); + } else { + Node newNode = new Node(last, element, null); + last.next = newNode; + last = newNode; + size++; + } + } + + public Object removeFirst() { + if (head == null) { + System.out.println("是空的,无法删除"); + return null; + } else { + Node x = head; + Node next = head.next; + Object element = x.item; + x.item = null; + x.next = null; + head = next; + if (next == null) + last = null; + else + x.prev = null; + size--; + return element; + } + } + + public Object removeLast() { + if (last == null) { + System.out.println("是空的,无法删除"); + return null; + } else { + final Node l = last; + final Object element = l.item; + final Node p = l.prev; + l.item = null; + l.prev = null; + last = p; + if (p == null) + head = null; + else + p.next = null; + size--; + return element; + } + } + + Node node(int index) { + if (index < (size >> 1)) { + Node x = head; + for (int i = 0; i < index; i++) + x = x.next; + return x; + } else { + Node x = last; + for (int i = size - 1; i > index; i--) + x = x.prev; + return x; + } + } + + /** + * 测试用例 + * + * @param args + */ + public static void main(String[] args) { + LinkedList ll = new LinkedList(); + ll.add(0, "xxx"); + ll.add(1, 111); + System.out.println(ll.size()); + System.out.println(ll.get(2)); + + } +} \ No newline at end of file diff --git a/group16/1012075117/DataStructure219/src/com/stackwei/DataStructure/List.java b/group16/1012075117/DataStructure219/src/com/stackwei/DataStructure/List.java new file mode 100644 index 0000000000..5226796141 --- /dev/null +++ b/group16/1012075117/DataStructure219/src/com/stackwei/DataStructure/List.java @@ -0,0 +1,13 @@ +package com.stackwei.DataStructure; + +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(); +} diff --git a/group16/1012075117/DataStructure219/src/com/stackwei/DataStructure/Queue.java b/group16/1012075117/DataStructure219/src/com/stackwei/DataStructure/Queue.java new file mode 100644 index 0000000000..4a227495e9 --- /dev/null +++ b/group16/1012075117/DataStructure219/src/com/stackwei/DataStructure/Queue.java @@ -0,0 +1,52 @@ +package com.stackwei.DataStructure; + +/** + * + * @author stackwei -2017.2.25 + * + */ +public class Queue { + + private LinkedList ll = new LinkedList(); + + /** + * 在队尾添加数据 + * @param element + */ + public void enQueue(Object element) { + ll.addLast(element); + } + + /** + * 删除队头数据 + * @return + */ + public Object deQueue() { + return ll.removeFirst(); + } + + /** + * 队列是否为空 + * @return + */ + public boolean isEmpty() { + if (ll.size() > 0) { + return false; + } + return true; + } + + /** + * 测试用例 + * @param args + */ + public static void main(String[] args) { + Queue q = new Queue(); + q.enQueue(97); + q.enQueue(98); + q.enQueue(99); + System.out.println(q.isEmpty()); + System.out.println(q.deQueue()); + } + +} diff --git a/group16/1012075117/DataStructure219/src/com/stackwei/DataStructure/Stack.java b/group16/1012075117/DataStructure219/src/com/stackwei/DataStructure/Stack.java new file mode 100644 index 0000000000..1b047ffafd --- /dev/null +++ b/group16/1012075117/DataStructure219/src/com/stackwei/DataStructure/Stack.java @@ -0,0 +1,59 @@ +package com.stackwei.DataStructure; + +/** + * + * @author stackwei -2017.2.25 + * + */ +public class Stack { + + private ArrayList al = new ArrayList(); + + /** + * 进栈 + * @param item + */ + public void push(Object item) { + al.add(item); + } + + /** + * 出栈 + * @return + */ + public Object pop() { + return al.remove(al.getFlag()); + } + + /** + * 获取栈顶元素 + * @return + */ + public Object peek() { + return al.get(al.getFlag()); + } + + /** + * 栈是否为空 + * @return + */ + public boolean isEmpty() { + if (al.getFlag() >= 0) { + return false; + } + return true; + } + + /** + * 测试用例 + * @param args + */ + public static void main(String[] args) { + Stack s = new Stack(); + s.push(98); + s.push(99); + s.pop(); + System.out.println(s.peek()); + } + +} From 2cb6d5c17be0e357a77d01f68ef0a43ba4db7cb3 Mon Sep 17 00:00:00 2001 From: 240094626 Date: Sat, 25 Feb 2017 22:24:25 +0800 Subject: [PATCH 146/216] 'update' --- .../src/com/coding/basic/impl/ArrayList.java | 2 +- .../src/com/coding/basic/impl/BinaryTree.java | 82 +++++++++++++++++++ 2 files changed, 83 insertions(+), 1 deletion(-) create mode 100644 group17/240094626/warm-up/src/com/coding/basic/impl/BinaryTree.java diff --git a/group17/240094626/warm-up/src/com/coding/basic/impl/ArrayList.java b/group17/240094626/warm-up/src/com/coding/basic/impl/ArrayList.java index 666a691101..c20eb376d4 100644 --- a/group17/240094626/warm-up/src/com/coding/basic/impl/ArrayList.java +++ b/group17/240094626/warm-up/src/com/coding/basic/impl/ArrayList.java @@ -155,7 +155,7 @@ public boolean hasNext() { @Override public Object next() { - Object o = data[index++]; + Object o = get(index++); return o; } diff --git a/group17/240094626/warm-up/src/com/coding/basic/impl/BinaryTree.java b/group17/240094626/warm-up/src/com/coding/basic/impl/BinaryTree.java new file mode 100644 index 0000000000..d9478146bd --- /dev/null +++ b/group17/240094626/warm-up/src/com/coding/basic/impl/BinaryTree.java @@ -0,0 +1,82 @@ +package com.coding.basic.impl; + + +/** + * 二叉树简单实现(key为int类型) + * @author 240094626 + * + */ +public class BinaryTree { + private Node rootNode = null; + + public Node insert(int key){ + return insert(key,null); + } + + public Node insert(int key ,Object o){ + Node newNode = new Node(key, o); + if(rootNode == null){ + rootNode = newNode; + return rootNode; + } + Node fatherNode = rootNode; + Node currentNode = rootNode; + while(currentNode != null){ + fatherNode = currentNode; + if(key < currentNode.key){ + currentNode = currentNode.left; + }else{ + currentNode = currentNode.right; + } + } + if(key < fatherNode.key){ + fatherNode.left = newNode; + }else{ + fatherNode.right = newNode; + } + return newNode; + } + + public Node getNode(int key){ + return get(rootNode, key); + } + + private Node get(Node n,int key){ + if(n == null){ + return null; + } + if(key < n.key){ + return get(n.left, key); + }else if(key > n.key){ + return get(n.left, key); + } + return null; + } + + + + + private static class Node{ + + int key; + Object data; + Node left; + Node right; + + public Node(int key, Object data) { + this.key = key; + this.data = data; + this.left = null; + this.right = null; + } + + @Override + public String toString() { + return "Node [key=" + key + ", data=" + data + "]"; + } + + + } + + +} From 3f68687ade8c854a9afda80cc12a807d8558363a Mon Sep 17 00:00:00 2001 From: haolipeng <1078285863@qq.com> Date: Sat, 25 Feb 2017 22:35:43 +0800 Subject: [PATCH 147/216] homework basic structor of java ,queue,linkedlist,stack,arraylist --- .../src/basicStruct/BasicStruct.java | 11 + .../src/simpleArrayList/SimpleArrayList.java | 140 +++++++++++++ .../simpleLinkedList/SimpleLinkedList.java | 197 ++++++++++++++++++ .../src/simpleQueue/SimpleQueue.java | 22 ++ .../src/simpleStack/SimpleStack.java | 44 ++++ 5 files changed, 414 insertions(+) create mode 100644 group18/1078285863/javaStudy/src/basicStruct/BasicStruct.java create mode 100644 group18/1078285863/javaStudy/src/simpleArrayList/SimpleArrayList.java create mode 100644 group18/1078285863/javaStudy/src/simpleLinkedList/SimpleLinkedList.java create mode 100644 group18/1078285863/javaStudy/src/simpleQueue/SimpleQueue.java create mode 100644 group18/1078285863/javaStudy/src/simpleStack/SimpleStack.java diff --git a/group18/1078285863/javaStudy/src/basicStruct/BasicStruct.java b/group18/1078285863/javaStudy/src/basicStruct/BasicStruct.java new file mode 100644 index 0000000000..1461dedf79 --- /dev/null +++ b/group18/1078285863/javaStudy/src/basicStruct/BasicStruct.java @@ -0,0 +1,11 @@ +package basicStruct; +// + +public class BasicStruct { + + public static void main(String[] args) { + // TODO Auto-generated method stub + + } + +} diff --git a/group18/1078285863/javaStudy/src/simpleArrayList/SimpleArrayList.java b/group18/1078285863/javaStudy/src/simpleArrayList/SimpleArrayList.java new file mode 100644 index 0000000000..689fdccaf5 --- /dev/null +++ b/group18/1078285863/javaStudy/src/simpleArrayList/SimpleArrayList.java @@ -0,0 +1,140 @@ +package simpleArrayList; + +import java.util.ArrayList; +import java.util.Arrays; + +public class SimpleArrayList { + //洢array + private Object[] elementData; + + //Ĭ + public static final int default_capacity = 10; + + //arrayԪصĸ + private int size; + + //ĬϹ캯 + public SimpleArrayList(){ + //СĬΪ10 + this.elementData = new Object[default_capacity]; + } + + //ι캯,ԼָС + public SimpleArrayList(int initialCapacity) { + if(initialCapacity <= 0){ + //Ч + throw new IllegalArgumentException("IllegalArgument Error"); + } + if(initialCapacity < default_capacity) + { + initialCapacity = default_capacity; + } + + this.elementData = new Object[initialCapacity]; + } + + //Ԫ + public boolean Add(int index,Object o) + { + if(index > size || index <0) + { + return false; + } + + //Ԫ + for (int i = 0; i < size; i++) { + if(o.equals(elementData[i])) + { + //ƶԪصĸ + int nMove = size -index -1; + if(nMove > 0){ + System.arraycopy(elementData, index, elementData, index+1,nMove); + elementData[index] = null; + } + else { + return false; + } + } + } + + return true; + } + + //Ԫ + //ֵ:Ƿӳɹ + public boolean Add(Object obj) + { + if (null == obj) { + throw new IllegalArgumentException("invalid Argument!"); + } + //array + ensureCapacityInternal(size + 1); + + //βԪ = ֵ + elementData[size++] = obj; + + return true; + } + + public void clear() + { + //elementDataԪָNULL,ʹջ + for (int i = 0; i < elementData.length; i++) { + elementData[i] = null; + } + + //arrayԪظ + size = 0; + } + + //ƳarrayеԪ + public boolean remove(Object obj) + { + //elementData,Ԫ + for (int index = 0; index < size; index++) { + if(obj.equals(elementData[index]))//Ƿ + { + fastRemove(index); + return true; + } + } + return false; + } + + private void fastRemove(int index) { + //ƶԪصĸ + int numMoved = size - index - 1; + if (numMoved > 0) + //indexԴǰƶ + System.arraycopy(elementData, index+1, elementData, index,numMoved); + elementData[--size] = null; + } + + //ԪܴС + public int size() { + return size; + } + + public Object get(int index) { + //У + if(index > size || index < 0) + throw new IllegalArgumentException(); + + return elementData[index]; + } + + //漰ݿռ,ʱȲ + private void ensureCapacityInternal(int minCapacity) { + //,ǰ޷ʱ,Ƿ񳬹˵ǰij + System.out.println("element data length is "+elementData.length); + if(minCapacity - elementData.length > 0) + { + //Ϊǰ1.5 + int oldCapacity = elementData.length; + int newCapacity = oldCapacity *3/2; + + //ڲ,elementDataԪؿ + elementData = Arrays.copyOf(elementData, newCapacity); + } + } +} diff --git a/group18/1078285863/javaStudy/src/simpleLinkedList/SimpleLinkedList.java b/group18/1078285863/javaStudy/src/simpleLinkedList/SimpleLinkedList.java new file mode 100644 index 0000000000..0f11532723 --- /dev/null +++ b/group18/1078285863/javaStudy/src/simpleLinkedList/SimpleLinkedList.java @@ -0,0 +1,197 @@ +package simpleLinkedList; + +import java.util.Iterator; +import java.util.LinkedList; + +import javax.sound.sampled.Line; + +public class SimpleLinkedList { + //LinkedList + private int size = 0; + private Node head = null; + private Node tail = null; + + private static class Node{ + Object data; + Node next;//ָһԪ + Node prev; //ָǰһԪ + } + + public void add(Object o){ + addLast(o); + } + public void add(int index , Object o){ + //ҵindexλõԪ + Node tmp = null; + for (int i = 0; i < index; i++) { + tmp = tmp.next; + } + + Node pre = tmp.prev; + Node next = tmp.next; + + if (null == pre) { + addFirst(o); //ͷ + } + else if(null == next){ + addLast(o); //β + } + else { + add(o); + } + } + public Object get(int index){ + if (index > size || index <0) { + throw new IllegalArgumentException(); + } + + Node temp = null; + for(int i=0;i queueList = new LinkedList(); + public void enQueue(Object o){ + queueList.add(o); + } + + public Object deQueue(){ + return queueList.removeFirst(); + } + + public boolean isEmpty(){ + return queueList.isEmpty(); + } + + public int size(){ + return queueList.size(); + } +} \ No newline at end of file diff --git a/group18/1078285863/javaStudy/src/simpleStack/SimpleStack.java b/group18/1078285863/javaStudy/src/simpleStack/SimpleStack.java new file mode 100644 index 0000000000..bfbea7b1db --- /dev/null +++ b/group18/1078285863/javaStudy/src/simpleStack/SimpleStack.java @@ -0,0 +1,44 @@ +package simpleStack; + +import java.util.ArrayList; + +public class SimpleStack { +private ArrayList elementData = new ArrayList(); + + public void push(Object o){ + elementData.add(o); + } + + public Object pop(){ + //ж϶ǷΪ + Object obj = peek(); + if(obj != null) + { + elementData.remove(obj); + return obj; + } + else { + return null; + } + } + + public Object peek(){ + if(elementData.isEmpty()){ + return null; + } + else { + int lastIndex = elementData.size() -1; + Object obj = elementData.get(lastIndex); + return obj; + } + + } + public boolean isEmpty(){ + boolean bEmpty = false; + bEmpty = elementData.isEmpty()?true:false; + return bEmpty; + } + public int size(){ + return elementData.size(); + } +} From cae5cf88c47e772beab75c5e468e1e7c4c728423 Mon Sep 17 00:00:00 2001 From: Great Date: Sat, 25 Feb 2017 22:57:38 +0800 Subject: [PATCH 148/216] submit homework.875325254.2-26 --- group08/875325254/2-26/ArrayList.java | 37 ++++++++++++++ group08/875325254/2-26/LinkList.java | 73 +++++++++++++++++++++++++++ group08/875325254/2-26/Queue.java | 41 +++++++++++++++ group08/875325254/2-26/Stack.java | 29 +++++++++++ group08/875325254/2-26/Test.java | 35 +++++++++++++ 5 files changed, 215 insertions(+) create mode 100644 group08/875325254/2-26/ArrayList.java create mode 100644 group08/875325254/2-26/LinkList.java create mode 100644 group08/875325254/2-26/Queue.java create mode 100644 group08/875325254/2-26/Stack.java create mode 100644 group08/875325254/2-26/Test.java diff --git a/group08/875325254/2-26/ArrayList.java b/group08/875325254/2-26/ArrayList.java new file mode 100644 index 0000000000..d90caa7d50 --- /dev/null +++ b/group08/875325254/2-26/ArrayList.java @@ -0,0 +1,37 @@ +import java.util.Arrays; + +/** + * Created by Great on 2017/2/25. + */ +public class ArrayList { + private final int DEFAULT_SIZE = 20; + int[] array = new int[DEFAULT_SIZE]; + int size = 0; + public void add(int e) { + if (size == array.length) { + array = Arrays.copyOf(array, array.length + DEFAULT_SIZE); + } + array[size] = e; + ++size; + } + + public Integer get(int i) { + if(i < 0 || i >= size) return null; + return array[i]; + } + + public int size() { + return size; + } + + public void remove(int i) { + if (i < 0 || i >= size) return; + for (int j = i; j < size; j++) { + array[j] = array[j + 1]; + } + --size; + } + public boolean isEmpty() { + return size == 0; + } +} diff --git a/group08/875325254/2-26/LinkList.java b/group08/875325254/2-26/LinkList.java new file mode 100644 index 0000000000..a6b785ee79 --- /dev/null +++ b/group08/875325254/2-26/LinkList.java @@ -0,0 +1,73 @@ +/** + * Created by Great on 2017/2/24. + */ +public class LinkList { + private class Node{ + Node next; + int data; + } + private Node rear; + private Node top; + private int size = 0; + public void add(int e) { + if (rear == null) { + rear = new Node(); + top = rear; + }else { + rear.next = new Node(); + rear = rear.next; + } + rear.data = e; + ++size; + } + + public Integer getReciprocal(int count) { + if (top == null || count < 1) return null; + Node node = top; + int size = 0; + while( node.next != null) { + node = node.next; + size++; + } + if (size+1 < count) return null; + return get(size+1-count); + } + + public Integer get(int i) { + if (i < 0 || i >= size) return null; + return getNode(i).data; + } + + public void remove(int i) { + if (i < 0 || i >= size) return; + if (i == 0 ) { + top = top.next; + return; + } + if (i == size - 1) { + getNode(i - 1).next = null; + } + Node front = getNode(i - 1); + Node back = getNode(i + 1); + front.next = back; + --size; + } + + private Node getNode(int i) { + if (i < 0 || i >= size) return null; + Node node = top; + for (int j = 0; j < size; j++) { + if (j == i) return node; + node = node.next; + } + return null; + } + + public int size() { + return size; + } + + public boolean isEmpty() { + return size == 0; + } +} diff --git a/group08/875325254/2-26/Queue.java b/group08/875325254/2-26/Queue.java new file mode 100644 index 0000000000..6e3b80d7d2 --- /dev/null +++ b/group08/875325254/2-26/Queue.java @@ -0,0 +1,41 @@ +import java.util.Arrays; + +/** + * Created by Great on 2017/2/23. + */ +public class Queue { + private class Node{ + Node next; + int data; + } + private int size; + private Node front; + private Node rear; + public void add(int e) { + if (front == null) { + front = new Node(); + rear = front; + }else { + front.next = new Node(); + front = front.next; + } + front.data = e; + ++size; + } + + public Integer poll() { + if (rear == null) return null; + int data = rear.data; + rear = rear.next; + --size; + return data; + } + + public boolean isEmpty() { + return size == 0; + } + + public int size() { + return size; + } +} diff --git a/group08/875325254/2-26/Stack.java b/group08/875325254/2-26/Stack.java new file mode 100644 index 0000000000..78b9884ccb --- /dev/null +++ b/group08/875325254/2-26/Stack.java @@ -0,0 +1,29 @@ +import java.util.Arrays; + +/** + * Created by Great on 2017/2/23. + */ +public class Stack { + private final int DEFAULT_SIZE = 20; + private int base; + private int top; + private int[] array = new int[DEFAULT_SIZE]; + public void push(Integer e) { + if (top == array.length){ + array = Arrays.copyOf(array, array.length + DEFAULT_SIZE); + } + array[top] = e; + ++top; + } + public Integer pop(){ + if (top == 0) return null; + top--; + return array[top]; + } + public int size() { + return top; + } + public boolean isEmpty(){ + return top == 0; + } +} diff --git a/group08/875325254/2-26/Test.java b/group08/875325254/2-26/Test.java new file mode 100644 index 0000000000..b397fd3e16 --- /dev/null +++ b/group08/875325254/2-26/Test.java @@ -0,0 +1,35 @@ +import java.util.List; + +/** + * Created by Great on 2017/2/23. + */ +public class Test { + public static void main(String[] args) { + ArrayList arrayList = new ArrayList(); + LinkList linkList = new LinkList(); + Queue queue = new Queue(); + Stack stack = new Stack(); + for (int i = 0; i < 10; i++) { + arrayList.add(i); + linkList.add(i); + queue.add(i); + stack.push(i); + } + System.out.println("ArrayList:"); + for (int i = 0; i < arrayList.size(); i++) { + System.out.println(arrayList.get(i)); + } + System.out.println("LinkList:"); + for (int i = 0; i < linkList.size(); i++) { + System.out.println(linkList.get(i)); + } + System.out.println("Queue:"); + while (!queue.isEmpty()) { + System.out.println(queue.poll()); + } + System.out.println("Stack:"); + while (!stack.isEmpty()) { + System.out.println(stack.pop()); + } + } +} From 7f588573ede56855c50f5eae45c52550bf619994 Mon Sep 17 00:00:00 2001 From: zhi <1536161030@qq.com> Date: Sat, 25 Feb 2017 23:02:52 +0800 Subject: [PATCH 149/216] 0226 update --- .../src/com/coding/basic/ArrayList.java | 10 ++- .../src/com/coding/basic/LinkedList.java | 37 ++++++++-- .../src/com/coding/basic/Queue.java | 15 +++- .../src/com/coding/basic/Stack.java | 29 ++++---- .../src/com/coding/test/ArrayListTest.java | 69 +++++++++++++++++++ .../com/coding/test/BinaryTreeNodeTest.java | 18 +++++ .../src/com/coding/test/LinkedListTest.java | 67 ++++++++++++++++++ .../src/com/coding/test/QueueTest.java | 46 +++++++++++++ .../src/com/coding/test/StackTest.java | 57 +++++++++++++++ 9 files changed, 322 insertions(+), 26 deletions(-) create mode 100644 group07/1536161030/src/com/coding/test/ArrayListTest.java create mode 100644 group07/1536161030/src/com/coding/test/BinaryTreeNodeTest.java create mode 100644 group07/1536161030/src/com/coding/test/LinkedListTest.java create mode 100644 group07/1536161030/src/com/coding/test/QueueTest.java create mode 100644 group07/1536161030/src/com/coding/test/StackTest.java diff --git a/group07/1536161030/src/com/coding/basic/ArrayList.java b/group07/1536161030/src/com/coding/basic/ArrayList.java index bc843efd99..1e84d8da31 100644 --- a/group07/1536161030/src/com/coding/basic/ArrayList.java +++ b/group07/1536161030/src/com/coding/basic/ArrayList.java @@ -11,7 +11,7 @@ public ArrayList(int size) { } public ArrayList() { - this.elementData = new Object[100]; + this.elementData = new Object[10]; } public void add(Object o) { @@ -25,7 +25,6 @@ public void add(int index, Object o) { System.arraycopy(elementData, index, elementData, index + 1, size - index); elementData[index] = o; size++; - } public Object get(int index) { @@ -71,7 +70,7 @@ public Object next() { //檢查下表越界 public void rangeCheckForAdd(int index) { if (index < 0 || index > size) - throw new RuntimeException("下标越界"); + throw new IndexOutOfBoundsException("下标越界"); } //数组是否满 @@ -86,6 +85,11 @@ public void resize(){ this.elementData = newElementData; newElementData = null; } + + public boolean isEmpty() { + + return size == 0; + } } diff --git a/group07/1536161030/src/com/coding/basic/LinkedList.java b/group07/1536161030/src/com/coding/basic/LinkedList.java index 0fb1a8726c..ddd7b4a943 100644 --- a/group07/1536161030/src/com/coding/basic/LinkedList.java +++ b/group07/1536161030/src/com/coding/basic/LinkedList.java @@ -3,24 +3,44 @@ public class LinkedList implements List { private Node head; - int size; - + private int size; + + public LinkedList(){ + this.head = null; + this.size = 0; + } + public void add(Object o) { Node newNode = new Node(o); - newNode.next = head.next; - head.next = newNode; + if(isEmpty()){ + head = newNode; + } + else{ + newNode.next = head; + head = newNode; + } size++; } public void add(int index, Object o) { + if (index < 0 || index > size) + throw new IndexOutOfBoundsException("下标越界"); + Node indexNode = node(index); + Node newNode = new Node(o); - newNode.next = indexNode.next; - indexNode.next = newNode; + if(isEmpty()){ + head = newNode; + }else { + newNode.next = indexNode; + indexNode = newNode; + } size++; } public Object get(int index) { + if (index < 0 || index > size) + throw new IndexOutOfBoundsException("下标越界"); return node(index).data; } @@ -103,7 +123,6 @@ public Node(Object data) { this.data = data; this.next = null; } - } Node node(int index) { @@ -112,4 +131,8 @@ Node node(int index) { x = x.next; return x; } + + public boolean isEmpty() { + return head ==null; + } } diff --git a/group07/1536161030/src/com/coding/basic/Queue.java b/group07/1536161030/src/com/coding/basic/Queue.java index 4a732d323f..b81b1f062b 100644 --- a/group07/1536161030/src/com/coding/basic/Queue.java +++ b/group07/1536161030/src/com/coding/basic/Queue.java @@ -12,7 +12,7 @@ public class Queue { private Object[] queue; public Queue() { - this.queue = new Object[100]; + this.queue = new Object[10]; this.size = 0 ; this.head = 0; this.tail = 0; @@ -30,7 +30,7 @@ public void enQueue(Object o) { public Object deQueue() { if(isEmpty()) - throw new RuntimeException("队列为空!"); + throw new IndexOutOfBoundsException("队列为空!"); Object old = queue[head]; queue[head] =null; head = (head + 1)% queue.length; @@ -38,7 +38,16 @@ public Object deQueue() { return old; } - + + public Object getHead(){ + return head; + } + + public Object getTail(){ + return tail; + } + + public boolean isEmpty() { return size == 0; } diff --git a/group07/1536161030/src/com/coding/basic/Stack.java b/group07/1536161030/src/com/coding/basic/Stack.java index 5412ebc14f..31f36e007c 100644 --- a/group07/1536161030/src/com/coding/basic/Stack.java +++ b/group07/1536161030/src/com/coding/basic/Stack.java @@ -1,38 +1,41 @@ package com.coding.basic; -import com.coding.basic.ArrayList; +import java.util.EmptyStackException; + public class Stack { - private ArrayList elementData; + private Object[] elementData; private int size; - private int top = 0; public Stack() { this.size = 0; - this.elementData = new ArrayList(20); + this.elementData = new Object[10]; } public void push(Object o) { - elementData.add(top, o); + if (o == null) + throw new RuntimeException("元素不可为NULL"); size++; + elementData[size -1]= o ; } public Object pop() { - elementData.remove(top); + if (isEmpty()) + throw new EmptyStackException(); + Object old = elementData[size - 1]; + elementData[size] = null; size--; - return elementData.get(top); + return old; } public Object peek() { - int len = size(); - if (len >= 0) { - return elementData.get(len - 1); - } - return null; + if (isEmpty()) + throw new EmptyStackException(); + return elementData[size -1]; } public boolean isEmpty() { - return false; + return size < 1; } public int size() { diff --git a/group07/1536161030/src/com/coding/test/ArrayListTest.java b/group07/1536161030/src/com/coding/test/ArrayListTest.java new file mode 100644 index 0000000000..883687c6ff --- /dev/null +++ b/group07/1536161030/src/com/coding/test/ArrayListTest.java @@ -0,0 +1,69 @@ +package com.coding.test; + +import static org.junit.Assert.*; + +import org.junit.Test; + +import com.coding.basic.ArrayList; + +public class ArrayListTest { + + @Test + public void testAddObject() { + ArrayList al = new ArrayList(); + assertEquals(10, al.size()); + al.add(new Integer(1)); + System.out.print(al.get(0)); + } + + @Test + public void testAddIntObject() { + ArrayList al = new ArrayList(); + al.add(0, new Integer(1)); + assertEquals(10, al.size()); + int tmp = 0; + try { + al.add(4, new Integer(4)); + } catch (IndexOutOfBoundsException e) { + tmp = 1; + assertEquals(tmp, 1); + } + + } + + @Test + public void testGet() { + ArrayList al = new ArrayList(); + al.add(new Integer(1)); + assertEquals((Integer)al.get(0),new Integer(1)); + int tmp = 0; + try { + al.get(4); + } catch (IndexOutOfBoundsException e) { + tmp = 1; + assertEquals(tmp, 1); + } + } + + @Test + public void testRemove() { + ArrayList al = new ArrayList(); + al.add(new Integer(1)); + assertEquals((Integer)al.get(0),new Integer(1)); + assertEquals(al.size(),10); + } + + @Test + public void testSize() { + ArrayList al = new ArrayList(); + assertEquals(10, al.size()); + } + + @Test + public void testIsEmpty() { + ArrayList al = new ArrayList(); + assertTrue(al.isEmpty()); + al.add(new Integer(1)); + assertFalse(al.isEmpty()); + } +} diff --git a/group07/1536161030/src/com/coding/test/BinaryTreeNodeTest.java b/group07/1536161030/src/com/coding/test/BinaryTreeNodeTest.java new file mode 100644 index 0000000000..fbd2424714 --- /dev/null +++ b/group07/1536161030/src/com/coding/test/BinaryTreeNodeTest.java @@ -0,0 +1,18 @@ +package com.coding.test; + +import static org.junit.Assert.*; + +import org.junit.Test; + +import com.coding.basic.BinaryTreeNode; +import com.coding.basic.LinkedList; + +public class BinaryTreeNodeTest { + + @Test + public void testAddObject() { + BinaryTreeNode bt = new BinaryTreeNode(null); + bt.insert(new Integer(1)); + assertNotNull(bt); + } +} diff --git a/group07/1536161030/src/com/coding/test/LinkedListTest.java b/group07/1536161030/src/com/coding/test/LinkedListTest.java new file mode 100644 index 0000000000..5055bf92fb --- /dev/null +++ b/group07/1536161030/src/com/coding/test/LinkedListTest.java @@ -0,0 +1,67 @@ +package com.coding.test; + +import static org.junit.Assert.*; + +import org.junit.Test; + +import com.coding.basic.LinkedList; + +public class LinkedListTest{ + @Test + public void testAddObject() { + LinkedList list = new LinkedList(); + assertEquals(0, list.size()); + list.add(new Integer(1)); + assertEquals(1, list.size()); + } + + @Test + public void testAddIntObject() { + LinkedList list = new LinkedList(); + list.add(0, new Integer(1)); + assertEquals(1, list.size()); + int tmp = 0; + try { + list.add(4, new Integer(4)); + } catch (IndexOutOfBoundsException e) { + tmp = 1; + assertEquals(tmp, 1); + } + } + + @Test + public void testGet() { + LinkedList list = new LinkedList(); + list.add(new Object()); + assertNotNull(list.get(0)); + int tmp = 0; + try { + list.get(4); + } catch (IndexOutOfBoundsException e) { + tmp = 1; + assertEquals(tmp, 1); + } + } + + @Test + public void testRemove() { + LinkedList list = new LinkedList(); + list.add(new Object()); + list.remove(0); + assertEquals(list.size(),0); + } + + @Test + public void testSize() { + LinkedList list = new LinkedList(); + assertEquals(0, list.size()); + } + + @Test + public void testIsEmpty() { + LinkedList list = new LinkedList(); + assertTrue(list.isEmpty()); + list.add(new Object()); + assertFalse(list.isEmpty()); +} +} diff --git a/group07/1536161030/src/com/coding/test/QueueTest.java b/group07/1536161030/src/com/coding/test/QueueTest.java new file mode 100644 index 0000000000..dc0a547939 --- /dev/null +++ b/group07/1536161030/src/com/coding/test/QueueTest.java @@ -0,0 +1,46 @@ +package com.coding.test; + +import static org.junit.Assert.*; + +import org.junit.Test; + +import com.coding.basic.Queue; + +public class QueueTest { + + @Test + public void testEnQueue() { + Queue queue = new Queue(); + assertEquals(queue.size(), 0); + System.out.print(queue.getHead()); + } + + @Test + public void testDeQueue() { + Queue queue = new Queue(); + int tmp = 0; + try { + queue.deQueue(); + } catch (IndexOutOfBoundsException e) { + tmp = 1; + assertEquals(tmp, 1); + } + queue.enQueue(new Object()); + assertNotNull(queue.deQueue()); + } + + @Test + public void testIsEmpty() { + Queue queue = new Queue(); + assertTrue(queue.isEmpty()); + queue.enQueue(new Object()); + assertFalse(queue.isEmpty()); + } + + @Test + public void testSize() { + Queue queue = new Queue(); + assertEquals(queue.size(), 0); + } + +} diff --git a/group07/1536161030/src/com/coding/test/StackTest.java b/group07/1536161030/src/com/coding/test/StackTest.java new file mode 100644 index 0000000000..362f798f20 --- /dev/null +++ b/group07/1536161030/src/com/coding/test/StackTest.java @@ -0,0 +1,57 @@ +package com.coding.test; + +import static org.junit.Assert.*; + +import java.util.EmptyStackException; + +import org.junit.Test; + +import com.coding.basic.Stack; + +public class StackTest { + + @Test + public void testPush() { + Stack stack = new Stack(); + assertEquals(0, stack.size()); + stack.push(new Object()); + assertEquals(1, stack.size()); + } + + @Test + public void testPop() { + Stack stack = new Stack(); + stack.push(new Object()); + assertNotNull(stack.pop()); + assertEquals(0, stack.size()); + } + + @Test + public void testPeek() { + Stack stack = new Stack(); + int tmp = 0; + try { + stack.peek(); + } catch (EmptyStackException e) { + tmp = 1; + assertEquals(1, tmp); + } + stack.push(new Object()); + assertNotNull(stack.peek()); + assertEquals(1, stack.size()); + } + + @Test + public void testIsEmpty() { + Stack stack = new Stack(); + assertTrue(stack.isEmpty()); + stack.push(new Object()); + assertFalse(stack.isEmpty()); + } + + @Test + public void testSize() { + Stack stack = new Stack(); + assertEquals(0, stack.size()); + } +} From f1b48fccc7b9b6a85bd43fca47a3d31048c5c545 Mon Sep 17 00:00:00 2001 From: zhi <1536161030@qq.com> Date: Sat, 25 Feb 2017 23:09:06 +0800 Subject: [PATCH 150/216] 0226 update --- group07/1536161030/.settings/org.eclipse.core.resources.prefs | 2 ++ group07/1536161030/src/com/coding/basic/ArrayList.java | 4 ++-- group07/1536161030/src/com/coding/basic/LinkedList.java | 3 ++- group07/1536161030/src/com/coding/basic/Queue.java | 1 + group07/1536161030/src/com/coding/basic/Stack.java | 3 ++- group07/1536161030/src/com/coding/test/ArrayListTest.java | 1 + .../1536161030/src/com/coding/test/BinaryTreeNodeTest.java | 1 + group07/1536161030/src/com/coding/test/LinkedListTest.java | 1 + group07/1536161030/src/com/coding/test/QueueTest.java | 1 + group07/1536161030/src/com/coding/test/StackTest.java | 1 + 10 files changed, 14 insertions(+), 4 deletions(-) create mode 100644 group07/1536161030/.settings/org.eclipse.core.resources.prefs diff --git a/group07/1536161030/.settings/org.eclipse.core.resources.prefs b/group07/1536161030/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000000..4824b80263 --- /dev/null +++ b/group07/1536161030/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +encoding/=UTF-8 diff --git a/group07/1536161030/src/com/coding/basic/ArrayList.java b/group07/1536161030/src/com/coding/basic/ArrayList.java index 1e84d8da31..dfad793392 100644 --- a/group07/1536161030/src/com/coding/basic/ArrayList.java +++ b/group07/1536161030/src/com/coding/basic/ArrayList.java @@ -85,9 +85,9 @@ public void resize(){ this.elementData = newElementData; newElementData = null; } - + + // public boolean isEmpty() { - return size == 0; } diff --git a/group07/1536161030/src/com/coding/basic/LinkedList.java b/group07/1536161030/src/com/coding/basic/LinkedList.java index ddd7b4a943..fc3ed5afaf 100644 --- a/group07/1536161030/src/com/coding/basic/LinkedList.java +++ b/group07/1536161030/src/com/coding/basic/LinkedList.java @@ -131,7 +131,8 @@ Node node(int index) { x = x.next; return x; } - + + // public boolean isEmpty() { return head ==null; } diff --git a/group07/1536161030/src/com/coding/basic/Queue.java b/group07/1536161030/src/com/coding/basic/Queue.java index b81b1f062b..70f99dfd3e 100644 --- a/group07/1536161030/src/com/coding/basic/Queue.java +++ b/group07/1536161030/src/com/coding/basic/Queue.java @@ -57,6 +57,7 @@ public int size() { return diff; } + // public boolean isFull(){ return size == queue.length; } diff --git a/group07/1536161030/src/com/coding/basic/Stack.java b/group07/1536161030/src/com/coding/basic/Stack.java index 31f36e007c..233723755b 100644 --- a/group07/1536161030/src/com/coding/basic/Stack.java +++ b/group07/1536161030/src/com/coding/basic/Stack.java @@ -37,7 +37,8 @@ public Object peek() { public boolean isEmpty() { return size < 1; } - + + // public int size() { return size; } diff --git a/group07/1536161030/src/com/coding/test/ArrayListTest.java b/group07/1536161030/src/com/coding/test/ArrayListTest.java index 883687c6ff..482fe53cd8 100644 --- a/group07/1536161030/src/com/coding/test/ArrayListTest.java +++ b/group07/1536161030/src/com/coding/test/ArrayListTest.java @@ -6,6 +6,7 @@ import com.coding.basic.ArrayList; +// public class ArrayListTest { @Test diff --git a/group07/1536161030/src/com/coding/test/BinaryTreeNodeTest.java b/group07/1536161030/src/com/coding/test/BinaryTreeNodeTest.java index fbd2424714..dd2cde39b7 100644 --- a/group07/1536161030/src/com/coding/test/BinaryTreeNodeTest.java +++ b/group07/1536161030/src/com/coding/test/BinaryTreeNodeTest.java @@ -1,5 +1,6 @@ package com.coding.test; +// import static org.junit.Assert.*; import org.junit.Test; diff --git a/group07/1536161030/src/com/coding/test/LinkedListTest.java b/group07/1536161030/src/com/coding/test/LinkedListTest.java index 5055bf92fb..fb0ed303ed 100644 --- a/group07/1536161030/src/com/coding/test/LinkedListTest.java +++ b/group07/1536161030/src/com/coding/test/LinkedListTest.java @@ -6,6 +6,7 @@ import com.coding.basic.LinkedList; +// public class LinkedListTest{ @Test public void testAddObject() { diff --git a/group07/1536161030/src/com/coding/test/QueueTest.java b/group07/1536161030/src/com/coding/test/QueueTest.java index dc0a547939..3130dbc808 100644 --- a/group07/1536161030/src/com/coding/test/QueueTest.java +++ b/group07/1536161030/src/com/coding/test/QueueTest.java @@ -6,6 +6,7 @@ import com.coding.basic.Queue; +// public class QueueTest { @Test diff --git a/group07/1536161030/src/com/coding/test/StackTest.java b/group07/1536161030/src/com/coding/test/StackTest.java index 362f798f20..3622e0cb68 100644 --- a/group07/1536161030/src/com/coding/test/StackTest.java +++ b/group07/1536161030/src/com/coding/test/StackTest.java @@ -8,6 +8,7 @@ import com.coding.basic.Stack; +// public class StackTest { @Test From f4bcca7b430be0ae84bbe11dae10efede7172609 Mon Sep 17 00:00:00 2001 From: xiongyilun Date: Sat, 25 Feb 2017 23:09:43 +0800 Subject: [PATCH 151/216] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E5=88=B0=E6=9C=AC?= =?UTF-8?q?=E5=9C=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 2-26作业完成 --- group08/529757467/.classpath | 6 - group08/529757467/.gitignore | 1 - group08/529757467/.project | 17 --- .../com/coding/basic/ArrayList.java" | 92 +++++++++++ .../com/coding/basic/BinaryTreeNode.java" | 32 ++++ .../com/coding/basic/Iterator.java" | 7 + .../com/coding/basic/LinkedList.java" | 143 ++++++++++++++++++ .../com/coding/basic/List.java" | 9 ++ .../com/coding/basic/Queue.java" | 25 +++ .../com/coding/basic/Stack.java" | 30 ++++ .../com/coding/basic/Test.java" | 15 ++ ...4\346\210\220\345\216\237\347\220\206.doc" | Bin 0 -> 10240 bytes 12 files changed, 353 insertions(+), 24 deletions(-) delete mode 100644 group08/529757467/.classpath delete mode 100644 group08/529757467/.gitignore delete mode 100644 group08/529757467/.project create mode 100644 "group08/529757467/2017-02-26\344\275\234\344\270\232/com/coding/basic/ArrayList.java" create mode 100644 "group08/529757467/2017-02-26\344\275\234\344\270\232/com/coding/basic/BinaryTreeNode.java" create mode 100644 "group08/529757467/2017-02-26\344\275\234\344\270\232/com/coding/basic/Iterator.java" create mode 100644 "group08/529757467/2017-02-26\344\275\234\344\270\232/com/coding/basic/LinkedList.java" create mode 100644 "group08/529757467/2017-02-26\344\275\234\344\270\232/com/coding/basic/List.java" create mode 100644 "group08/529757467/2017-02-26\344\275\234\344\270\232/com/coding/basic/Queue.java" create mode 100644 "group08/529757467/2017-02-26\344\275\234\344\270\232/com/coding/basic/Stack.java" create mode 100644 "group08/529757467/2017-02-26\344\275\234\344\270\232/com/coding/basic/Test.java" create mode 100644 "group08/529757467/2017-02-26\344\275\234\344\270\232/\350\256\241\347\256\227\346\234\272\347\273\204\346\210\220\345\216\237\347\220\206.doc" diff --git a/group08/529757467/.classpath b/group08/529757467/.classpath deleted file mode 100644 index fb5011632c..0000000000 --- a/group08/529757467/.classpath +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/group08/529757467/.gitignore b/group08/529757467/.gitignore deleted file mode 100644 index ae3c172604..0000000000 --- a/group08/529757467/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/bin/ diff --git a/group08/529757467/.project b/group08/529757467/.project deleted file mode 100644 index dffcfb2808..0000000000 --- a/group08/529757467/.project +++ /dev/null @@ -1,17 +0,0 @@ - - - 529757467 - - - - - - org.eclipse.jdt.core.javabuilder - - - - - - org.eclipse.jdt.core.javanature - - diff --git "a/group08/529757467/2017-02-26\344\275\234\344\270\232/com/coding/basic/ArrayList.java" "b/group08/529757467/2017-02-26\344\275\234\344\270\232/com/coding/basic/ArrayList.java" new file mode 100644 index 0000000000..4e31d64920 --- /dev/null +++ "b/group08/529757467/2017-02-26\344\275\234\344\270\232/com/coding/basic/ArrayList.java" @@ -0,0 +1,92 @@ +package com.coding.basic; + +public class ArrayList implements List { + // size不仅是ArrayList中实际存值得体现,直接add时,也是在elementData[size]处进行 + private int size = 0; + // 数组是连续且有序的 + private Object[] elementData; + + private void resize(int newSize) { + Object[] newArray = new Object[newSize]; + System.arraycopy(elementData, 0, newArray, 0, size); + elementData = newArray; + } + + public ArrayList() { + elementData = new Object[10]; + } + + // 添加指定元素至列表尾 + public void add(Object o) { + if (size == elementData.length) { + resize(size * 2); + } + elementData[size++] = o; + } + + // 将指定元素插入列表中的指定位置。移动当前位置的元素(如果有的话)和右边的后续元素(向索引添加一个元素) + public void add(int index, Object o) { + rangeCheck(index); + if (size == elementData.length / 4) { + resize(elementData.length / 2); + } + System.arraycopy(elementData, index, elementData, index + 1, size - index); + elementData[index] = o; + size++; + } + + /* + * 获取指定位置元素 + * (non-Javadoc) + * @see com.coding.basic.List#get(int) + */ + public Object get(int index) { + rangeCheck(index); + return elementData[index]; + } + + /* + * 删除指定位置元素 + * (non-Javadoc) + * @see com.coding.basic.List#remove(int) + */ + public Object remove(int index) { + rangeCheck(index); + Object oldValue = elementData[index]; + System.arraycopy(elementData, index + 1, elementData, index, size - index - 1); + size--; + return oldValue; + } + + public int size() { + return this.size; + } + + public Iterator iterator() { + return new ArrayListIterator(); + } + + // 检测索引值,当前有size个元素,占了elementData[0]至elementData[size-1],add时,只能在已有[0,size-1]处插入,或者在列表尾size处add + // 所以index在[0,size之间] + private void rangeCheck(int index) { + if (index < 0 || index > size) { + throw new IndexOutOfBoundsException(); + } + } + + class ArrayListIterator implements Iterator { + int i = 0; + + @Override + public boolean hasNext() { + return i < size; + } + + @Override + public Object next() { + return elementData[i++]; + } + + } + +} diff --git "a/group08/529757467/2017-02-26\344\275\234\344\270\232/com/coding/basic/BinaryTreeNode.java" "b/group08/529757467/2017-02-26\344\275\234\344\270\232/com/coding/basic/BinaryTreeNode.java" new file mode 100644 index 0000000000..d7ac820192 --- /dev/null +++ "b/group08/529757467/2017-02-26\344\275\234\344\270\232/com/coding/basic/BinaryTreeNode.java" @@ -0,0 +1,32 @@ +package com.coding.basic; + +public class BinaryTreeNode { + + private Object data; + private BinaryTreeNode left; + private BinaryTreeNode right; + + 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){ + return null; + } + +} diff --git "a/group08/529757467/2017-02-26\344\275\234\344\270\232/com/coding/basic/Iterator.java" "b/group08/529757467/2017-02-26\344\275\234\344\270\232/com/coding/basic/Iterator.java" new file mode 100644 index 0000000000..06ef6311b2 --- /dev/null +++ "b/group08/529757467/2017-02-26\344\275\234\344\270\232/com/coding/basic/Iterator.java" @@ -0,0 +1,7 @@ +package com.coding.basic; + +public interface Iterator { + public boolean hasNext(); + public Object next(); + +} diff --git "a/group08/529757467/2017-02-26\344\275\234\344\270\232/com/coding/basic/LinkedList.java" "b/group08/529757467/2017-02-26\344\275\234\344\270\232/com/coding/basic/LinkedList.java" new file mode 100644 index 0000000000..b036d5ba91 --- /dev/null +++ "b/group08/529757467/2017-02-26\344\275\234\344\270\232/com/coding/basic/LinkedList.java" @@ -0,0 +1,143 @@ +package com.coding.basic; + +public class LinkedList implements List { + + private int size = 0; + // 头结点 + private Node head; + // 尾结点 + private Node tail; + + private void rangeCheck(int index) { + if (index < 0 || index > size) { + throw new IndexOutOfBoundsException(); + } + } + + public void add(Object o) { + Node node = new Node(o, null); + if (head == null) { + head = tail = node; + } + Node oldTail = tail; + tail = node; + oldTail.next = tail; + size++; + } + + public void add(int index, Object o) { + rangeCheck(index); + if (index == size) { + this.add(o); + } else { + // 保存index处节点 + Node x = head; + // 保存index-1处的节点 + Node y = null; + for (int i = 0; i < index; i++) { + y = x; + x = x.next; + } + Node node = new Node(o, x); + y.next = node; + size++; + } + } + + public Object get(int index) { + rangeCheck(index); + Node x = head; + for (int i = 0; i < index; i++) { + x = x.next; + } + return x.data; + } + + public Object remove(int index) { + rangeCheck(index); + Object removeData; + if (index == 0) { + removeData = removeFirst(); + } else if (index == size - 1) { + removeData = removeLast(); + } else { + Node x = head; + Node y = head; + for (int i = 0; i < index; i++) { + y = x; + x = x.next; + } + y.next = x.next; + size--; + removeData = x.data; + } + return removeData; + } + + public int size() { + return this.size; + } + + public void addFirst(Object o) { + Node oldHead = head; + head = new Node(o, oldHead); + size++; + } + + public void addLast(Object o) { + Node oldTail = tail; + tail = new Node(o, null); + oldTail.next = tail; + size++; + } + + public Object removeFirst() { + Node oldHead = head; + head = oldHead.next; + size--; + return oldHead.data; + } + + public Object removeLast() { + Node oldTail = tail; + Node temp = head; + for (int i = 0; i < size - 2; i++) { + temp = temp.next; + } + tail = temp; + size--; + return oldTail.data; + } + + public Iterator iterator() { + return new LinkedListIterator(); + } + + private static class Node { + Object data; + Node next; + + Node(Object data, Node next) { + this.data = data; + this.next = next; + } + + } + + private class LinkedListIterator implements Iterator { + Node x = head; + + @Override + public boolean hasNext() { + return x != null; + } + + @Override + public Object next() { + Object data = x.data; + x = x.next; + return data; + } + + } +} diff --git "a/group08/529757467/2017-02-26\344\275\234\344\270\232/com/coding/basic/List.java" "b/group08/529757467/2017-02-26\344\275\234\344\270\232/com/coding/basic/List.java" new file mode 100644 index 0000000000..10d13b5832 --- /dev/null +++ "b/group08/529757467/2017-02-26\344\275\234\344\270\232/com/coding/basic/List.java" @@ -0,0 +1,9 @@ +package com.coding.basic; + +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(); +} diff --git "a/group08/529757467/2017-02-26\344\275\234\344\270\232/com/coding/basic/Queue.java" "b/group08/529757467/2017-02-26\344\275\234\344\270\232/com/coding/basic/Queue.java" new file mode 100644 index 0000000000..5190e1b798 --- /dev/null +++ "b/group08/529757467/2017-02-26\344\275\234\344\270\232/com/coding/basic/Queue.java" @@ -0,0 +1,25 @@ +package com.coding.basic; + +public class Queue { + private LinkedList linkedList; + + public Queue() { + linkedList = new LinkedList(); + } + + public void enQueue(Object o) { + linkedList.add(o); + } + + public Object deQueue() { + return linkedList.removeFirst(); + } + + public boolean isEmpty() { + return linkedList.size() == 0; + } + + public int size() { + return linkedList.size(); + } +} diff --git "a/group08/529757467/2017-02-26\344\275\234\344\270\232/com/coding/basic/Stack.java" "b/group08/529757467/2017-02-26\344\275\234\344\270\232/com/coding/basic/Stack.java" new file mode 100644 index 0000000000..a39871d1b4 --- /dev/null +++ "b/group08/529757467/2017-02-26\344\275\234\344\270\232/com/coding/basic/Stack.java" @@ -0,0 +1,30 @@ +package com.coding.basic; + +public class Stack { + + private LinkedList linkedList; + + public Stack() { + linkedList = new LinkedList(); + } + + public void push(Object o) { + linkedList.add(o); + } + + public Object pop() { + return linkedList.removeLast(); + } + + public Object peek() { + return linkedList.get(linkedList.size()-1); + } + + public boolean isEmpty() { + return linkedList.size() == 0; + } + + public int size() { + return linkedList.size(); + } +} diff --git "a/group08/529757467/2017-02-26\344\275\234\344\270\232/com/coding/basic/Test.java" "b/group08/529757467/2017-02-26\344\275\234\344\270\232/com/coding/basic/Test.java" new file mode 100644 index 0000000000..b26a11be8a --- /dev/null +++ "b/group08/529757467/2017-02-26\344\275\234\344\270\232/com/coding/basic/Test.java" @@ -0,0 +1,15 @@ +package com.coding.basic; + +public class Test { + public static void main(String[] args) { + LinkedList linkedList = new LinkedList(); + for (int i = 0; i < 10; i++) { + linkedList.add(i); + } + for (int i = 0; i < 10; i++) { + linkedList.removeLast(); + } + linkedList.removeLast(); + } + +} diff --git "a/group08/529757467/2017-02-26\344\275\234\344\270\232/\350\256\241\347\256\227\346\234\272\347\273\204\346\210\220\345\216\237\347\220\206.doc" "b/group08/529757467/2017-02-26\344\275\234\344\270\232/\350\256\241\347\256\227\346\234\272\347\273\204\346\210\220\345\216\237\347\220\206.doc" new file mode 100644 index 0000000000000000000000000000000000000000..f518f0f97f1d7664b6cdd3d193be3b614da48f28 GIT binary patch literal 10240 zcmeI1dr(x@9mmhTyTF1gtS=;JbX9_A6fbJ9n*-r_-5Ela85SJF(hMlWPCMX`IQ7w%x>}jWKxp{hqtmEELQd z9U2Kg=5v4NeSYVj-#K?V=j@qL-A8|(dO`G&rNSnz8}TAGB3(h4NO1|FBEa}{!!XQ5 zArKsvyXXz{z*f#N=gnZ{;=GAZ=ghM!C$j* zi-$!M^fvKr%x3hG43Du!&AlKtp1Xn&Z^);3#8lzuq~rhE5%{xWL)1UfOp6g-@ub*{ zze?HnW3ZwQ7HyL$&7uL}re2Noj${Z`q2IDs+R;0A;8==jCahn99;&4cwek(znmr5A zzcv17`{$baD7=xD%CXk`j}-%3-a981Bfr)Dxn?uDh#@qCuYz-8t$*$Z+yl7&xvp=v z{+ZA9KL(5i<3KVP4^qHAAQemiobr3YBrqAc!4xnROap1)K9CNkgA6bO%mnv?SztEE z1ap7}vcOz056lM-fNZb;ECh?dVvqwK1WUkDunc&>a_|ty1uMYAfKK};$ODf7j=;@rwo0g+(x?HE+r5fRXHHbCKxnP?E zwc|ma2tIdh>yg)x^}KBr@cPUM zD#R}MYZm-=9@fDE_;N1R$Xu*}MKUxW=?}o(+3@r%gytfoLFa<`2rUE}Qgf02RD>-E zMkNFJ59dLB=kz--W=?P&?12Bwy86=!{#<@%ZoL?x>1|a?*9-RB<0NXkS=o6iQ zzC<6RZ@mfVk8cCM&%Xdnzvu?^wf6yiEd=Omp8)P>?2Nx@9O1s{i?`xCw3X6#4y|~k zuUTndq-hVu(i}U-LdgK^lY0onUxNqj<(|NFhUxPK@SH;U&o+2y4ZdpC@Y9E&8&I+a zJ5w!kDE*C}!jMnPZDyH?ugE@}<9q7oI2z zyanEqat_Sw&!2Wj@{R8hQ~&mPR=**`phuW8P}s^pCIh4CA`nZPvHqWNu$Eu2XoYQZ zXP6Y$R=s72|I>=xhJFk7aF(K#F1UFb3Rhrx)T82TXnq-I!XAE=`xgygtx9}>8s(R# z|1vjAO~mgXbRgFOe}~+xtd*CKz$q?9$O`n{48E-J+r@q@iKZQXFQX|JZ5gX?>S*iS z$#Vbi{-Ybq1kCs=(G?voHH6;4CG1NRhtPP2%1~6{w0^`4l_3p}W6RFi=~}&_(?Z z-h+WpWmwfl;=jLK{B~U=G2+>6LquxIy9#Z|wjJB??G*OevejXTb@ z%&D{5HCv!X&lk70oO|K;?h!i!fWRvUOz~ zAKQPqUFem*N*}H4sJN(~4XkW4?Q;6h2ZSD1(i5Ch*S&VJJ~{Z~@{#%?@2Ufys?W+k z+SA(NG|V=cBYc-C%u!C+Q~=9pq3~5zs@hX~v!8f+ea$AP@kn7$@Ox#hs=fLrEr-fm zTMn1>_?^c2z^ba3+au?tqe3gW+@mKYQti2kxjDU){#WY{^hI=f&H%gQh&YqZtg9H2kZIdA8=>ns;l? zIo~~z6LT#xay2sYpUB9^k&!Erkq;sx!{Nbs1N@aR5OK4_~ z2=TxUCtEJy1{&~yBJeoa3j81l2C8SZYiT#iewlW@?)7ko;`zW(d6#0IFJfv`QN8Ke zTJyZLGRQ@`sV+5G-}YcV&uka39URC935 z?oa$oEJf)iT!Ynw^>(D0SB=cI1X~a;aLlKb7OCB^S#h+b-~vH8Ra`HPbNpkbuj_P4 z7t2}Jnsv;WUD&KwEt3^l$|^a()1v%Ag;@cz>=1v zrMwZgu0P~24j$>^vLob{gc$5r%P3riOMxyM!ae#$^HYlq75+P3GG} z8PJM|5B2hFq)}9nAnVaO?mGA-7Mck?I-D+dNSHNGj0kbsURM;{xp7-@h-Eeo)$kyB JSnk3%@L$n Date: Sat, 25 Feb 2017 23:10:32 +0800 Subject: [PATCH 152/216] =?UTF-8?q?2=5F26=E4=BD=9C=E4=B8=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- group08/1226637491/2_26/ArrayList.java | 95 +++++++++++++ group08/1226637491/2_26/LinkedList.java | 127 ++++++++++++++++++ group08/1226637491/2_26/Queue.java | 39 ++++++ group08/1226637491/2_26/Stack.java | 44 ++++++ ...0\347\232\204\347\275\221\345\235\200.txt" | 1 + group08/1226637491/haha.txt | 1 - 6 files changed, 306 insertions(+), 1 deletion(-) create mode 100644 group08/1226637491/2_26/ArrayList.java create mode 100644 group08/1226637491/2_26/LinkedList.java create mode 100644 group08/1226637491/2_26/Queue.java create mode 100644 group08/1226637491/2_26/Stack.java create mode 100644 "group08/1226637491/2_26/\346\226\207\347\253\240\346\211\200\345\234\250\347\232\204\347\275\221\345\235\200.txt" delete mode 100644 group08/1226637491/haha.txt diff --git a/group08/1226637491/2_26/ArrayList.java b/group08/1226637491/2_26/ArrayList.java new file mode 100644 index 0000000000..1d4aaf7bc4 --- /dev/null +++ b/group08/1226637491/2_26/ArrayList.java @@ -0,0 +1,95 @@ +interface MyIterator{ + public boolean hasNext(); + public Object next(); + +} + + +public class ArrayList { +/* public static void main(String[] d){ + ArrayList p = new ArrayList(); + p.add("asd");p.add("123");p.add("123");p.add("234");p.add("456"); + p.remove(1); + p.add(1, 345); + MyIterator it = p.iterator(); + while(it.hasNext()){ + System.out.println(it.next().toString()); + } + } +*/ + + private int size = 0; + + private Object[] elementData = new Object[100]; + + public void add(Object o){ + if(size >= elementData.length){//鳤 + Object[] tem = new Object[elementData.length*2]; + for(int i=0;i= elementData.length){ + Object[] tem = new Object[elementData.length*2]; + for(int i=0;i=size){ + throw new IndexOutOfBoundsException(); + } + for(int i = index; i < size; i++){ + elementData[i-1] = elementData[i]; + } + size--; + return elementData[index]; + } + + public int size(){ + return size; + + } + + + class MMIt implements MyIterator{ + int loc = 0; + + public boolean hasNext() { + if(loc>=size) + return false; + else + return true; + } + + + public Object next() { + ++loc; + return elementData[loc-1]; + } + + } + + + public MyIterator iterator(){ + return new MMIt(); + } + +} \ No newline at end of file diff --git a/group08/1226637491/2_26/LinkedList.java b/group08/1226637491/2_26/LinkedList.java new file mode 100644 index 0000000000..4534272573 --- /dev/null +++ b/group08/1226637491/2_26/LinkedList.java @@ -0,0 +1,127 @@ + + +public class LinkedList { + + private Node head = new Node(); + private int size = 0; + + public void add(Object o){ + Node tem = new Node(); + tem.data = o; + tem.next = null; + Node temp = head; + int i = 0; + while(isize+1) + throw new IndexOutOfBoundsException(); + Node tem = new Node(); + tem.data = o; + tem.next = null; + ++size; + Node temp = head; + int i = 0; + while(isize+1) + throw new IndexOutOfBoundsException(); + --size; + Node temp = head; + int i = 0; + while(i Date: Sat, 25 Feb 2017 23:11:23 +0800 Subject: [PATCH 153/216] rm idea --- .idea/misc.xml | 20 -------------------- .idea/vcs.xml | 6 ------ 2 files changed, 26 deletions(-) delete mode 100644 .idea/misc.xml delete mode 100644 .idea/vcs.xml diff --git a/.idea/misc.xml b/.idea/misc.xml deleted file mode 100644 index 3c979f4745..0000000000 --- a/.idea/misc.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - 1.8 - - - - - - - - \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml deleted file mode 100644 index 35eb1ddfbb..0000000000 --- a/.idea/vcs.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file From 893df80755459aa366daa058850d8292fc8cd234 Mon Sep 17 00:00:00 2001 From: "176653813@163.com" <176653813@163.com> Date: Sat, 25 Feb 2017 23:12:20 +0800 Subject: [PATCH 154/216] 20170226 --- .../176653813/1766538130226Lesson/.classpath | 7 ++ .../176653813/1766538130226Lesson/.gitignore | 1 + .../176653813/1766538130226Lesson/.project | 17 ++++ .../.settings/org.eclipse.jdt.core.prefs | 11 +++ .../src/com/coding/basic/ArrayList.java | 80 ++++++++++++++++ .../src/com/coding/basic/LinkList.java | 96 +++++++++++++++++++ .../src/com/coding/basic/List.java | 9 ++ .../src/com/coding/basic/Queue.java | 35 +++++++ .../src/com/coding/basic/Stack.java | 41 ++++++++ .../src/com/coding/basic/Test.java | 36 +++++++ .../176653813/RemoteSystemsTempFiles/.project | 12 +++ 11 files changed, 345 insertions(+) create mode 100644 group17/176653813/1766538130226Lesson/.classpath create mode 100644 group17/176653813/1766538130226Lesson/.gitignore create mode 100644 group17/176653813/1766538130226Lesson/.project create mode 100644 group17/176653813/1766538130226Lesson/.settings/org.eclipse.jdt.core.prefs create mode 100644 group17/176653813/1766538130226Lesson/src/com/coding/basic/ArrayList.java create mode 100644 group17/176653813/1766538130226Lesson/src/com/coding/basic/LinkList.java create mode 100644 group17/176653813/1766538130226Lesson/src/com/coding/basic/List.java create mode 100644 group17/176653813/1766538130226Lesson/src/com/coding/basic/Queue.java create mode 100644 group17/176653813/1766538130226Lesson/src/com/coding/basic/Stack.java create mode 100644 group17/176653813/1766538130226Lesson/src/com/coding/basic/Test.java create mode 100644 group17/176653813/RemoteSystemsTempFiles/.project diff --git a/group17/176653813/1766538130226Lesson/.classpath b/group17/176653813/1766538130226Lesson/.classpath new file mode 100644 index 0000000000..373dce4005 --- /dev/null +++ b/group17/176653813/1766538130226Lesson/.classpath @@ -0,0 +1,7 @@ + + + + + + + diff --git a/group17/176653813/1766538130226Lesson/.gitignore b/group17/176653813/1766538130226Lesson/.gitignore new file mode 100644 index 0000000000..ae3c172604 --- /dev/null +++ b/group17/176653813/1766538130226Lesson/.gitignore @@ -0,0 +1 @@ +/bin/ diff --git a/group17/176653813/1766538130226Lesson/.project b/group17/176653813/1766538130226Lesson/.project new file mode 100644 index 0000000000..96a5027846 --- /dev/null +++ b/group17/176653813/1766538130226Lesson/.project @@ -0,0 +1,17 @@ + + + 1766538130226Lesson + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git a/group17/176653813/1766538130226Lesson/.settings/org.eclipse.jdt.core.prefs b/group17/176653813/1766538130226Lesson/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000000..3a21537071 --- /dev/null +++ b/group17/176653813/1766538130226Lesson/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,11 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/group17/176653813/1766538130226Lesson/src/com/coding/basic/ArrayList.java b/group17/176653813/1766538130226Lesson/src/com/coding/basic/ArrayList.java new file mode 100644 index 0000000000..61df9ada90 --- /dev/null +++ b/group17/176653813/1766538130226Lesson/src/com/coding/basic/ArrayList.java @@ -0,0 +1,80 @@ +package com.coding.basic; + +public class ArrayList implements List { + + private int size = 0; + private Object[] obj = new Object[5]; + + @Override + public void add(Object o) { + if(this.size < 0 ) + System.out.print("Error"); + this.extend(100); + obj[this.size] = o; + this.size ++; + } + + @Override + public void add(int index, Object o) { + + if(index < 0) + System.out.println("Error"); + if(index < this.size){ + extend(100); + for(int i = this.size;i < index; i--){ + obj[i+1] = obj[i]; + } + obj[index] = o; + }else if(index >= size){ + extend(100); + obj[size] = o; + } + this.size++; + } + + @Override + public Object get(int index) { + if(index < 0 || index > size){ + System.out.println("Error"); + return null; + } + return obj[index]; + } + + @Override + public Object remove(int index) { + if(index < 0 || index > size){ + System.out.println("Error"); + return null; + } + for(int i = index;i <= size;i++){ + obj[i] = obj[i+1]; + } + size--; + return obj[index]; + } + + @Override + public int size() { + return size; + } + public int length(){ + return obj.length; + } + public void extend(int newLength){ + if (this.size >= obj.length){ + //չ + Object[] old = obj; + obj = new Object[size+newLength]; + for(int i = 0;i < size; i++){ + obj[i] = old[i]; + } + } + return; + } + public void Iteror(){ + for(int i = 0 ;i < size ; i++){ + System.out.println(obj[i]); + } + } +} diff --git a/group17/176653813/1766538130226Lesson/src/com/coding/basic/LinkList.java b/group17/176653813/1766538130226Lesson/src/com/coding/basic/LinkList.java new file mode 100644 index 0000000000..2f4e0e3067 --- /dev/null +++ b/group17/176653813/1766538130226Lesson/src/com/coding/basic/LinkList.java @@ -0,0 +1,96 @@ +package com.coding.basic; + +public class LinkList implements List{ + + private Node head; //ͷ㲻 + private static class Node{ + Object data; + Node next; + } + + @Override + public void add(Object o) { + //һû뵽 + if(null == head){ + head = new Node(); + head.next = null; + head.data = o; + }else{ + //β뷨 + //Node t = new Node(); + Node t; + Node ins = new Node(); + t = head; + while(t.next != null){ + t = t.next; + } + t.next = ins; + ins.next = null; + ins.data = o; + } + } + + @Override + public void add(int index, Object o) { + if(index < 0 ){ + System.out.println("Error"); + }else if(index == 0 || index == 1){ + Node t = new Node(); + t.next = head.next; + head.next = t; + t.data = o; + }else{ + Node t = new Node();//ǰڵ + Node p = new Node();//ǰһڵ + t = head.next; + for(int i = 1;i < index;i++){ + p = t; + t = t.next; + } + Node ins = new Node(); + p.next = ins; + ins.next = t; + ins.data = o; + } + + } + + @Override + public Object get(int index) { + if(index < 0 || head == null){ + System.out.println("Error"); + return null; + }else{ + Node t ; + t = head; + for(int i = 1;i < index;i++){ + t = t.next; + } + return t.data; + } + } + + @Override + public Object remove(int index) { + + return null; + } + + public void display(){ + if(head == null){ + System.out.println("No Data"); + }else{ + Node t ; + t = head; + while(t != null){ + System.out.println("******"+t.data); + t = t.next; + } + } + + } + @Override + public int size() { + return 0; + } +} diff --git a/group17/176653813/1766538130226Lesson/src/com/coding/basic/List.java b/group17/176653813/1766538130226Lesson/src/com/coding/basic/List.java new file mode 100644 index 0000000000..124fba53ec --- /dev/null +++ b/group17/176653813/1766538130226Lesson/src/com/coding/basic/List.java @@ -0,0 +1,9 @@ +package com.coding.basic; + +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(); +} diff --git a/group17/176653813/1766538130226Lesson/src/com/coding/basic/Queue.java b/group17/176653813/1766538130226Lesson/src/com/coding/basic/Queue.java new file mode 100644 index 0000000000..032b636962 --- /dev/null +++ b/group17/176653813/1766538130226Lesson/src/com/coding/basic/Queue.java @@ -0,0 +1,35 @@ +package com.coding.basic; + +public class Queue { + + private LinkList elementData = new LinkList(); + private int front = 0; + private int rear = 0; + + + public void enQueue(Object o){ + elementData.add(o); + rear++; + } + public Object deQueue(){ + if(!isEmpty()){ + Object obj = elementData.remove(front); + front++; + return obj; + }else{ + System.out.println("Queue is empty"); + return null; + } + } + public boolean isEmpty(){ + if(front > rear){ + return true; + } + return false; + } + + public int size(){ + return rear-front+1; + } +} + diff --git a/group17/176653813/1766538130226Lesson/src/com/coding/basic/Stack.java b/group17/176653813/1766538130226Lesson/src/com/coding/basic/Stack.java new file mode 100644 index 0000000000..b902dea844 --- /dev/null +++ b/group17/176653813/1766538130226Lesson/src/com/coding/basic/Stack.java @@ -0,0 +1,41 @@ +package com.coding.basic; + +public class Stack { + + // + private ArrayList elementData = new ArrayList(); + private int top = 0; + + public void push(Object o){ + elementData.add(o); + top++; + } + + public Object pop(){ + if(!isEmpty()){ + System.out.println("stack is empoty"); + return null; + } + Object obj = elementData.remove(top); + top--; + return obj; + } + + public Object peek(){ + return elementData.get(top); + } + + public boolean isEmpty(){ + if(top != 0){ + return true; + } + return false; + } + + public int size(){ + return top++; + } + + + +} diff --git a/group17/176653813/1766538130226Lesson/src/com/coding/basic/Test.java b/group17/176653813/1766538130226Lesson/src/com/coding/basic/Test.java new file mode 100644 index 0000000000..6f48b4b4fd --- /dev/null +++ b/group17/176653813/1766538130226Lesson/src/com/coding/basic/Test.java @@ -0,0 +1,36 @@ +package com.coding.basic; + +import static org.junit.Assert.*; + +public class Test { + + @org.junit.Test + public void test() { + +/* ArrayList al = new ArrayList(); + al.add(1); + al.add(2); + al.add(3); + al.add(4); + al.add(5); + al.add(200); + al.add(10,100); + al.Iteror(); + //System.out.println(al.length()); + //System.out.println(al.size()); + System.out.println("=================="); + al.remove(0); + al.Iteror();*/ + + LinkList ls = new LinkList(); + ls.add(100); + ls.add(300); + ls.add(500); + ls.add(1000); + ls.add(3,2000); + ls.display(); + System.out.println(ls.get(4)); + } + +} + diff --git a/group17/176653813/RemoteSystemsTempFiles/.project b/group17/176653813/RemoteSystemsTempFiles/.project new file mode 100644 index 0000000000..5447a64fa9 --- /dev/null +++ b/group17/176653813/RemoteSystemsTempFiles/.project @@ -0,0 +1,12 @@ + + + RemoteSystemsTempFiles + + + + + + + org.eclipse.rse.ui.remoteSystemsTempNature + + From 8194932b61381446dd70d0f99f2119580c77710a Mon Sep 17 00:00:00 2001 From: totoro-fly Date: Sat, 25 Feb 2017 23:15:50 +0800 Subject: [PATCH 155/216] =?UTF-8?q?Update=20=E5=86=99=E4=B8=80=E7=AF=87?= =?UTF-8?q?=E6=96=87=E7=AB=A0=E4=BB=8B=E7=BB=8Dcpu,=20=E5=86=85=E5=AD=98,?= =?UTF-8?q?=20=E7=A3=81=E7=9B=98,=20=E6=8C=87=E4=BB=A4=E4=BB=A5=E5=8F=8A?= =?UTF-8?q?=E4=BB=96=E4=BB=AC=E4=B9=8B=E9=97=B4=E7=9A=84=E5=85=B3=E7=B3=BB?= =?UTF-8?q?=5F20170226.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...351\227\264\347\232\204\345\205\263\347\263\273_20170226.md" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/group17/article/\345\206\231\344\270\200\347\257\207\346\226\207\347\253\240\344\273\213\347\273\215cpu, \345\206\205\345\255\230, \347\243\201\347\233\230, \346\214\207\344\273\244\344\273\245\345\217\212\344\273\226\344\273\254\344\271\213\351\227\264\347\232\204\345\205\263\347\263\273_20170226.md" "b/group17/article/\345\206\231\344\270\200\347\257\207\346\226\207\347\253\240\344\273\213\347\273\215cpu, \345\206\205\345\255\230, \347\243\201\347\233\230, \346\214\207\344\273\244\344\273\245\345\217\212\344\273\226\344\273\254\344\271\213\351\227\264\347\232\204\345\205\263\347\263\273_20170226.md" index eee6b340dd..14217b5f64 100644 --- "a/group17/article/\345\206\231\344\270\200\347\257\207\346\226\207\347\253\240\344\273\213\347\273\215cpu, \345\206\205\345\255\230, \347\243\201\347\233\230, \346\214\207\344\273\244\344\273\245\345\217\212\344\273\226\344\273\254\344\271\213\351\227\264\347\232\204\345\205\263\347\263\273_20170226.md" +++ "b/group17/article/\345\206\231\344\270\200\347\257\207\346\226\207\347\253\240\344\273\213\347\273\215cpu, \345\206\205\345\255\230, \347\243\201\347\233\230, \346\214\207\344\273\244\344\273\245\345\217\212\344\273\226\344\273\254\344\271\213\351\227\264\347\232\204\345\205\263\347\263\273_20170226.md" @@ -14,7 +14,7 @@ 102228177 -876385982 +876385982 http://www.totoro-fly.com/?p=59 785396327 From e9a7f7af2a57dea698a02afcd13da39b119f94ff Mon Sep 17 00:00:00 2001 From: zoakerc Date: Sat, 25 Feb 2017 23:19:14 +0800 Subject: [PATCH 156/216] =?UTF-8?q?=E9=93=BE=E8=A1=A8=E5=AE=9E=E7=8E=B0Lin?= =?UTF-8?q?kedList?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../group7/homework/c0226/MyArrayList.java | 6 + .../group7/homework/c0226/MyLinkedList.java | 114 +++++++++++++++-- .../homework/c0226/MyArrayListTest.java | 46 +++---- .../homework/c0226/MyLinkedListTest.java | 120 ++++++++++++++++++ 4 files changed, 252 insertions(+), 34 deletions(-) rename group07/562247675/homework/homework-0226/src/{main => test}/java/com/coding2017/group7/homework/c0226/MyArrayListTest.java (50%) create mode 100644 group07/562247675/homework/homework-0226/src/test/java/com/coding2017/group7/homework/c0226/MyLinkedListTest.java diff --git a/group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/MyArrayList.java b/group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/MyArrayList.java index 00a0fb4a7e..57b6b0c7d4 100644 --- a/group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/MyArrayList.java +++ b/group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/MyArrayList.java @@ -8,6 +8,7 @@ public class MyArrayList implements MyList { private Object[] elementData = new Object[10]; + @Override public void add(Object o) { if (isFull()) { increase(); @@ -15,6 +16,7 @@ public void add(Object o) { elementData[size++] = o; } + @Override public void add(int index, Object o) { checkRange(index); if (isFull()) { @@ -25,11 +27,13 @@ public void add(int index, Object o) { size++; } + @Override public Object get(int index) { checkRange(index); return elementData[index]; } + @Override public Object remove(int index) { checkRange(index); Object element = elementData[index]; @@ -39,6 +43,7 @@ public Object remove(int index) { return element; } + @Override public int size() { return size; } @@ -80,6 +85,7 @@ public boolean hasNext() { @Override public Object next() { + checkRange(index); return elementData[index++]; } } diff --git a/group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/MyLinkedList.java b/group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/MyLinkedList.java index 945f476e96..a2f9c3746e 100644 --- a/group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/MyLinkedList.java +++ b/group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/MyLinkedList.java @@ -2,52 +2,144 @@ public class MyLinkedList implements MyList { - private Node head; + private Node head = new Node(); + private int size = 0; + @Override public void add(Object o) { - + Node node = new Node(); + node.data = o; + Node last = find(size - 1); + last.next = node; + size++; } + @Override public void add(int index, Object o) { - + checkRange(index); + Node insert = find(index); + Node before = find(index - 1); + Node node = new Node(); + node.data = o; + node.next = insert; + before.next = node; + size++; } + @Override public Object get(int index) { - return null; + checkRange(index); + return find(index).data; } + @Override public Object remove(int index) { - return null; + checkRange(index); + Node before = find(index - 1); + Node remove = find(index); + Node after = find(index + 1); + before.next = after; + size--; + return remove.data; } + @Override public int size() { - return -1; + return size; } public void addFirst(Object o) { - + Node node = new Node(); + node.data = o; + node.next = find(0); + head.next = node; + size++; } public void addLast(Object o) { - + Node last = find(size - 1); + Node node = new Node(); + node.data = o; + last.next = node; + size++; } public Object removeFirst() { - return null; + checkRange(size - 1); + Node remove = find(0); + head.next = find(1); + size--; + return remove.data; } public Object removeLast() { - return null; + checkRange(size - 1); + Node remove = find(size - 1); + Node before = find(size - 2); + before.next = null; + size--; + return remove.data; } public MyIterator iterator() { - return null; + return new MyLinkedListIterator(); + } + + private void checkRange(int index) { + if (index < 0 || index >= size) { + throw new IndexOutOfBoundsException("Index: " + index + ", Size:" + size); + } + } + + private Node find(int index) { + Node node = head; + int pos = -1; + while (pos < index) { + node = node.next; + pos++; + } + return node; } + @Override + public String toString() { + Node node = head; + StringBuilder sBuilder = new StringBuilder(); + while (node.next != null) { + node = node.next; + sBuilder.append(node.data).append(", "); + } + int length = sBuilder.length(); + if (length > 0) { + sBuilder.delete(length - 2, length); + } + return "[" + sBuilder.toString() + "]"; + } private static class Node { Object data; Node next; } + + + private class MyLinkedListIterator implements MyIterator { + + + private Node node = head; + private int size = 0; + + @Override + public boolean hasNext() { + return node.next != null; + } + + @Override + public Object next() { + checkRange(size); + node = node.next; + size++; + return node.data; + } + } } diff --git a/group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/MyArrayListTest.java b/group07/562247675/homework/homework-0226/src/test/java/com/coding2017/group7/homework/c0226/MyArrayListTest.java similarity index 50% rename from group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/MyArrayListTest.java rename to group07/562247675/homework/homework-0226/src/test/java/com/coding2017/group7/homework/c0226/MyArrayListTest.java index c196789c6d..6a74145e5b 100644 --- a/group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/MyArrayListTest.java +++ b/group07/562247675/homework/homework-0226/src/test/java/com/coding2017/group7/homework/c0226/MyArrayListTest.java @@ -10,71 +10,71 @@ @FixMethodOrder(MethodSorters.NAME_ASCENDING) public class MyArrayListTest { - private MyArrayList mylist = new MyArrayList(); - private final int mysize = 15; + private MyArrayList myList = new MyArrayList(); + private final int mySize = 15; @Before public void setUp() throws Exception { - for (int i = 0; i < mysize; i++) { - mylist.add(i); + for (int i = 0; i < mySize; i++) { + myList.add(i); } } @After public void tearDown() throws Exception { - for (int i = mylist.size(); i > 0; i--) { - mylist.remove(i - 1); + for (int i = myList.size(); i > 0; i--) { + myList.remove(i - 1); } - mylist = null; + myList = null; } @Test public void addLast() throws Exception { int element = -1; - mylist.add(element); - Assert.assertEquals(mylist.size(), mysize + 1); - Assert.assertTrue(mylist.get(mylist.size() - 1).equals(element)); + myList.add(element); + Assert.assertEquals(myList.size(), mySize + 1); + Assert.assertTrue(myList.get(myList.size() - 1).equals(element)); } @Test public void addIndex() throws Exception { - int index = mysize / 2; + int index = mySize / 2; int element = -1; - mylist.add(index, element); - Assert.assertTrue(mylist.get(index).equals(element)); - Assert.assertEquals(mylist.size(), mysize + 1); + myList.add(index, element); + Assert.assertTrue(myList.get(index).equals(element)); + Assert.assertEquals(myList.size(), mySize + 1); } @Test public void get() throws Exception { - Assert.assertTrue(mylist.get(0).equals(0)); + Assert.assertTrue(myList.get(0).equals(0)); } @Test public void remove() throws Exception { - int index = mysize / 2; - Object before = mylist.get(index + 1); - Object element = mylist.remove(index); - Object after = mylist.get(index); + int index = mySize / 2; + Object before = myList.get(index + 1); + Object element = myList.remove(index); + Object after = myList.get(index); Assert.assertTrue(before.equals(after)); - Assert.assertEquals(mylist.size(), mysize - 1); + Assert.assertEquals(myList.size(), mySize - 1); } @Test public void size() throws Exception { - Assert.assertEquals(mylist.size(), mysize); + Assert.assertEquals(myList.size(), mySize); } @Test public void iterator() throws Exception { - MyIterator iterator = mylist.iterator(); + MyIterator iterator = myList.iterator(); int count = 0; while (iterator.hasNext()) { iterator.next(); count++; } - Assert.assertEquals(mylist.size(), count); + Assert.assertEquals(mySize, count); } } \ No newline at end of file diff --git a/group07/562247675/homework/homework-0226/src/test/java/com/coding2017/group7/homework/c0226/MyLinkedListTest.java b/group07/562247675/homework/homework-0226/src/test/java/com/coding2017/group7/homework/c0226/MyLinkedListTest.java new file mode 100644 index 0000000000..1c2793972e --- /dev/null +++ b/group07/562247675/homework/homework-0226/src/test/java/com/coding2017/group7/homework/c0226/MyLinkedListTest.java @@ -0,0 +1,120 @@ +package com.coding2017.group7.homework.c0226; + +import org.junit.After; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; + +public class MyLinkedListTest { + + private MyLinkedList myList = new MyLinkedList(); + private final int mySize = 15; + + @Before + public void setUp() throws Exception { + for (int i = 0; i < mySize; i++) { + myList.add(i); + } + } + + @After + public void tearDown() throws Exception { + for (int i = myList.size(); i > 0; i--) { + myList.remove(i - 1); + } + myList = null; + } + + @Test + public void add() throws Exception { + myList.add(-1); + Assert.assertEquals(myList.size(), mySize + 1); + } + + @Test + public void addIndex() throws Exception { + int pos = mySize / 2; + Object before = myList.get(pos); + myList.add(pos, -1); + Object after = myList.get(pos + 1); + Assert.assertEquals(myList.size(), mySize + 1); + Assert.assertEquals(before, after); + } + + @Test + public void get() throws Exception { + Object get1 = myList.get(0); + Assert.assertTrue(get1.equals(myList.get(0))); + Object get2 = myList.get(mySize - 1); + Assert.assertTrue(get2.equals(myList.get(mySize - 1))); + } + + @Test + public void remove() throws Exception { + myList.remove(0); + myList.remove(myList.size() - 1); + myList.remove(myList.size() / 2); + Assert.assertEquals(myList.size(), mySize - 3); + } + + @Test + public void size() throws Exception { + Assert.assertEquals(myList.size(), mySize); + } + + @Test + public void addFirst() throws Exception { + myList.addFirst(-1); + myList.addFirst(-1); + myList.addFirst(-1); + Object o1 = myList.get(0); + Object o2 = myList.get(1); + Object o3 = myList.get(2); + Assert.assertTrue(o1.equals(o2)); + Assert.assertTrue(o2.equals(o3)); + Assert.assertTrue(o3.equals(-1)); + Assert.assertEquals(myList.size(), mySize + 3); + } + + @Test + public void addLast() throws Exception { + myList.addLast(-1); + myList.addLast(-1); + myList.addLast(-1); + Object o1 = myList.get(myList.size() - 1); + Object o2 = myList.get(myList.size() - 2); + Object o3 = myList.get(myList.size() - 3); + Assert.assertTrue(o1.equals(o2)); + Assert.assertTrue(o2.equals(o3)); + Assert.assertTrue(o3.equals(-1)); + Assert.assertEquals(myList.size(), mySize + 3); + } + + @Test + public void removeFirst() throws Exception { + myList.addFirst(-1); + Object o = myList.removeFirst(); + Assert.assertTrue(o.equals(-1)); + Assert.assertEquals(myList.size(), mySize); + } + + @Test + public void removeLast() throws Exception { + myList.addLast(-1); + Object o = myList.removeLast(); + Assert.assertTrue(o.equals(-1)); + Assert.assertEquals(myList.size(), mySize); + } + + @Test + public void iterator() throws Exception { + MyIterator iterator = myList.iterator(); + int count = 0; + while (iterator.hasNext()) { + System.out.println(iterator.next()); + count++; + } + Assert.assertEquals(mySize, count); + } + +} \ No newline at end of file From 03c6b3a6243d10e742bc47c525ed54399f479712 Mon Sep 17 00:00:00 2001 From: Ralf_Nick Date: Sat, 25 Feb 2017 23:30:19 +0800 Subject: [PATCH 157/216] =?UTF-8?q?=E6=96=87=E7=AB=A0=E9=93=BE=E6=8E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 请打开链接 --- .../\346\226\207\347\253\240\345\234\260\345\235\200" | 1 + 1 file changed, 1 insertion(+) create mode 100644 "group20/925290009/\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232/\346\226\207\347\253\240\345\234\260\345\235\200" diff --git "a/group20/925290009/\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232/\346\226\207\347\253\240\345\234\260\345\235\200" "b/group20/925290009/\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232/\346\226\207\347\253\240\345\234\260\345\235\200" new file mode 100644 index 0000000000..2ebe35c33a --- /dev/null +++ "b/group20/925290009/\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232/\346\226\207\347\253\240\345\234\260\345\235\200" @@ -0,0 +1 @@ +[文章链接](http://blog.csdn.net/u011371324/article/details/57146892) From ddbb8602b76feab0536db05f05b362e2cc62078a Mon Sep 17 00:00:00 2001 From: unknown <史磊> Date: Sat, 25 Feb 2017 23:32:34 +0800 Subject: [PATCH 158/216] =?UTF-8?q?2017.2.25=20=E5=8F=B2=E7=A3=8A=E6=8F=90?= =?UTF-8?q?=E4=BA=A4=E4=BD=9C=E4=B8=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- group08/782476895/.classpath | 6 - group08/782476895/.gitignore | 1 - group08/782476895/.project | 17 --- group08/782476895/20170215/ArrayList.java | 55 ++++++++ group08/782476895/20170215/LinkedList.java | 127 ++++++++++++++++++ group08/782476895/20170215/List.java | 9 ++ group08/782476895/20170215/Queue.java | 65 +++++++++ group08/782476895/20170215/Stack.java | 31 +++++ ...\347\232\204\345\205\263\347\263\273.docx" | Bin 0 -> 6797 bytes group08/782476895/782476895.txt | 0 10 files changed, 287 insertions(+), 24 deletions(-) delete mode 100644 group08/782476895/.classpath delete mode 100644 group08/782476895/.gitignore delete mode 100644 group08/782476895/.project create mode 100644 group08/782476895/20170215/ArrayList.java create mode 100644 group08/782476895/20170215/LinkedList.java create mode 100644 group08/782476895/20170215/List.java create mode 100644 group08/782476895/20170215/Queue.java create mode 100644 group08/782476895/20170215/Stack.java create mode 100644 "group08/782476895/20170215/\346\217\217\350\277\260CPU\357\274\214\345\206\205\345\255\230\357\274\214 \347\241\254\347\233\230\357\274\214\346\214\207\344\273\244\344\271\213\351\227\264\347\232\204\345\205\263\347\263\273.docx" delete mode 100644 group08/782476895/782476895.txt diff --git a/group08/782476895/.classpath b/group08/782476895/.classpath deleted file mode 100644 index fb5011632c..0000000000 --- a/group08/782476895/.classpath +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/group08/782476895/.gitignore b/group08/782476895/.gitignore deleted file mode 100644 index ae3c172604..0000000000 --- a/group08/782476895/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/bin/ diff --git a/group08/782476895/.project b/group08/782476895/.project deleted file mode 100644 index 4b7a2c3c01..0000000000 --- a/group08/782476895/.project +++ /dev/null @@ -1,17 +0,0 @@ - - - 782476895learning - - - - - - org.eclipse.jdt.core.javabuilder - - - - - - org.eclipse.jdt.core.javanature - - diff --git a/group08/782476895/20170215/ArrayList.java b/group08/782476895/20170215/ArrayList.java new file mode 100644 index 0000000000..7b94eebd36 --- /dev/null +++ b/group08/782476895/20170215/ArrayList.java @@ -0,0 +1,55 @@ +package com.sl.test20170221; + +import java.util.Arrays; + +public class ArrayList implements List{ + + private int size = 0; + + private Object[] elementData = new Object[100]; + + @Override + public void add(Object o) { + grow(elementData); + elementData[size] = o; + } + + @Override + public void add(int index, Object o) { + grow(elementData); + for(int i = size - 1;i >= index;i--){ + elementData[i+1] = elementData[i]; + } + elementData[index] = o; + } + + @Override + public Object get(int index) { + return elementData[index]; + } + + @Override + public Object remove(int index) { + size--; + for(int i = index;i < size;i++){ + elementData[i] = elementData[i+1]; + } + elementData[size] = null; + return elementData; + } + + @Override + public int size() { + + return size; + } + + private void grow(Object[] elementData){ + size++; + if(size >= elementData.length){ + int newSize = elementData.length + 100; + elementData = Arrays.copyOf(elementData, newSize); + } + } + +} diff --git a/group08/782476895/20170215/LinkedList.java b/group08/782476895/20170215/LinkedList.java new file mode 100644 index 0000000000..30ba21046f --- /dev/null +++ b/group08/782476895/20170215/LinkedList.java @@ -0,0 +1,127 @@ +package com.sl.test20170221; + +public class LinkedList implements List{ + private Node root; + int index; + + public void addNode(String name){ + if(root == null){ + root = new Node(name); + }else{ + root.add(name); + } + } + + + + + class Node{ + Object data; + Node next; + + + Node(Object data){ + this.data = data; + } + //添加节点 + public void add(Object data){ + if(this.next == null){ + this.next = new Node(data); + }else{ + this.next.add(data); + } + } + //删除节点 + public Object del(int i){ + if(this.next != null){ + index++; + if(i == index){ + this.next = this.next.next; + return this.next.data; + }else{ + this.next.del(i); + } + } + return null; + } + + + //遍历 + public void traversal(){ + if(this.next != null){ + index++; + this.next.traversal(); + } + } + //指定位置增加 + public void add(int i, Object o){ + if(this.next != null){ + if(i == index){ + Node node = new Node(data); + node.next = this.next.next; + this.next = node; + return ; + }else{ + this.next.add(i,o); + } + index++; + } + } + + //得到指定的节点 + public Object get(int i){ + if(this.next != null){ + + if(i == index){ + return this.data; + }else{ + this.next.get(i); + } + index++; + } + return null; + } + + } + + @Override + public void add(Object data) { + if(root == null){ + root = new Node(data); + }else{ + root.add(data); + } + } + + @Override + public void add(int index, Object o) { + if(root != null){ + root.add(index, o); + } + } + + @Override + public Object get(int index) { + if(root.next != null){ + return root.get(index); + } + return null; + } + + @Override + public Object remove(int index) { + if(root != null){ + return root.del(index); + } + return null; + } + + @Override + public int size() { + if(root != null){ + root.traversal(); + } + return index; + } + +} diff --git a/group08/782476895/20170215/List.java b/group08/782476895/20170215/List.java new file mode 100644 index 0000000000..08160598b8 --- /dev/null +++ b/group08/782476895/20170215/List.java @@ -0,0 +1,9 @@ +package com.sl.test20170221; + +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(); +} diff --git a/group08/782476895/20170215/Queue.java b/group08/782476895/20170215/Queue.java new file mode 100644 index 0000000000..3c4a3c8256 --- /dev/null +++ b/group08/782476895/20170215/Queue.java @@ -0,0 +1,65 @@ +package com.sl.test20170221; + +import com.sl.test20170221.LinkedList.Node; + +public class Queue { + + private Node first; + private int index; + + class Node{ + Object data; + Node next; + + + Node(Object data){ + this.data = data; + } + //添加节点 + public void add(Object data){ + if(this.next == null){ + this.next = new Node(data); + }else{ + this.next.add(data); + } + } + + //遍历 + public void traversal(){ + if(this.next != null){ + index++; + this.next.traversal(); + } + } + } + + public void enQueue(Object o){ + if(first != null){ + first.add(o); + } + } + + public Object deQueue(){ + if(first != null){ + Object obj = first.data; + first = first.next; + return obj; + } + return null; + } + + public boolean isEmpty(){ + if(first == null){ + return true; + }else{ + return false; + } + } + + public int size(){ + if(first != null){ + first.traversal(); + } + return index; + } +} diff --git a/group08/782476895/20170215/Stack.java b/group08/782476895/20170215/Stack.java new file mode 100644 index 0000000000..50739dc7f3 --- /dev/null +++ b/group08/782476895/20170215/Stack.java @@ -0,0 +1,31 @@ +package com.sl.test20170221; + +public class Stack { + private List elementData = new ArrayList(); + + public void push(Object o){ + elementData.add(o); + } + + public Object pop(){ + int size = elementData.size(); + Object obj = elementData.remove(size--); + return obj; + } + + public Object peek(){ + int size = elementData.size(); + return elementData.get(size - 1); + } + public boolean isEmpty(){ + int size = elementData.size(); + if(size == 0){ + return true; + }else{ + return false; + } + } + public int size(){ + return elementData.size(); + } +} diff --git "a/group08/782476895/20170215/\346\217\217\350\277\260CPU\357\274\214\345\206\205\345\255\230\357\274\214 \347\241\254\347\233\230\357\274\214\346\214\207\344\273\244\344\271\213\351\227\264\347\232\204\345\205\263\347\263\273.docx" "b/group08/782476895/20170215/\346\217\217\350\277\260CPU\357\274\214\345\206\205\345\255\230\357\274\214 \347\241\254\347\233\230\357\274\214\346\214\207\344\273\244\344\271\213\351\227\264\347\232\204\345\205\263\347\263\273.docx" new file mode 100644 index 0000000000000000000000000000000000000000..0449ce2f366f7c09c20bdcabf8f7fc9cd4ff6b7a GIT binary patch literal 6797 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 Date: Sat, 25 Feb 2017 23:35:15 +0800 Subject: [PATCH 159/216] =?UTF-8?q?2016.2.25=20=E5=8F=B2=E7=A3=8A=E6=8F=90?= =?UTF-8?q?=E4=BA=A4=E4=BD=9C=E4=B8=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../782476895/{20170215 => 20170225}/ArrayList.java | 0 .../{20170215 => 20170225}/LinkedList.java | 0 group08/782476895/{20170215 => 20170225}/List.java | 0 group08/782476895/{20170215 => 20170225}/Queue.java | 0 group08/782476895/{20170215 => 20170225}/Stack.java | 0 ...27\264\347\232\204\345\205\263\347\263\273.docx" | Bin 6 files changed, 0 insertions(+), 0 deletions(-) rename group08/782476895/{20170215 => 20170225}/ArrayList.java (100%) rename group08/782476895/{20170215 => 20170225}/LinkedList.java (100%) rename group08/782476895/{20170215 => 20170225}/List.java (100%) rename group08/782476895/{20170215 => 20170225}/Queue.java (100%) rename group08/782476895/{20170215 => 20170225}/Stack.java (100%) rename "group08/782476895/20170215/\346\217\217\350\277\260CPU\357\274\214\345\206\205\345\255\230\357\274\214 \347\241\254\347\233\230\357\274\214\346\214\207\344\273\244\344\271\213\351\227\264\347\232\204\345\205\263\347\263\273.docx" => "group08/782476895/20170225/\346\217\217\350\277\260CPU\357\274\214\345\206\205\345\255\230\357\274\214 \347\241\254\347\233\230\357\274\214\346\214\207\344\273\244\344\271\213\351\227\264\347\232\204\345\205\263\347\263\273.docx" (100%) diff --git a/group08/782476895/20170215/ArrayList.java b/group08/782476895/20170225/ArrayList.java similarity index 100% rename from group08/782476895/20170215/ArrayList.java rename to group08/782476895/20170225/ArrayList.java diff --git a/group08/782476895/20170215/LinkedList.java b/group08/782476895/20170225/LinkedList.java similarity index 100% rename from group08/782476895/20170215/LinkedList.java rename to group08/782476895/20170225/LinkedList.java diff --git a/group08/782476895/20170215/List.java b/group08/782476895/20170225/List.java similarity index 100% rename from group08/782476895/20170215/List.java rename to group08/782476895/20170225/List.java diff --git a/group08/782476895/20170215/Queue.java b/group08/782476895/20170225/Queue.java similarity index 100% rename from group08/782476895/20170215/Queue.java rename to group08/782476895/20170225/Queue.java diff --git a/group08/782476895/20170215/Stack.java b/group08/782476895/20170225/Stack.java similarity index 100% rename from group08/782476895/20170215/Stack.java rename to group08/782476895/20170225/Stack.java diff --git "a/group08/782476895/20170215/\346\217\217\350\277\260CPU\357\274\214\345\206\205\345\255\230\357\274\214 \347\241\254\347\233\230\357\274\214\346\214\207\344\273\244\344\271\213\351\227\264\347\232\204\345\205\263\347\263\273.docx" "b/group08/782476895/20170225/\346\217\217\350\277\260CPU\357\274\214\345\206\205\345\255\230\357\274\214 \347\241\254\347\233\230\357\274\214\346\214\207\344\273\244\344\271\213\351\227\264\347\232\204\345\205\263\347\263\273.docx" similarity index 100% rename from "group08/782476895/20170215/\346\217\217\350\277\260CPU\357\274\214\345\206\205\345\255\230\357\274\214 \347\241\254\347\233\230\357\274\214\346\214\207\344\273\244\344\271\213\351\227\264\347\232\204\345\205\263\347\263\273.docx" rename to "group08/782476895/20170225/\346\217\217\350\277\260CPU\357\274\214\345\206\205\345\255\230\357\274\214 \347\241\254\347\233\230\357\274\214\346\214\207\344\273\244\344\271\213\351\227\264\347\232\204\345\205\263\347\263\273.docx" From 051a3a67ace7f5aa69ff9e4877df817cd12dbc2a Mon Sep 17 00:00:00 2001 From: shane Date: Sat, 25 Feb 2017 23:58:45 +0800 Subject: [PATCH 160/216] add ArrayList and LinkedList --- .gitignore | 1 + .../src/com/coding/basic/ArrayList.java | 134 +++++++-- .../src/com/coding/basic/LinkedList.java | 258 +++++++++++++++--- .../src/test/coding/basic/AbstractTest.java | 25 ++ .../src/test/coding/basic/ArrayListTest.java | 59 ++++ .../src/test/coding/basic/LinkedListTest.java | 64 +++++ .../214074094/com/reading/blog_test.txt | 1 + .../214074094/com/reading/blog_test.txt | 1 + group16/out/production/214074094/readme.txt | 1 + .../214074094/src/com/reading/blog_test.txt | 1 + 10 files changed, 483 insertions(+), 62 deletions(-) create mode 100644 group16/214074094/src/test/coding/basic/AbstractTest.java create mode 100644 group16/214074094/src/test/coding/basic/ArrayListTest.java create mode 100644 group16/214074094/src/test/coding/basic/LinkedListTest.java create mode 100644 group16/214074094/target/production/214074094/com/reading/blog_test.txt create mode 100644 group16/out/production/214074094/com/reading/blog_test.txt create mode 100644 group16/out/production/214074094/readme.txt create mode 100644 group16/out/production/214074094/src/com/reading/blog_test.txt diff --git a/.gitignore b/.gitignore index 359bdf7ae5..683c69b370 100644 --- a/.gitignore +++ b/.gitignore @@ -10,6 +10,7 @@ *.iml *.idea +*.DS_Store # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml hs_err_pid* diff --git a/group16/214074094/src/com/coding/basic/ArrayList.java b/group16/214074094/src/com/coding/basic/ArrayList.java index a50055225b..4f45a4c55b 100644 --- a/group16/214074094/src/com/coding/basic/ArrayList.java +++ b/group16/214074094/src/com/coding/basic/ArrayList.java @@ -1,5 +1,13 @@ package com.coding.basic; +import java.util.*; + +/** + * @Author shane + * @Time 2017/2/25 13:06 + * @Email stevenchenguang@gmail.com + * @Desc OwnArrayList + */ public class ArrayList implements List { private int size = 0; @@ -17,44 +25,132 @@ public ArrayList() { this.elementData = EMPTY_ELEMENTDATA; } - public static void main(String[] args) { - ArrayList list = new ArrayList(); - System.out.println(list.elementData == list.EMPTY_ELEMENTDATA); - } - + @Override public void add(Object o) { if (elementData == EMPTY_ELEMENTDATA) { - elementData = new Object[DEFAULT_CAPACITY]; - }else if(size < elementData.length){ - size++; - }else{ + elementData = Arrays.copyOf(elementData, DEFAULT_CAPACITY); + elementData[0] = o; + } else if (size < elementData.length) { + elementData[size] = o; + } else { _grow(); + elementData[size] = o; } - elementData[size] = o; - } - - private void _grow() { - + size++; + _analyze(); } + @Override public void add(int index, Object o) { - + if (index < 0) { + throw new IndexOutOfBoundsException("Index:" + index + ", Size:" + size); + } + if (elementData == EMPTY_ELEMENTDATA) { + if (index != 0) { + throw new IndexOutOfBoundsException("Index:" + index + ", Size:" + size); + } else { + elementData = new Object[DEFAULT_CAPACITY]; + elementData[0] = o; + } + } else if (index > size) { + throw new IndexOutOfBoundsException("Index:" + index + ", Size:" + size); + } else if (index == size) { + _grow(); + elementData[size] = o; + size++; + } else { + if (elementData.length == size) { + _grow(); + } + System.arraycopy(elementData, index, elementData, index + 1, size - index); + elementData[index] = o; + size++; + } + _analyze(); } + @Override public Object get(int index) { - return null; + if (index < 0 || index > size) { + throw new IndexOutOfBoundsException("Index:" + index + ", Size:" + size); + } + return elementData[index]; } + @Override public Object remove(int index) { - return null; + + if (index < 0 || index > size) { + throw new IndexOutOfBoundsException("Index:" + index + ", Size:" + size); + } + Object oldValue = elementData[index]; + //需要复制的长度 + int needMoveLength = size - index - 1; + //如果该长度小于0, 说明只有一个元素, 直接置空即可 + if (needMoveLength > 0) { + System.arraycopy(elementData, index + 1, elementData, index, needMoveLength); + } + elementData[--size] = null; + _analyze(); + return oldValue; } + @Override public int size() { - return -1; + return size; } public Iterator iterator() { - return null; + return new Itr(); } + /** + * @Author: shane + * @Time: 2017/2/25 20:18 + * @Email: stevenchenguang@gmail.com + * @param: + * @Return: + * @Throw: + * @Desc: 返回真实长度的数组数据 + */ + private void _analyze() { + if (size < elementData.length) { + elementData = Arrays.copyOf(elementData, size); + } + } + + /** + * @Author: shane + * @Time: 2017/2/25 20:19 + * @Email: stevenchenguang@gmail.com + * @param: + * @Return: + * @Throw: + * @Desc: 将数组的长度扩容至2倍 + */ + private void _grow() { + elementData = Arrays.copyOf(elementData, elementData.length << 1); + } + + @Override + public String toString() { + return Arrays.toString(elementData); + } + + private class Itr implements Iterator { + + @Override + public boolean hasNext() { + if (elementData == EMPTY_ELEMENTDATA) { + return false; + } + + return false; + } + + @Override + public Object next() { + return null; + } + } } diff --git a/group16/214074094/src/com/coding/basic/LinkedList.java b/group16/214074094/src/com/coding/basic/LinkedList.java index e2c4e5e795..fe9839838a 100644 --- a/group16/214074094/src/com/coding/basic/LinkedList.java +++ b/group16/214074094/src/com/coding/basic/LinkedList.java @@ -1,46 +1,218 @@ package com.coding.basic; +/** + * @Author shane + * @Time 2017/2/25 21:01 + * @Email stevenchenguang@gmail.com + * @Desc OwnLinkedList + */ public class LinkedList implements List { - - private Node head; - - public void add(Object o){ - - } - public void add(int index , Object o){ - - } - public Object get(int index){ - return null; - } - public Object remove(int index){ - return null; - } - - public int size(){ - return -1; - } - - public void addFirst(Object o){ - - } - public void addLast(Object o){ - - } - public Object removeFirst(){ - return null; - } - public Object removeLast(){ - return null; - } - public Iterator iterator(){ - return null; - } - - - private static class Node{ - Object data; - Node next; - - } -} + + private int size = 0; + + private Node first; + + private Node last; + + public void add(Object o) { + if(size == 0){ + first = new Node(null, o, null); + last = first; + size++; + }else{ + addLast(o); + } + } + + public void add(int index, Object o) { + _checkIndex(index); + if(index == size - 1){ + addLast(o); + }else { + Node prev = _node(index); + Node next = _node(index + 1); + Node newNode = new Node(prev, o, next); + prev.next = newNode; + next.prev = newNode; + size++; + } + } + + public Object get(int index) { + _checkIndex(index); + return node(index); + } + + public Object remove(int index) { + _checkIndex(index); + if(index == 0){ + return removeFirst(); + }else if(index == size - 1){ + return removeLast(); + } + Node curr = _node(index); + Object data = curr.data; + final Node prev = curr.prev; + final Node next = curr.next; + + prev.next = next; + next.prev = prev; + curr = null; + size--; + + return data; + } + + private Object removeFirst() { + Node oldFirst = first; + Object data = first.data; + final Node oldSecond = oldFirst.next; + if(null == oldSecond){ + first = null; + last = null; + }else { + oldSecond.prev = null; + first = oldSecond; + oldFirst = null; + } + size--; + return data; + } + + private Object removeLast() { + Node oldLast = last; + Object data = last.data; + final Node oldLastButOne = last.prev; + if(null == oldLastButOne){ + first = null; + last = null; + }else{ + oldLastButOne.next = null; + last = oldLastButOne; + oldLast = null; + } + size--; + return data; + } + + public void addFirst(Object o) { + final Node oldFirst = first; + final Node param = new Node(null, o, null); + if(null == oldFirst){ + first = param; + }else { + oldFirst.prev = param; + param.next = oldFirst; + first = param; + } + size++; + } + + public void addLast(Object o) { + final Node n = last; + final Node newNode = new Node(n, o, null); + last = newNode; + n.next = newNode; + size++; + } + + public int size() { + return size; + } + + public Iterator iterator() { + return null; + } + + private static class Node { + Node prev; + Object data; + Node next; + + public Node(Node prev, Object data, Node next) { + this.prev = prev; + this.data = data; + this.next = next; + } + } + + /** + * @Author: shane + * @Time: 2017/2/25 22:44 + * @Email: stevenchenguang@gmail.com + * @param: int index + * @Return: Node + * @Throw: + * @Desc: 根据下标获取节点元素上的数据 + */ + private Object node(int index) { + //如果下标在左一半, 从左往右取 + if(index < size >> 1){ + Node tmp = first; + for (int i = 0; i < index; i++) { + tmp = tmp.next; + } + return tmp.data; + }else{ + Node tmp = last; + for (int i = size - 1; i > index; i--) { + tmp = tmp.prev; + } + return tmp.data; + } + } + + /** + * @Author: shane + * @Time: 2017/2/25 22:44 + * @Email: stevenchenguang@gmail.com + * @param: int index + * @Return: Node + * @Throw: + * @Desc: 根据下标获取节点元素 + */ + private Node _node(int index) { + //如果下标在左一半, 从左往右取 + if(index < size >> 1){ + Node tmp = first; + for (int i = 0; i < index; i++) { + tmp = tmp.next; + } + return tmp; + }else{ + Node tmp = last; + for (int i = size - 1; i > index; i--) { + tmp = tmp.prev; + } + return tmp; + } + } + + /** + * @Author: shane + * @Time: 2017/2/25 22:43 + * @Email: stevenchenguang@gmail.com + * @param: int index + * @Return: + * @Throw: IndexOutOfBoundsException + * @Desc: 校验下标是否合法 + */ + private void _checkIndex(int index){ + if(index < 0 || index >= size){ + throw new IndexOutOfBoundsException("Index:" + index + ", Size:" + size); + } + } + + @Override + public String toString() { + if(0 == size){ + return "[]"; + } + StringBuffer sb = new StringBuffer(); + for (int i = 0; i < this.size; i++) { + sb.append(get(i)).append(", "); + } + String tmp = sb.substring(0, sb.length() - 2); + return "[" + tmp + "]"; + } +} \ No newline at end of file diff --git a/group16/214074094/src/test/coding/basic/AbstractTest.java b/group16/214074094/src/test/coding/basic/AbstractTest.java new file mode 100644 index 0000000000..0b19aa71d2 --- /dev/null +++ b/group16/214074094/src/test/coding/basic/AbstractTest.java @@ -0,0 +1,25 @@ +package coding.basic; + +import com.alibaba.fastjson.JSON; + +/** + * @Author shane + * @Time 2017/2/25 13:06 + * @Email stevenchenguang@gmail.com + * @Desc 测试基类 + */ +public class AbstractTest { + + protected void printStar() { + System.out.println("********************************************"); + } + + protected void printHyphen() { + System.out.println("--------------------------------------------"); + } + + protected void printJson(Object obj) { + System.out.println(JSON.toJSONString(obj)); + } + +} diff --git a/group16/214074094/src/test/coding/basic/ArrayListTest.java b/group16/214074094/src/test/coding/basic/ArrayListTest.java new file mode 100644 index 0000000000..4aa506e962 --- /dev/null +++ b/group16/214074094/src/test/coding/basic/ArrayListTest.java @@ -0,0 +1,59 @@ +package coding.basic; + +import com.coding.basic.ArrayList; +import org.junit.After; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; + +/** + * @Author shane + * @Time 2017/2/25 13:02 + * @Email stevenchenguang@gmail.com + * @Desc ... + */ + +public class ArrayListTest extends AbstractTest { + + private static ArrayList list; + + @Before + public void before() { + list = new ArrayList(); + list.add("a"); + list.add("b"); + list.add("c"); + list.add("d"); + list.add("e"); + + printStar(); + System.out.println("Before Test data :" + list); + printStar(); + } + + @After + public void after() { + printStar(); + System.out.println("After Test data : " + list); + printStar(); + } + + @Test + public void testAddI() { + int index = list.size(); + list.add(index, "test add i"); + Assert.assertEquals(list.get(index), "test add i"); + } + + @Test + public void testSize(){ + Assert.assertEquals(5, list.size()); + } + + @Test + public void testRemove() { + list.remove(5); + Assert.assertEquals(list.get(3), "d"); + } + +} diff --git a/group16/214074094/src/test/coding/basic/LinkedListTest.java b/group16/214074094/src/test/coding/basic/LinkedListTest.java new file mode 100644 index 0000000000..1479507338 --- /dev/null +++ b/group16/214074094/src/test/coding/basic/LinkedListTest.java @@ -0,0 +1,64 @@ +package coding.basic; + +import com.coding.basic.LinkedList; +import junit.framework.Assert; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +/** + * @Author shane + * @Time 2017/2/25 23:32 + * @Email stevenchenguang@gmail.com + * @Desc ... + */ +public class LinkedListTest extends AbstractTest { + + private static LinkedList list; + + @Before + public void before(){ + list = new LinkedList(); + list.add("a"); + list.add("b"); + list.add("c"); + list.add("d"); + list.add("e"); + + printStar(); + System.out.println("Before Test data :" + list); + printHyphen(); + } + + @After + public void after() { + printHyphen(); + System.out.println("After Test data : " + list); + printStar(); + } + + @Test + public void testAddIndex(){ + list.add(0, "after a"); + Assert.assertEquals("after a", list.get(1)); + + list.add(3, "after c"); + Assert.assertEquals("after c", list.get(4)); + + list.add(6, "after e"); + Assert.assertEquals("after e", list.get(7)); + } + + @Test + public void testRemove(){ + list.remove(0); + Assert.assertEquals("b", list.get(0)); + + list.remove(list.size() - 1); + Assert.assertEquals("d", list.get(list.size() - 1)); + + Object obj = list.remove(1); + Assert.assertEquals("c", obj); + Assert.assertEquals(2, list.size()); + } +} diff --git a/group16/214074094/target/production/214074094/com/reading/blog_test.txt b/group16/214074094/target/production/214074094/com/reading/blog_test.txt new file mode 100644 index 0000000000..b7e5cbfe14 --- /dev/null +++ b/group16/214074094/target/production/214074094/com/reading/blog_test.txt @@ -0,0 +1 @@ +just test new fork \ No newline at end of file diff --git a/group16/out/production/214074094/com/reading/blog_test.txt b/group16/out/production/214074094/com/reading/blog_test.txt new file mode 100644 index 0000000000..b7e5cbfe14 --- /dev/null +++ b/group16/out/production/214074094/com/reading/blog_test.txt @@ -0,0 +1 @@ +just test new fork \ No newline at end of file diff --git a/group16/out/production/214074094/readme.txt b/group16/out/production/214074094/readme.txt new file mode 100644 index 0000000000..c1b06ddcc2 --- /dev/null +++ b/group16/out/production/214074094/readme.txt @@ -0,0 +1 @@ +I am 北京-Shane diff --git a/group16/out/production/214074094/src/com/reading/blog_test.txt b/group16/out/production/214074094/src/com/reading/blog_test.txt new file mode 100644 index 0000000000..b7e5cbfe14 --- /dev/null +++ b/group16/out/production/214074094/src/com/reading/blog_test.txt @@ -0,0 +1 @@ +just test new fork \ No newline at end of file From 8872d607e7cb1b93f33a170a246fef1d41f2b205 Mon Sep 17 00:00:00 2001 From: wzy <1264835468@qq.com> Date: Sat, 25 Feb 2017 23:59:40 +0800 Subject: [PATCH 161/216] =?UTF-8?q?=E3=80=82=E3=80=82=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../1264835468/src/assignment/BinaryTree.java | 2 +- .../1264835468/src/assignment/MyArrayList.java | 17 +++++++++++------ .../1264835468/src/assignment/MyLinkedList.java | 7 +++++-- 3 files changed, 17 insertions(+), 9 deletions(-) diff --git a/group17/1264835468/src/assignment/BinaryTree.java b/group17/1264835468/src/assignment/BinaryTree.java index 7dcf7e963b..a74d5fecc8 100644 --- a/group17/1264835468/src/assignment/BinaryTree.java +++ b/group17/1264835468/src/assignment/BinaryTree.java @@ -27,7 +27,7 @@ public BinaryTreeNode insert(BinaryTreeNode node) { private void insert(BinaryTreeNode current, BinaryTreeNode node) { - if (current.getData().compareTo(node.getData()) >= 0) { + if (current.getData().compareTo(node.getData()) > 0) { if (current.getLeft() == null) current.setLeft(node); else diff --git a/group17/1264835468/src/assignment/MyArrayList.java b/group17/1264835468/src/assignment/MyArrayList.java index 5aac3325f5..ea9ae87755 100644 --- a/group17/1264835468/src/assignment/MyArrayList.java +++ b/group17/1264835468/src/assignment/MyArrayList.java @@ -12,7 +12,9 @@ public MyArrayList() { } public MyArrayList(int initSize) { - if (initSize < 0) throw new IllegalArgumentException(initSize + " < 0"); + if (initSize < 0) { + throw new IllegalArgumentException(initSize + " < 0"); + } if (initSize == 0) { elementData = new Object[DEFAULT_SIZE]; } @@ -28,6 +30,9 @@ public void add(E o) { } public void add(int index, E o) { + if (index < 0 || index > size) { + throw new IllegalArgumentException("index:" + index); + } growIfNeed(); System.arraycopy(elementData, index, elementData, index + 1, size - index); elementData[index] = o; @@ -43,7 +48,6 @@ public E get(int index) { public E remove(int index) { rangeCheck(index); E target = get(index); - // moveForwardFrom(index + 1); System.arraycopy(elementData, index + 1, elementData, index, size - index - 1); size--; return target; @@ -55,12 +59,13 @@ public int size() { private void rangeCheck(int index) { if (index >= size) { - throw new NoElementException("index:" + index); + throw new NoSuchElementException("index:" + index); } } private void growIfNeed() { - if (size == elementData.length) grow(); + if (size == elementData.length) + grow(); } private void grow() { @@ -96,9 +101,9 @@ public String toString() { } -class NoElementException extends RuntimeException { +class NoSuchElementException extends RuntimeException { - public NoElementException(String string) { + public NoSuchElementException(String string) { super(string); } diff --git a/group17/1264835468/src/assignment/MyLinkedList.java b/group17/1264835468/src/assignment/MyLinkedList.java index 4d393e6eff..d0f417e845 100644 --- a/group17/1264835468/src/assignment/MyLinkedList.java +++ b/group17/1264835468/src/assignment/MyLinkedList.java @@ -34,7 +34,9 @@ public void addLast(E o) { } public void add(int index, E o) { - rangeCheck(index - 1); + if (index > size || index < 0) { + throw new IllegalArgumentException("index:" + index); + } if (index == 0) { addFirst(o); return; @@ -64,6 +66,7 @@ public E remove(int index) { } public E get(int index) { + rangeCheck(index); return movePtrTo(index).data; } @@ -81,7 +84,7 @@ private Node movePtrTo(int index) { private void rangeCheck(int index) { if (index >= size) { - throw new NoElementException("index:" + index); + throw new NoSuchElementException("index:" + index); } } From 17454ccc9feee050f3b703be7d06b50e2428b755 Mon Sep 17 00:00:00 2001 From: zoakerc Date: Sun, 26 Feb 2017 00:00:29 +0800 Subject: [PATCH 162/216] =?UTF-8?q?=E6=A0=88=E5=AE=9E=E7=8E=B0MyStack?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../group7/homework/c0226/MyArrayList.java | 20 +++++--- .../group7/homework/c0226/MyLinkedList.java | 19 ++++--- .../group7/homework/c0226/MyStack.java | 24 +++++++-- .../homework/c0226/MyArrayListTest.java | 15 ++---- .../homework/c0226/MyLinkedListTest.java | 18 ++----- .../group7/homework/c0226/MyStackTest.java | 50 +++++++++++++++++++ 6 files changed, 101 insertions(+), 45 deletions(-) create mode 100644 group07/562247675/homework/homework-0226/src/test/java/com/coding2017/group7/homework/c0226/MyStackTest.java diff --git a/group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/MyArrayList.java b/group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/MyArrayList.java index 57b6b0c7d4..05d3d80d49 100644 --- a/group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/MyArrayList.java +++ b/group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/MyArrayList.java @@ -18,7 +18,7 @@ public void add(Object o) { @Override public void add(int index, Object o) { - checkRange(index); + checkRangeAdd(index); if (isFull()) { increase(); } @@ -29,17 +29,16 @@ public void add(int index, Object o) { @Override public Object get(int index) { - checkRange(index); + checkRangeGet(index); return elementData[index]; } @Override public Object remove(int index) { - checkRange(index); + checkRangeGet(index); Object element = elementData[index]; System.arraycopy(elementData, index + 1, elementData, index, size - (index + 1)); - elementData[size] = null; - size--; + elementData[--size] = null; return element; } @@ -56,13 +55,20 @@ private boolean isFull() { return size >= elementData.length; } - private void checkRange(int index) { + private void checkRangeGet(int index) { boolean outOfRange = index < 0 || index >= size; if (outOfRange) { throw new IndexOutOfBoundsException("Index: " + index + ", Size: " + size); } } + private void checkRangeAdd(int index) { + boolean outOfRange = index < 0 || index > size; + if (outOfRange) { + throw new IndexOutOfBoundsException("Index: " + index + ", Size: " + size); + } + } + private void increase() { Object[] target = new Object[elementData.length * 2]; System.arraycopy(elementData, 0, target, 0, elementData.length); @@ -85,7 +91,7 @@ public boolean hasNext() { @Override public Object next() { - checkRange(index); + checkRangeGet(index); return elementData[index++]; } } diff --git a/group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/MyLinkedList.java b/group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/MyLinkedList.java index a2f9c3746e..6b8a9ed197 100644 --- a/group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/MyLinkedList.java +++ b/group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/MyLinkedList.java @@ -16,7 +16,7 @@ public void add(Object o) { @Override public void add(int index, Object o) { - checkRange(index); + checkRangeAdd(index); Node insert = find(index); Node before = find(index - 1); Node node = new Node(); @@ -28,13 +28,13 @@ public void add(int index, Object o) { @Override public Object get(int index) { - checkRange(index); + checkRangeGet(index); return find(index).data; } @Override public Object remove(int index) { - checkRange(index); + checkRangeGet(index); Node before = find(index - 1); Node remove = find(index); Node after = find(index + 1); @@ -65,7 +65,7 @@ public void addLast(Object o) { } public Object removeFirst() { - checkRange(size - 1); + checkRangeGet(size - 1); Node remove = find(0); head.next = find(1); size--; @@ -73,7 +73,7 @@ public Object removeFirst() { } public Object removeLast() { - checkRange(size - 1); + checkRangeGet(size - 1); Node remove = find(size - 1); Node before = find(size - 2); before.next = null; @@ -85,12 +85,17 @@ public MyIterator iterator() { return new MyLinkedListIterator(); } - private void checkRange(int index) { + private void checkRangeGet(int index) { if (index < 0 || index >= size) { throw new IndexOutOfBoundsException("Index: " + index + ", Size:" + size); } } + private void checkRangeAdd(int index) { + if (index < 0 || index > size) { + throw new IndexOutOfBoundsException("Index: " + index + ", Size:" + size); + } + } private Node find(int index) { Node node = head; int pos = -1; @@ -136,7 +141,7 @@ public boolean hasNext() { @Override public Object next() { - checkRange(size); + checkRangeGet(size); node = node.next; size++; return node.data; diff --git a/group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/MyStack.java b/group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/MyStack.java index 3267b056c7..18c10704a7 100644 --- a/group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/MyStack.java +++ b/group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/MyStack.java @@ -1,24 +1,40 @@ package com.coding2017.group7.homework.c0226; +import java.util.EmptyStackException; + public class MyStack { private MyArrayList elementData = new MyArrayList(); + private final int first = 0; public void push(Object o) { + + elementData.add(first, o); } public Object pop() { - return null; + if (isEmpty()) { + throw new EmptyStackException(); + } + return elementData.remove(first); } public Object peek() { - return null; + if (isEmpty()) { + throw new EmptyStackException(); + } + return elementData.get(first); } public boolean isEmpty() { - return false; + return elementData.size() <= 0; } public int size() { - return -1; + return elementData.size(); + } + + @Override + public String toString() { + return elementData.toString(); } } diff --git a/group07/562247675/homework/homework-0226/src/test/java/com/coding2017/group7/homework/c0226/MyArrayListTest.java b/group07/562247675/homework/homework-0226/src/test/java/com/coding2017/group7/homework/c0226/MyArrayListTest.java index 6a74145e5b..7523092985 100644 --- a/group07/562247675/homework/homework-0226/src/test/java/com/coding2017/group7/homework/c0226/MyArrayListTest.java +++ b/group07/562247675/homework/homework-0226/src/test/java/com/coding2017/group7/homework/c0226/MyArrayListTest.java @@ -11,12 +11,13 @@ public class MyArrayListTest { private MyArrayList myList = new MyArrayList(); - private final int mySize = 15; + private Object[] elements = new Object[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}; + private final int mySize = elements.length; @Before public void setUp() throws Exception { for (int i = 0; i < mySize; i++) { - myList.add(i); + myList.add(i, i + 1); } } @@ -45,11 +46,6 @@ public void addIndex() throws Exception { Assert.assertEquals(myList.size(), mySize + 1); } - @Test - public void get() throws Exception { - Assert.assertTrue(myList.get(0).equals(0)); - } - @Test public void remove() throws Exception { int index = mySize / 2; @@ -61,11 +57,6 @@ public void remove() throws Exception { } - @Test - public void size() throws Exception { - Assert.assertEquals(myList.size(), mySize); - } - @Test public void iterator() throws Exception { MyIterator iterator = myList.iterator(); diff --git a/group07/562247675/homework/homework-0226/src/test/java/com/coding2017/group7/homework/c0226/MyLinkedListTest.java b/group07/562247675/homework/homework-0226/src/test/java/com/coding2017/group7/homework/c0226/MyLinkedListTest.java index 1c2793972e..fe7d9ba28b 100644 --- a/group07/562247675/homework/homework-0226/src/test/java/com/coding2017/group7/homework/c0226/MyLinkedListTest.java +++ b/group07/562247675/homework/homework-0226/src/test/java/com/coding2017/group7/homework/c0226/MyLinkedListTest.java @@ -8,12 +8,13 @@ public class MyLinkedListTest { private MyLinkedList myList = new MyLinkedList(); - private final int mySize = 15; + private Object[] elements = new Object[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}; + private final int mySize = elements.length; @Before public void setUp() throws Exception { for (int i = 0; i < mySize; i++) { - myList.add(i); + myList.add(i, i + 1); } } @@ -41,14 +42,6 @@ public void addIndex() throws Exception { Assert.assertEquals(before, after); } - @Test - public void get() throws Exception { - Object get1 = myList.get(0); - Assert.assertTrue(get1.equals(myList.get(0))); - Object get2 = myList.get(mySize - 1); - Assert.assertTrue(get2.equals(myList.get(mySize - 1))); - } - @Test public void remove() throws Exception { myList.remove(0); @@ -57,11 +50,6 @@ public void remove() throws Exception { Assert.assertEquals(myList.size(), mySize - 3); } - @Test - public void size() throws Exception { - Assert.assertEquals(myList.size(), mySize); - } - @Test public void addFirst() throws Exception { myList.addFirst(-1); diff --git a/group07/562247675/homework/homework-0226/src/test/java/com/coding2017/group7/homework/c0226/MyStackTest.java b/group07/562247675/homework/homework-0226/src/test/java/com/coding2017/group7/homework/c0226/MyStackTest.java new file mode 100644 index 0000000000..d29031be60 --- /dev/null +++ b/group07/562247675/homework/homework-0226/src/test/java/com/coding2017/group7/homework/c0226/MyStackTest.java @@ -0,0 +1,50 @@ +package com.coding2017.group7.homework.c0226; + +import org.junit.After; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; + +public class MyStackTest { + private MyStack myStack = new MyStack(); + private Object[] elements = new Object[]{1}; + private final int mySize = elements.length; + + @Before + public void setUp() throws Exception { + for (int i = 0; i < mySize; i++) { + myStack.push(i + 1); + } + } + + @After + public void tearDown() throws Exception { + for (int i = myStack.size(); i > 0; i--) { + myStack.pop(); + } + } + + @Test + public void push() throws Exception { + myStack.push(-1); + Assert.assertTrue(myStack.pop().equals(-1)); + } + + @Test + public void pop() throws Exception { + for (int i = myStack.size(); i > 0; i--) { + myStack.pop(); + } + Assert.assertEquals(myStack.size(), 0); + } + + @Test + public void peek() throws Exception { + for (int i = 0; i < myStack.size(); i++) { + Object peek = myStack.peek(); + Assert.assertTrue(peek.equals(elements[i])); + } + Assert.assertEquals(myStack.size(), mySize); + } + +} \ No newline at end of file From d7f0ba31a7f7273f1ed59e9f7464374ad1653d65 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=9D=BE=E6=98=93?= Date: Sun, 26 Feb 2017 00:32:11 +0800 Subject: [PATCH 163/216] article --- ...351\227\264\347\232\204\345\205\263\347\263\273_20170226.md" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/group17/article/\345\206\231\344\270\200\347\257\207\346\226\207\347\253\240\344\273\213\347\273\215cpu, \345\206\205\345\255\230, \347\243\201\347\233\230, \346\214\207\344\273\244\344\273\245\345\217\212\344\273\226\344\273\254\344\271\213\351\227\264\347\232\204\345\205\263\347\263\273_20170226.md" "b/group17/article/\345\206\231\344\270\200\347\257\207\346\226\207\347\253\240\344\273\213\347\273\215cpu, \345\206\205\345\255\230, \347\243\201\347\233\230, \346\214\207\344\273\244\344\273\245\345\217\212\344\273\226\344\273\254\344\271\213\351\227\264\347\232\204\345\205\263\347\263\273_20170226.md" index eee6b340dd..c687d56f9d 100644 --- "a/group17/article/\345\206\231\344\270\200\347\257\207\346\226\207\347\253\240\344\273\213\347\273\215cpu, \345\206\205\345\255\230, \347\243\201\347\233\230, \346\214\207\344\273\244\344\273\245\345\217\212\344\273\226\344\273\254\344\271\213\351\227\264\347\232\204\345\205\263\347\263\273_20170226.md" +++ "b/group17/article/\345\206\231\344\270\200\347\257\207\346\226\207\347\253\240\344\273\213\347\273\215cpu, \345\206\205\345\255\230, \347\243\201\347\233\230, \346\214\207\344\273\244\344\273\245\345\217\212\344\273\226\344\273\254\344\271\213\351\227\264\347\232\204\345\205\263\347\263\273_20170226.md" @@ -36,7 +36,7 @@ 865797761 -1540186032 +1540186032 http://blog.csdn.net/mpx_xb/article/details/56679603 176653813 From 1ff94877bbcab1d610500e1e773091cffd026410 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=90=E9=98=B3=E9=98=B3?= <1425809544@qq.com> Date: Sun, 26 Feb 2017 00:38:10 +0800 Subject: [PATCH 164/216] =?UTF-8?q?Create=20=E6=96=87=E7=AB=A0=E9=93=BE?= =?UTF-8?q?=E6=8E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../1425809544/\346\226\207\347\253\240\351\223\276\346\216\245" | 1 + 1 file changed, 1 insertion(+) create mode 100644 "group08/1425809544/\346\226\207\347\253\240\351\223\276\346\216\245" diff --git "a/group08/1425809544/\346\226\207\347\253\240\351\223\276\346\216\245" "b/group08/1425809544/\346\226\207\347\253\240\351\223\276\346\216\245" new file mode 100644 index 0000000000..ff19095823 --- /dev/null +++ "b/group08/1425809544/\346\226\207\347\253\240\351\223\276\346\216\245" @@ -0,0 +1 @@ +http://m.blog.csdn.net/article/details?id=56674070 From 93890b3835d47116fecb6ec598652aec3e078ce3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=90=E9=98=B3=E9=98=B3?= <1425809544@qq.com> Date: Sun, 26 Feb 2017 00:43:17 +0800 Subject: [PATCH 165/216] =?UTF-8?q?=E5=9F=BA=E6=9C=AC=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../1425809544/{ => 02-26}/com/xuyangyang/util/MyArrayList.java | 0 .../1425809544/{ => 02-26}/com/xuyangyang/util/MyIterator.java | 0 .../1425809544/{ => 02-26}/com/xuyangyang/util/MyLinkedList.java | 0 group08/1425809544/{ => 02-26}/com/xuyangyang/util/MyList.java | 0 .../1425809544/{ => 02-26}/com/xuyangyang/util/MyQueueArray.java | 0 .../1425809544/{ => 02-26}/com/xuyangyang/util/MyQueueLinked.java | 0 group08/1425809544/{ => 02-26}/com/xuyangyang/util/MyStack.java | 0 group08/1425809544/{ => 02-26}/com/xuyangyang/util/Test.java | 0 ...6\214\207\344\273\244\347\232\204\345\205\263\347\263\273.txt" | 0 ...\345\231\250 \347\256\200\345\215\225\346\246\202\350\277\260" | 0 10 files changed, 0 insertions(+), 0 deletions(-) rename group08/1425809544/{ => 02-26}/com/xuyangyang/util/MyArrayList.java (100%) rename group08/1425809544/{ => 02-26}/com/xuyangyang/util/MyIterator.java (100%) rename group08/1425809544/{ => 02-26}/com/xuyangyang/util/MyLinkedList.java (100%) rename group08/1425809544/{ => 02-26}/com/xuyangyang/util/MyList.java (100%) rename group08/1425809544/{ => 02-26}/com/xuyangyang/util/MyQueueArray.java (100%) rename group08/1425809544/{ => 02-26}/com/xuyangyang/util/MyQueueLinked.java (100%) rename group08/1425809544/{ => 02-26}/com/xuyangyang/util/MyStack.java (100%) rename group08/1425809544/{ => 02-26}/com/xuyangyang/util/Test.java (100%) rename "group08/1425809544/cpu \345\206\205\345\255\230 \347\241\254\347\233\230 \345\222\214\346\214\207\344\273\244\347\232\204\345\205\263\347\263\273.txt" => "group08/1425809544/02-26/cpu \345\206\205\345\255\230 \347\241\254\347\233\230 \345\222\214\346\214\207\344\273\244\347\232\204\345\205\263\347\263\273.txt" (100%) rename "group08/1425809544/\346\226\207\347\253\240\351\223\276\346\216\245" => "group08/1425809544/02-26/\346\226\207\347\253\240\351\223\276\346\216\245-java\351\233\206\345\220\210 \345\256\271\345\231\250 \347\256\200\345\215\225\346\246\202\350\277\260" (100%) diff --git a/group08/1425809544/com/xuyangyang/util/MyArrayList.java b/group08/1425809544/02-26/com/xuyangyang/util/MyArrayList.java similarity index 100% rename from group08/1425809544/com/xuyangyang/util/MyArrayList.java rename to group08/1425809544/02-26/com/xuyangyang/util/MyArrayList.java diff --git a/group08/1425809544/com/xuyangyang/util/MyIterator.java b/group08/1425809544/02-26/com/xuyangyang/util/MyIterator.java similarity index 100% rename from group08/1425809544/com/xuyangyang/util/MyIterator.java rename to group08/1425809544/02-26/com/xuyangyang/util/MyIterator.java diff --git a/group08/1425809544/com/xuyangyang/util/MyLinkedList.java b/group08/1425809544/02-26/com/xuyangyang/util/MyLinkedList.java similarity index 100% rename from group08/1425809544/com/xuyangyang/util/MyLinkedList.java rename to group08/1425809544/02-26/com/xuyangyang/util/MyLinkedList.java diff --git a/group08/1425809544/com/xuyangyang/util/MyList.java b/group08/1425809544/02-26/com/xuyangyang/util/MyList.java similarity index 100% rename from group08/1425809544/com/xuyangyang/util/MyList.java rename to group08/1425809544/02-26/com/xuyangyang/util/MyList.java diff --git a/group08/1425809544/com/xuyangyang/util/MyQueueArray.java b/group08/1425809544/02-26/com/xuyangyang/util/MyQueueArray.java similarity index 100% rename from group08/1425809544/com/xuyangyang/util/MyQueueArray.java rename to group08/1425809544/02-26/com/xuyangyang/util/MyQueueArray.java diff --git a/group08/1425809544/com/xuyangyang/util/MyQueueLinked.java b/group08/1425809544/02-26/com/xuyangyang/util/MyQueueLinked.java similarity index 100% rename from group08/1425809544/com/xuyangyang/util/MyQueueLinked.java rename to group08/1425809544/02-26/com/xuyangyang/util/MyQueueLinked.java diff --git a/group08/1425809544/com/xuyangyang/util/MyStack.java b/group08/1425809544/02-26/com/xuyangyang/util/MyStack.java similarity index 100% rename from group08/1425809544/com/xuyangyang/util/MyStack.java rename to group08/1425809544/02-26/com/xuyangyang/util/MyStack.java diff --git a/group08/1425809544/com/xuyangyang/util/Test.java b/group08/1425809544/02-26/com/xuyangyang/util/Test.java similarity index 100% rename from group08/1425809544/com/xuyangyang/util/Test.java rename to group08/1425809544/02-26/com/xuyangyang/util/Test.java diff --git "a/group08/1425809544/cpu \345\206\205\345\255\230 \347\241\254\347\233\230 \345\222\214\346\214\207\344\273\244\347\232\204\345\205\263\347\263\273.txt" "b/group08/1425809544/02-26/cpu \345\206\205\345\255\230 \347\241\254\347\233\230 \345\222\214\346\214\207\344\273\244\347\232\204\345\205\263\347\263\273.txt" similarity index 100% rename from "group08/1425809544/cpu \345\206\205\345\255\230 \347\241\254\347\233\230 \345\222\214\346\214\207\344\273\244\347\232\204\345\205\263\347\263\273.txt" rename to "group08/1425809544/02-26/cpu \345\206\205\345\255\230 \347\241\254\347\233\230 \345\222\214\346\214\207\344\273\244\347\232\204\345\205\263\347\263\273.txt" diff --git "a/group08/1425809544/\346\226\207\347\253\240\351\223\276\346\216\245" "b/group08/1425809544/02-26/\346\226\207\347\253\240\351\223\276\346\216\245-java\351\233\206\345\220\210 \345\256\271\345\231\250 \347\256\200\345\215\225\346\246\202\350\277\260" similarity index 100% rename from "group08/1425809544/\346\226\207\347\253\240\351\223\276\346\216\245" rename to "group08/1425809544/02-26/\346\226\207\347\253\240\351\223\276\346\216\245-java\351\233\206\345\220\210 \345\256\271\345\231\250 \347\256\200\345\215\225\346\246\202\350\277\260" From 3b471a5336522a42cb6378a8a718069fb2763e38 Mon Sep 17 00:00:00 2001 From: zoakerc Date: Sun, 26 Feb 2017 00:51:20 +0800 Subject: [PATCH 166/216] =?UTF-8?q?=E9=98=9F=E5=88=97=E5=AE=9E=E7=8E=B0MyQ?= =?UTF-8?q?ueue?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../group7/homework/c0226/MyQueue.java | 22 +++++++-- .../group7/homework/c0226/MyQueueTest.java | 48 +++++++++++++++++++ 2 files changed, 67 insertions(+), 3 deletions(-) create mode 100644 group07/562247675/homework/homework-0226/src/test/java/com/coding2017/group7/homework/c0226/MyQueueTest.java diff --git a/group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/MyQueue.java b/group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/MyQueue.java index c8f2b4c733..c701c032b8 100644 --- a/group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/MyQueue.java +++ b/group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/MyQueue.java @@ -1,19 +1,35 @@ package com.coding2017.group7.homework.c0226; +import java.util.EmptyStackException; + public class MyQueue { + private MyLinkedList myLinkedList = new MyLinkedList(); + public void enQueue(Object o) { + myLinkedList.add(0, o); } public Object deQueue() { - return null; + if (isEmpty()) { + throw new EmptyQueueException(); + } + return myLinkedList.removeLast(); } public boolean isEmpty() { - return false; + return myLinkedList.size() <= 0; } public int size() { - return -1; + return myLinkedList.size(); + } + + private static class EmptyQueueException extends EmptyStackException { + } + + @Override + public String toString() { + return myLinkedList.toString(); } } diff --git a/group07/562247675/homework/homework-0226/src/test/java/com/coding2017/group7/homework/c0226/MyQueueTest.java b/group07/562247675/homework/homework-0226/src/test/java/com/coding2017/group7/homework/c0226/MyQueueTest.java new file mode 100644 index 0000000000..6bcae88530 --- /dev/null +++ b/group07/562247675/homework/homework-0226/src/test/java/com/coding2017/group7/homework/c0226/MyQueueTest.java @@ -0,0 +1,48 @@ +package com.coding2017.group7.homework.c0226; + +import org.junit.After; +import org.junit.Assert; +import org.junit.Before; +import org.junit.FixMethodOrder; +import org.junit.Test; +import org.junit.runners.MethodSorters; + +@FixMethodOrder(MethodSorters.NAME_ASCENDING) +public class MyQueueTest { + + private MyQueue myQueue = new MyQueue(); + private final Object[] elements = {1, 2, 3}; + private final int mySize = elements.length; + + @Before + public void setUp() throws Exception { + for (int i = 0; i < mySize; i++) { + myQueue.enQueue(i + 1); + } + } + + @After + public void tearDown() throws Exception { + for (int i = myQueue.size(); i > 0; i--) { + myQueue.deQueue(); + } + } + + @Test + public void enQueue() throws Exception { + myQueue.enQueue(-1); + Object o = 0; + for (int i = myQueue.size(); i > 0; i--) { + o = myQueue.deQueue(); + } + Assert.assertTrue(o.equals(-1)); + } + + @Test + public void deQueue() throws Exception { + myQueue.enQueue(-1); + Object o = myQueue.deQueue(); + Assert.assertTrue(o.equals(elements[0])); + } + +} \ No newline at end of file From d34ad3db2628a745820239e0c34d3c7c52bc906c Mon Sep 17 00:00:00 2001 From: Korben_CHY Date: Sun, 26 Feb 2017 01:18:38 +0800 Subject: [PATCH 167/216] commit Korben's basic data structure --- .../lib/hamcrest-core-1.3.jar | Bin 0 -> 45024 bytes .../1107837739Learning/lib/junit-4.12.jar | Bin 0 -> 314932 bytes .../src/org/korben/Main.java | 8 + .../src/org/korben/list/KArrayList.java | 169 +++++++++++++++++ .../src/org/korben/list/KIterator.java | 10 + .../src/org/korben/list/KLinkedList.java | 172 ++++++++++++++++++ .../src/org/korben/list/KList.java | 35 ++++ .../org/korben/list/KListIteratorTest.java | 36 ++++ .../src/org/korben/list/KListTest.java | 142 +++++++++++++++ .../src/org/korben/queue/KArrayQueue.java | 111 +++++++++++ .../src/org/korben/queue/KQueue.java | 20 ++ .../src/org/korben/queue/KQueueTest.java | 78 ++++++++ .../src/org/korben/stack/KStack.java | 72 ++++++++ .../src/org/korben/stack/KStackTest.java | 71 ++++++++ .../src/org/korben/tree/BinaryTreeNode.java | 127 +++++++++++++ .../org/korben/tree/BinaryTreeNodeTest.java | 59 ++++++ 16 files changed, 1110 insertions(+) create mode 100644 group20/1107837739/1107837739Learning/lib/hamcrest-core-1.3.jar create mode 100644 group20/1107837739/1107837739Learning/lib/junit-4.12.jar create mode 100644 group20/1107837739/1107837739Learning/src/org/korben/Main.java create mode 100644 group20/1107837739/1107837739Learning/src/org/korben/list/KArrayList.java create mode 100644 group20/1107837739/1107837739Learning/src/org/korben/list/KIterator.java create mode 100644 group20/1107837739/1107837739Learning/src/org/korben/list/KLinkedList.java create mode 100644 group20/1107837739/1107837739Learning/src/org/korben/list/KList.java create mode 100644 group20/1107837739/1107837739Learning/src/org/korben/list/KListIteratorTest.java create mode 100644 group20/1107837739/1107837739Learning/src/org/korben/list/KListTest.java create mode 100644 group20/1107837739/1107837739Learning/src/org/korben/queue/KArrayQueue.java create mode 100644 group20/1107837739/1107837739Learning/src/org/korben/queue/KQueue.java create mode 100644 group20/1107837739/1107837739Learning/src/org/korben/queue/KQueueTest.java create mode 100644 group20/1107837739/1107837739Learning/src/org/korben/stack/KStack.java create mode 100644 group20/1107837739/1107837739Learning/src/org/korben/stack/KStackTest.java create mode 100644 group20/1107837739/1107837739Learning/src/org/korben/tree/BinaryTreeNode.java create mode 100644 group20/1107837739/1107837739Learning/src/org/korben/tree/BinaryTreeNodeTest.java diff --git a/group20/1107837739/1107837739Learning/lib/hamcrest-core-1.3.jar b/group20/1107837739/1107837739Learning/lib/hamcrest-core-1.3.jar new file mode 100644 index 0000000000000000000000000000000000000000..9d5fe16e3dd37ebe79a36f61f5d0e1a69a653a8a GIT binary patch literal 45024 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 UgpPtD2z>DYYp}SJr5?)v0beu;=l}o! literal 0 HcmV?d00001 diff --git a/group20/1107837739/1107837739Learning/lib/junit-4.12.jar b/group20/1107837739/1107837739Learning/lib/junit-4.12.jar new file mode 100644 index 0000000000000000000000000000000000000000..3a7fc266c3e32283a2b21fe12166ebdcc33a1da1 GIT binary patch literal 314932 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

&R7;REBZd0NaNVcN6Eoy zzIyDIY@)aZyH0yJ8|zo4qI|P!k>nhi`Zs+K#eHSn4BvU z2F_MUiEGJpV~7jUWy?88U(!)p$SG*0Bt7)(WlFJN4P%Gsr2*ku;Ebl(GCe4tUG__< zk5Jg)60yMZQF%h7v_P2l4Gopa7w|D-hwRiRDn&GL9L_gtIFFZqVvEhaZDxb zntgQ!TPExEQL3=8-#I0_AHue9FMDrLgTXUaCdhynqpSSkp?`X5oI5dEIDIf{D@gvQ7^yh!n3poDBZ>f zkzY8ixg6vu@(ZrgefZV!s=Y*r!iKI!DYEy_#NT35br2bWn`s~f>YX9~s!RG&ZfX)F zWdyq%Zj@O8twnz90g}K+m&sXV(WUzW+4+Vws-T*fHFwLuFgd6C6`@qbO^X-^l*&d4 zGqP;;5++*!GJ9B#d)8YS1KKr033)JZEoNTN_r%9C!)vCSuoVY=zs8R%AhEB;%o?r4 z@g`d(V!=b8((9j{*gs~`+PcO3^l27NpXuTM-PHdw3sUC43?u4~Vf?`mNw#0DQkDS@ z3?l@Sfl;NW_BbfBqzXqwzPGZJ;5J_mJfA%FW~;5j3D6L0DL;P51{z_MPp5nx(x z@mUvp$h^`u@BVmuL+b%bK2wZoi01s}x^x6QTp{ zq%({Mu*6(s9GYq9pH!7h8vJo>Vjr1a6|#n!(n3 z2EE2bHizE4-{jzoM%_#(r@&b%l&^7=Z1jg(asRO9{Uh>!bGUw2LxeZlo+46Av-D2UtPC| zS@o^iL+O6^gOk46AtK*m8;P53AC5M!XU3;%m$`5Xq;Pd@SHD)5$kDV3{e3ycr7?{f zSGs&BLefL6Mc+`Ff@C*%T5hbFDN7*RY36h#1U@yT3S$Zd$N;=Y)T;6G}Z+#Wff$%zzxHoqN?xKrD2S zm4nNXk^})4&&tk0y5glciG5XZ(YU{km@(2Gu7iNQ=pE?*Az|xK$bSHeE80?+!F-qz zmQLKkIfYK^0y*|7fxGH{zb9$<;4p?61P#eWs^%1r9i-GUDU<`JWk#ivpc!z;8I|y|YL|5}UEYczRGv1^8X}V|wSqiim zY_HuvZ~^Y5cAu+*FB{1`Eh^*o^NOErSMGPN zR@lNcxrwN`);G_Tm!wdxHJpW0$`u||%NhoVd9d~H~DI5IqN zl*nal;=9X&?UOXD--7@-<5Xv^3(%zEsFAlNlc=?jnA2EtIT5q3p;6q=pSgG)LmCkm z!AciR@}VttRv@gJmiQ&06h#8;^V37uzbIPOo`e6Swb!QoNU3=4=C#Sg6e51wO8KZ2 zjL;C5@uJHjG*2e&xtPPl5-Hg6csToxTKx;o_foIZkl%vQEw;@!>bd)G@{koD?Sh0k zJzlJKja$dK>n7{Bwrn-<1%hS3KL_#%Abe89iDjwMY%`o1LM+Ozo{4t!TV`iGV3o)C zK*lwh9sT9fv!EA|6_kZ;ytWm5_5(y10iPJsQN$}%Bh)t$K z`x=iXRm<}u2>VW2y}Vwy?!j`u&T{?!Zk@M#+ZDtcB`&8>u>hkWjsgg=4sF@{Aw=t!{|6${0r&_YIRh+57|1EDdf#`Zdi((va3 zIyh0R!TW;>6Ud|AP(K1002ttDPQMlj4q7ro;8VixiH>aDIetD~WKTZd|1ZwoF+37( z+ZOJyzUs5z{hfF3XW!@CbAQy2`dPK+nrqH6 z#vJoy-R%>zhEm+1GdAVKNZKTUKMt1jPDzwD4Ck@&Mv8;DAolz#-*mbO){_Yh6p6aN z8WkuC+Vc8bE7>_iT z^S5{fNFosHGb8;fISub4r8=rX{$=+JkvR!h+E|+5V-1gJoDN~Z0u$nWvsAq5h zD4hnI7IfmW(p7oLl%e!hHys?(Z}Mj)SwC6#0<{9 zcxIC@GDAt2$}EB1xktfq%7+!W*=9u3Z|<+`Q6IUeCX?{rD}Iga9hqV`at&%wc`7Q+ zM&n`ME_v1%B7ITO5!Exe;W3@U!oajU9JUDGd>AU1M^sSf0Iaf|xin6ZK9rw`qzWvb z#y}tJX^90+^^+->o6O0)Co)L23Z;y269D{9Pi#+jr{b?cSCJjfi8B}CeBya(%~Q?Q zn|z?EpCRV(x=3f_tv+A&FeG5+dzmF6BKeB1wxJp}E(-jRX_4~kPqey&PjG<{Zem)u zx??b{c}5BUazgViu%{`>Euhq=m$r>hB{#?*v$^z+QDPzQ0@vbz$xm@}su}=MRArGNsM0cWtWwYmOW&kr zQFoWfwE9S?f8(%UqwEe18Z-JJYXb>a4UrU59eRrFAwE&FL)gO*Uy_e8pWxwAn9<2* z(7O4x3zfec?o;2=d^N6N(fi*hz(1E_WR1vw9M~|H0|znx=luMSOY#33PbtaTp)ex) zY*{y4vgH#dT`PeGC7=%=*ObFh_?1cQA}(|`HYyRSJax@(&I{FRCIMfE67wZBbkdtd{8~Gt9HnE(Yr? zlaPEDJV_RdyD=6jH0%*%+78BSHA-oUIn?~`FYp(zq#%ZC)ZHsR*q4i%V1q7g9>mm6 zcTN#j^fV#oHd$ z+d`<@&Tg@56w%|h&vQJ$*nKtzXd?()%zp?_mt4&_ssDRWO!r!+)B?LeBw%3B{a<#2 z|IKwr$NcGW5k)^#Y?@&_qg;&;H`QC^=#$b!lN=i>-K5!G?XL6Dhsc?e7dr z*vM6hliH4-P2{_-X@lLa|zY>0$wosZu#Zwtx2#C%NtEsRe)*)n2mRfR!J z7z9mQvc_3AsM?kA@iRIQ67H^yRd({a8%CT+V-qhCx~RVa zyXzGMlAjz)tO3zazv29_>3X~7##cs0>7QvhVxCOG+p`&Kr>i*UCDrX&VOM&ZH--~= z{0$3lTt-JXgKq{so@K2W#}sqT+_R>=z7cXw7NS_$-gHkk3?Iwtwc2~Nrwor<@Vv^? zx^W1;@7E`8UO7Z&>(fhPMLDrOseb$|oBlyLr4FTH?t$e+A=0N$1pn#c{58hm_}9#8 zwfZkN6jjuBJshq}2HNIeAv^RH6LiGX58FkMB>DB(m$0Fvrj1+Sf1Lon0@czyZRe+)rvi5d{S@Oo&Pnp<*x= zM^TSTdFdbk4F;KqvuaO{M77A^mSu7hid}v>2wvR3vH(3?%D9ccV2>i^_M|Ps?4~N> z_~v^6hRQ^Lr1u$kZPvl8G*GZjz43i)ei`+9O#yT%YL@93IJ=ofE4xb8U?z`eq`2Mv z2`=9qU96n_eNDiVN>lyOHLQx3#j;FV2<;5A^t$luZj?!fBDaxd2<}g|{SK>=YID1x zv)f>9a4NPmk~YOWo(&!X#50*M*r1JuB_Dvz8ajN}yPJake0SLS<+No0-1#>_roQFJN zjRjIhF?rX<3HMc-SOqZ!sg!^^$6cDhymOE7U0rHmd6F%>Bj5Fc&G5<3`SLFFDag@A z=0q|O?N;}G!)^xh5|#u&q3H6w8{u$}$`EwT?p3Vj2%nLfLIU#xZXsf$d1evLB#`>NN{|45sz1zXJ! zEx63Rnj{#sp<{U_QBTRr9hDIte@7Ss-{KkbnB}X8PCuFTY#ppNYS!`%G#^?TH|Hqc zSlXyy%PMo>X;^B!EH+>NF--T&4e4)I?_ggD3>NQbJ5=w=U7~Ij4dgu49}W|f?J2qr zlKsA4XKr|X4OAgfU&{c@zH>LszPrgjD(PVMJop?rC~CEd5JTgi#NLu=C=*1nefv$| z)$Ij(ud&~IRNki7-m0*m5`I!`EJV9k=VDVWDl2JsT#}&WL*Pay&;kZ zh<1wt8_8Ev=vhq20ID4p@>zPzpR_8z67xtWyk-$-F;)F^9V_aILdt=5hU9x})pkmi zeetb}Sae_-V)b+qz3En})ih8YQyuXbd<1WK`!ekqQxc&Ur1#?!9Tb(|FXR=CDq|;~ z`w6^SI~zd-QoItairUSR%eH+)kkrZL#t`Q#rmQxbm^P-~jDQswlCV5Fz#8PaG=Wcz zZ71a6!Q3ZtbUdSZ+v26;AAny1J|N2MJ~LdQX_kN;FDj=>k5AI4PFzwyAd1Mor37ZdevCQ#!Y=pWjIKg(xyt=nWM7 z%%-3(Z~P^$AYg=TS8&a!f$mH*eoWCkUQtEA#GzfJD(<`zCaJmz`wj7DHi}wD**A@| zS=#v4=MkT7ti^6Dq`59rrq>}*(aL(X^-r9JM2Z3`wBbSW4^VP9=SMH+poCL-zRKh9 z6Udmtw6mLv>Zzh{6sF3VgIP4#TH=hYW^nhetvcfSzZHrYlLlWUa8|Pi18C6ord}EZ z`&^6|DVw53*21h=TclN&-Bo;7+?#NDl?G+!rcIm;30)1yDHp{??=U?n4+6f=URSQm z@s2CMn#MYLUY*e2xQ-liNXDwrX>oh!swtK=5q#rQ-I=cVo}jAys>#}$yO}_O(Z(Az zGFl|2HDVU&y^PwBmQXyJIM!Iklxbj(I=EgfI3Ifcy^B_MdmR= zd7y0gHt6Ay?&2|@EpgeHY8K6UPkTsuG^s0+*gAf18E@9W+EqYgOtlVT> zyHR5cr9DDH8=bn1JoKG>;}HGFv<8YvrduA=KFr1RCy1aZzzqz_lCE-z-22R|BS>SzEpF z+Ll(UiEENDAhVCc2AFbXKQUXLiNgKNIi@Cj z$v>0oO-}Q6WJ)_0Brsk+RwOBV7(pnunlwZ<9OaPIyq@F*3LUpD-=r1+Ba!r5V|~;N zn1Ku_F$5VR5A0WOMg0S0mShcO=PQOBueD!8=0HJMw$aXnM3CGpeA{QU5;+y-V0GqJ zEP;N-al0xZ?4w|%{0;Z5LKlYNe4Lt5G?8CDvI~^^Sh=FrUO=kepe}QW;K!j;OsPf+ zrEm`Br5YBKMtiVf1_}YZm#cp11yLO18iMce|BdARu}9e8Sy;{j9?>}Pga4n7>aQ8c zzlvcO8Re5obp&Z+b!QczVOwEbAEc`g}d!j6Rxw{hR?$cnAzan(A?v7y_UAIVj&^ zrVj3!M_9PSD}#{D8iPZ4JPmLQ{UhyoDk+6sa*oaPJcF~EGvpZ|n9**_9_ulBbxOyz zmprd(UmM-6A@Mb4TG!4G4z-=#4g-^}Xc)bzQ)_9Vs{Nv_y!}cbo#2==gq3|p_e+H$ zdvh^qh%T!DoTY)O5VceTYY*IKt9*I~b+;(d={j1ald6rqz`)D@Oucv3noZd)pR?Q5#cnNubF?eNlK%EJqCO(!fu9GdNwB7THnNPN$F< zY(N~b(YoVqi6VE(R>}H{6^6B?F*ycZ`axvNzNm?-hnD;#_am=^6dPxIYv6$G0_%41 zj#DQq$b@5t z%0yZ(O)5JfJ^^En23CfUMkLd5D{WmT8;C1x1o|Y}y!joan?T-dD5E{E5K1R?Czk0g z<1ZE6H54#bB%k`zN5Xr5XCe(-GG)w{P@g+Zt#%hW-BFpCGbQ1pxF&FfVW4_v446Ih zgzulo8-BH8E+UpnN1<^Je1!*q_hIbal8T0mu#lVHBEj_-s)N8yJ( ziTQJHOn-`4E<;54TrFMoD?Yzd&pDu989gT#l}B#R?3KunyEm@9l?y|OhV~;FFfH~K zOH11JM~40mSNP-dxGGhAM?Y(<{OldfuN!8)LZA}+5{VtIu*9RP9kb-f6n3h`zOBWqUDHS7K7dR>iJu4OH;BQ)j4{L}rvue{OAyh-&}-c7?cUDz~&Q=Ny|BgIl1F z`{s@Dg=Msddymyo7evarsp zC!KE$z}-(rV|m~cy?_qKCW(@QA^1u5HCdrtAiH}mK^nFrp75CrdR=&}>l`vz4L^FA zq@2b=q4x`XEMm-zWL1GfNE&;x4CI7-5~F<3kta0?=?Th%k0b7HCPO9hk#I~$KKR7{{zyX}QOVlY8 z-|+f4oxE1R+w+9m!MIye>|i->h-%a=-No)U)uYHZ5xOT)9irM_hG7~A(jxv@#PU$4 zla=O~qYpIu9=m~5&jCT#aHy1Lf=evQaa(080cq5nZ?a4xyqps^iN!h=80~YnMO5RH z5jt3;+k`_S(?*E6(HRO*&V0r)>9dqr*EM3E8e;13(~<6-5mt9;vnHeiT;g0p)P!p`l|(`s%C;x;togWOKOiFI!V zQJaVK3@{7VV*U%u&o4N^oW=vx69;=yT>OzX^= z7TJ##71?`&grY%FZxwLG7gWo9(w%){+$HGsO;;xE2W?GrN{W-r0DLK)MoP7dx!;b* zQyX62jwcxSzxlkw>@ae{Kb!y3u*(ZrqB(0j@8iXP@@axdv3BK97^dL>UKXrAZXacCMH-ss_+STe}f`g=6wh`~vfW>8!Y^R%ijHwv1ax zS7ErSH8^ihVb#|+?B5KoV5#h;72lS&c>gVGEJ{gP@o)ICOrX)Ecx{kMFp8l(^l> z&ed;!qc;B>JPZrF4mz-ItpGxWg#W1^`eU)_0wj_CiI*oU>;6#$@Xn{uZQ5EuR1tv| zh_2a~?9K|f*HMN`{_M4J-?dnmYY}egob=6mr^!wrxdQ8&4wYV zv+vNZ&>{DQxAGdXVdE!cij(Cpp_)`$otk;-y3#O-%|j^bWo}hsPmFEeBsqqIImraNBYB{&<>R z&Ca3GPJL6$cnlIY}8I=%Btb$XVqnEr!PCvpp;6sXg z6Sk#JsU#aH&w9W!jDEy_Lm-WJxw94GjX_x_Xr5eIFOWLiV#_g1=SkLpt;hEL8~*$! zsD8-n)+qq9i7ha&2>w%0DgC1u{bx-109zg~AO~a7y6LKGU9JCy%=0j#W>0w{d8>pP zbe1o5z0TG|xeoqR_(NI{iRX`N$eyvT;DC(~Q(|g*YHE7ybgSDZ-mj?fgEGNT0AQ!49XhL`g(Xyp5(9*v#O5ISJlC2sdV9FJdub`mi3t75m4%vT4P% zf4h$16`}%Tb?AyehxL&YAkK>P1A%*NE;;eC1qMmR2Tvb95nfO=UODBIJBN%4`&u?@ zM>RLvFBD(W2PfA)hwt|4bm8BVP~;(mrfl6g)Rl2uSga4?S^)*43i24e3bLI=hHokl z&a(AN-y|v;FQ=eF7ia^qhsR8+!@tAPqCilo$A3rRvKlzU>+*BakN1c$qFK8~1(UFz zu^sLfZ7Et+7*gxoiCc7QzhYk5&o%x@&6!GKrWjt>QZKxe*B&{Umc=3*+lTS5J&%qF zM=%F4ua5xR1M2^D8n$-M7N!UI5V-Gz(ZIG;jzJ zRFR$liZ7wD(wbw2l3bEhXSH)!l*~-~Uv9)Xw`7f=ivu6~O`ooKkNKu#fr7Z$+)sE0 z!s4IFGG=0iEj%o7m->Hf@uNVb4={1M_8EYMouZGZ5z(5?)fA{Wv`fl_3ZRnS+tRK?aU9x zwA{Iz6zOx5E2Q(Nu4MN7qOV>!FD)*{-LFX~d`D7`e%}t#LD}!It`n|N!Q0v7qzlpk znDTm4S{S)&hURIFt`NdJ)Ux$jTpLJ_Ast2%#?@cZM$1*WUWOpu^ts>yF#^+5sGp2u zD$Ua&=wL~;Nmst((C}U@p`(w(x(Rb!73_5OnVv|LfR@*Ewy@lb%nR8bXRL_(ewY^u zrU?{T9j67#Ms=u>BHE~Ou}v$MhwQIztsI>}ACjxqQ$xpi$5N}tvO3yVB5*m> zKn?GD7%nbXCuF0*D!I(xys#AbL3-Y<^~gS8w)xw_Yl2ZrDDE}Cxhp0>Sf==sC_$>- zh7hu>mI5Yw(i);DRK&ZSvDVHH%7}ijGDLYnZUM3ZJ3khR1$oCWCa3&I+I#D^xQTwK z9Fb+IG%oq18+MP(QKCN|tNKcmiRsb6IHm6D-R&vpWTE_^SN>MXL(ig_s2c3;prUkJ za5m5}?u74s$erktEMt?O+YOCNP>wX@qBF?4<~ApdCxn44#kxkG6!frgQiI{s^f+&k z>D~7bRVv>z*FOwZ92$f4e&lcGQ3t7IH}Cmb7Bi22MwiPUiU(8k^Y?4Xtcy*N3fDkX z3K6diF#ZW)&x%g--`ssBEZ)_3?4FN+*!i;O=PWo2xL?mvv9Umg$DQRm(rs5QQ` zVtzGoC>WvkWz#NA^)T_AgwNw%JY>YyY9Q!2_s4ZxZT zbC(lB%Q2hOM531{8;q>VAC*Q{V+e3UK3k3PY;o7?8+Q)|>89EX2qM!lhWGK16=K#i zgO}Zko9Q#wS~-w~7G#6oqe1bO9#|*ZLb|Q_^i2d$@i$5dR{<55>A3UNtQrj(3;GD0_R z1k&Q7BxJ7*U8D&Hc$J=pADq+8!`v;lQB)b>=UI?Ji6Pl3#j5*yKeT(>!nP5D^)qSS z(gGNAwy(KfCahEYtZixR)!8}_4kW}&38koqk&y{a8YuS1ab8pV<^$+u*|_WFqcYxh z)C}uPmi02y?adT4svqpkjW!-bl$~(IoW1g)HU`Hg_=?+QDKo25OM$LsDhd&g6&(Q6 zMA3vo#X*J)ZZ57en8SEt*P+&_YV#arT+IQwkQIF>L%!j2&c)FT_yH72lAmRBl?^D> z_B&0?jQj|Darij(qp>#b0s>a(G#N7mlDg_F%nR9RGVtc1E{iIzryW^_JigY0Z%Hva z1aww~`R~R&-Te8MB?apiga#(9Rq?dZ2Mc2DiiNz<>DWUY^uJ~U^^mTA-SW}FYM9u_ zr&hKjt;;q#|QZp=Eii2fnsV1j(17 zANzPuIx`q3<^I0Kx_1XDz)9OUj?9>>X_X{x;dYrxb3uk+utBY3t4%_=4aV2sqvi*q z2M~%kVUg%04e8-J^b*F>f}O1m1g|L#1a?Sc<<_8ZaKN=Y9l|XK(;P1*Dn_cZG3bmg zsyK(II(*!Nr|m+k2WvTG*Ot6v^vo$dDu?1|i9Z@o)Zm)9*zN~wyx}I7dWz{B`c$HI zX*7Qwy*Z~VR3j?jrU?%ud6vbciXwE5!0!f(9TZ%{&{xB*c)8`pu#1R3Cb=h*d_fx* z``xny8FN@?akWWMA@)UAlk%O2v=;X}_vMj~^#bH?$6sl9zb+qOL2vRBHevEQM$EM9 zG8etD)n~AE(H2~1t?|DD8Iyqd8%VPqoD8v9S@(dgOp5Ma(N<+`$sc;=D9z0p5nL)L zD+qN$Bf<43UzFqp19Z`E96%oxeso;A(WLuxsAw`p&#m|3LwDN1%+V%!*so01MXW7S zh!aO=a0uIA4;mU2Zk~`KfOw(r+;z649PC);vkB-3?pbQb!Cpi(wn0inTvm|p+)>eF z3k{-$*(~qo_BQ0RIT{^)VN+zp*xLD2+uD0>BmB4ryuHJq+ldcH>?Ub6_>c3C~OFHsG;{M{Yd`@J0DUzY@^$e!X*mZSeo9;|*cL ztRbk_c=rf*#wpy7s@9%uGc&E5D0B?I>NC{4V8G0(F?L;AANw2a;R6#v!!&3#)%u%D zTz17ZMit&&i>PlO?>yqhQdVK^=rQisMK*C(B1{sIFJ5e#OGOGIyI>2|KZ3EB~+_q_0H{*B7 zOMT}ypeX*?ET2h1F@XFwX%KC14NMenGy8@WK{S$p850>#Y~e8{bvSyYa02Ov+^w^D zxP=2>gl0ae(C*fqL6CHeQZUG`MpRstH*O!i9JA7;WF@?!56kNAt+ULk?$tBxD!#O< z_rD?2e_p=?G24t^z-Ay6*kS&sJ(mB+*YBU*L9()}9dMh2Pi7mNgREt-Lbo(52zF=m zX)qW8iAqF}v8QFFGD8< zylnT0ZPvyBf&FKbVgEoyw04_KzRfN|e;-opx=*~QRQI?^1_MoKIW}adDABzDnk13R zjdjaMSnq^5lhwA_%}0~WoDPEVK(j@iHVOBk7RBYGM#3&ii2Ws;?+4lZsu@GeTz8&` zP85n2gS>{EM!Coc%RYz_$A6fCYS^^qnS)M}YrMVI91%KA02V#5f{ zhLL&7624ISVL%pE2ihD@JsvrcJ4=PiVmZ$2NpWz*fKz#*(>KCZ-UIQhv4(6Bhm29< zXQhL}COg2S;OCq`NbAq&Q=Dm`c7V-ZNFJ_tI1>YRh0TuP&wIv#i~LYLGH6C(i3&g^}YRquxgzSp@_Pb@a#mp9+k8p+I$N-+V!dij#I4M!av zkDnwvprU8eLWS>mEWSuCNp|FXgFC9mFFg9CukfLv#b&`)9_+8Kk+(|elKL*1fMJdq zq*LSpol1t3o3LQU;(d)`nG2W@T0I=HD!4C!Yh_`}3YuRt(aHB~>~Ybd?W*1N4BzZw z(kg0(%Itq;hVHUj@cp;Ru&*rkaX*1^yh{r&Uv z+#lT^pKjnbAx&=t+{W2tc$#jZsL|KZ)vzv%@LHAQ(Hy4gR;1?u_9_(VpDpr}Bmy@b zPtgL?fg!|ia`WM=BuV#~>7ZRkrB1sn+mTKQ_fachA1B1kNqAs1_70#e7*_g2qo__)b#eDKPsaiI&fT z2a0p8bw_z%(}G|vV6e+yC;D3Jt_;BNY`z7vFnlk&>H_ zz96kbQFfzeyx84O5Y4p=B`U7%3?!V2lC2DmU*}I}ZD^2pliFgqO&)Y>)#3RLM z`%D>r%Lw7)G;jZFCC)H#j{hfy{QuW6^p~1HS$X}>W*OehA~pvZt73(#;@}xJSDe5& z_fJ7VQt@#z_!5gx)s2!ZOl(@~s^j{EigE5cV9&tCGKoVQ;5F6R>r)ds>Dh0OZ{zBp zzRXw|BDAt<)*Bcs_Tg@@&N4d00(Qg1v;8H6Nw-ay!m&~UMWSE(c~a7A?>NxMzA0Yu z0~i|WWw@WPzVq_}k4_lN@$&4)=>Db_B%d$vz(97G3H#A-mmD0@~k^4P~R=z@WQzb#p++~xgWMe}n?L)1{&FAOB0qC%wb$R~A zOdh#FN1@^4b#6cA3r}$4DWHWOzpudR0mnDVi@p)N3(^JU15HEXAerhc6l8rD>gHp3j( z4%m}=pEW}uM6B}FJGdD&{QNv8-4t;I=lK@eS?9F=SVwH1QJ#__8)HpNdM+zrb% zS#h^9h$@AHjq{0vu2Ih`gy302aML6RI4GPbieEFx#irH#Z*vfL8dh|pz!UHU_SOHp zs)FSo6nODplWnHj8s^JNbbAojNprT8uo3PcXAtEHNf}VR1Fgj}r*ST+7q-x^pIN(q z!+Mh;!Si9}zLCDe{G1RP7fqzAmoz)d0#4dodpnu>zW)9V-@}pPQh?I&)sb<40a+Zc z&;b)OvA-=MlX0UjC}N$8468|YUP@IKu&8^*NFsfHRARB<1HdBP{iO_d=_~7A&KROI z>aZO3vxC;Vzj~d`4SxMrR8>VrpQGirz%~^uv(s_CDX#}qnA0i3hkQP_sc{@`R?{q* z**Q6Aa{T8q^@c8!I?dffQdWcoZDvi}qdzm%DYKtcc51sB?fkuQ`LCNMB@~so22tz> zeEIsWSqWyRfKz8HXRM*qeii>2BPVUNZbE(!sw*avfRjrxxPEgetjsWfnT@Ii%n)sB z>Z{x?8igXv-!Th}*G|h1xE>j}YKanIZ02`)9q8E|+Pk8JqEdLX&MHUw%2|!nDf`e~ zHvTWHW~zg{@K21zyKu^3ffHcP?ohHSm-yaj~kj*gZXnKbp z!z+M;CH68mdiHBQk%h)tW+pjg=o zh|X}dpMJ+EeY9Xv*dSph)MaX!1>EOuxCRw8ib$b^%MZhYE)>rItw^Nee@nAHGx1T))E zx2m*8bl(RF7>}0}PI}$$mAqHyRGtC{GaYQ^DZE(RHkd7PP}8K|zpV62l%x6IH0d$| z_ch6mYn0hlV@)-5t1%lJcUCQ{IS(g!eK1_8%BmZ@2Gtc`S352O5cn~Z*_qED;g;%b-YNBmhJ9<1y{D`KZG+QuhKoeYY6khK<|F@XZdy8m6|s6QGqxY9=$i!~t|z zwp}gii3sASpl`IB5>f?hb2A4uSOQqE9h#NgRa(D`%A)h4f-qmPt zD_O9EQe!*eq+CiU%~o8gJ>_sG$xJfJ?`L-C?R!0v#+t{FgI>0%CvT3MEo;V9Uo%d)9&89H`+Smq*Iwx3~o z78li`NM$CT$}c-FvyMEu-n8J`_Q{x^3`d0UWi8qxTw7ua3H77tEXJj1iAB(evFM~4 zqJ~59%`=4HfVOT`?6U%gG5noAOaIKXU80)v{_Mu;9i!?WDLh(QqK@l`BLU-aQeJ3h zha)FNfW~3r&pa6xtsmGk*-DvthR$X>-HQ$Yle9$Fwj%Lp!$DvV%l!#HUg?kmY7;iT zoQIzJrLQ?spC6LIK4*=JS4c;`SYM!sd3rWwickC`y@RW)CYW+s8KD5>+Tl(w4;)`j zcmIkgj|EGNLKf1paBBFNs^8i%nFH)pA4x0wBU4)26l3?IG8ajAq#OI!J{B(#N43Ng za{kk&z$c3?kqbb=k1EWp;_NVZNU(?YfwKOEejWOIqhs9ZJYJ4K)M^W+kvPE?h(MCA zE#o-8a!A}>ES*vppe%4?M{Eb%Sk4d;ddeVciQCvd6^;*T!jJ!XA4?>VIj!g?AC^qK zU^hgd)d;RZkHtQ_H!Ng!FV@7I7C~UB@y&?_q!2>eK65NYtag!0jspg!8>9Utr`FrV zFe)(tmGE_eRjL1W{**L~^7{QPV{lf@yU#K{TDbEOc~htx(>K8vq|5y5iQJhZQgbzs zAM@aN1S}lh>zrmp&jJ1W(hob-F%h*-@bMzV{@}Jw&Ntf$EJGe-p-{)I@&;m;;lFV@ z)b;I+%k6nPIdEf@FZL$rKPxdk7C&^z5VF-gWc2WE+eMuF_%fd1H(VsDbNzkH{7+qE zgIe%{0L(n`K+|uY|1tCY4do{JQxW|e=vHe$r<3W~}y29b%5eT^3Nof@;%lzrq%djoH~qI1035(uvxLX{)0mfc0% zNWd-Htx*2aMe&z2wx>C{O|qya-TP-ccKF!ki-*mQP0-wFM75svUoUEu67V)4v1ny ztPJT&o#JJyCI*O0f>+9R=5(yM_RS0rV}@|=O?agkxw8_&W(>sx9Iw;7kFn_5RN7*U zurBMgT)*zOd9Vd`Le|cWk|b-Jm1jM9o9cZwZbk|Ohmsz3$k#2j7pi*d7;RDi}Mc9$Mh=W4Of1)M}B1#K;Jb@zgy zZJ)V^iF3hOGn05Cs128JgOohvAWm*+bi25BB$IAWxpSR+G^ z{wAJX#t(Bk%rf(i76P*KVOl)PRi`ln9f=%yinIkG#6opP~q^_5+4H{%b$S$%ys1*?gKOxiNma+Q}qgz1V<^wfA^ zpsq9OV&u$k8K|BFE|V z!8h^~!6JwEzw>+ddEk$e;SHwu043$TMfC+aOjH0+P9ZMH7NnAFgazT7_rs6)z1#rS zlXnKf<|TH4XH0_a-&lDwzy9Sb*|*>iPEa^l`aD}*F2TALA}M&yFo0Y*<#aydYY$iZ&`W|RV(x>eoP($pDzu<)BM}844DHhFO zhx>@+gKAcc!Gy#WW>h5%VLRLvsS`}P{HAM<78l8+$d}@df5nFQ;U6hM6#Pk3XAqo> zve-)HoU+Iy6(O^DcEmA*FWDS&m(SxhErKzE`#FdrmnN0MMA)^EHq&2Tap0AxbJ}?O z6ve;DsUhwDK#^eHhA0-F!sqW&r9XK_zP>&61=xS(|F3&^)_>GBe-tbWKvKIgY3WkU z99{5LOgGpDPzl^iG8BX;A)|)($pgQmu~T?#;UVy(R`FXvxcOcne-FONcV<}Fp-@^I zF6O7H_R{06_WPIVY5h+*1!s)F!3_&PDu2Ri5*72ux>Ir_eSXj6@sAYot2HWyojhEKt9bkpBl8y}jPj2jWX(QjP0r|W1~*&gThT$s?F7?WE-uw( zNy|~IZ!5_jgisSR<#F3so+LUq?i%G;`wWn7_rf$==g}LzOskz1>4S#SX9usaMBJgT zY08>xs#!(tDuJy9m?gZQsqxmJcoud&?d=DJ!SVxDzgR&@Op%WD+U z&YHI@45}1lk&DaMP0t3@(=*qT-x=~wj}r^$b&5P-21t@S)n``#6Njuzk8%7lFO&W& zdE9#>X-7HR=0?W#ISPn*$^I zI~X+3^JPbzkdD&Ou&=-I`qydaypM0!w@(}cYEfJrNNhyb$XxA?S|vt@jy97gzXJr= zgVeS&Hl+85nP^q~4heh;hNl4VgKhX)r>G0$Tp!mtH^6X1NAu- zcR_`}!3X?{?;XCxtH;24 z$VV_3Tq!*J^;v=B<&}X*nmbGw5BEmI(#Md6#T}AiWu0r&^uMsTE+F;>nQUa!^$+Z= zk3rl02efepG>qwqD#iVTmrmHuZkdvLDFEDvekxJndt3*{F?n1Uv2R~Ftu|HEo=U~8 zbbRz)cepB!ZW~)hopoB9K_SHSKt{AnoAWE@T2GzgrdRBjfpnqG57q2t^S7|deE!S7 zur~sfdiptQud+Rn2dtD2N01+1aJE!V?7m?27Y~?(jaGT2d^}at&=_h`|!VtWk zL9@m`)K=%pm#FE0}MLR}`#71g|Iin9G>1nw0Zc# zsF?vkzIBf+RXQgw%-DIfw;A9W2iIJx47B9Ucf6Q%i>FXDM#p2ANZGm;{x1rE z3vG<&9uFNzB$X{JI$-v$NJg+AYXjli9I#c+o#CvthVlZA(W0{-NWTb9wKQC2LXPu5 z*8PJmJ~Q9YR&i>CiVy4O!NbK?dR^b-a446({HVCcwn21S{4(TYVy-?V*ZgEm_lP2UK z*P^)bet=JCa|=%1^B2D7KV*?w&OL+bGm0-zngAJqJ=i9=1|71FFzUi6`tWmRAOnEZ zEYCnze&M*EwBt=ZPm6#ne%j=WwoI{0;()t6euC4cxn>K1mQBbo&g{Ek9tAEye*^#5 zJXFl2P5XzBlm^;i(f{A{DgTO!M60X==i?E1<>swB;UDxUl7!agaFD4*Jg5lrg^Hw* zk~1oNT-oII%sV5k?ScpJZ`gSVZ+rf1>aE8~P{_Cti!d9?ahi%6Ueo{a?G^k6l$(#N zZWl1$pAuRM_pT`py;XIeVnBgET(2OGw5(+wGG~P)eV+m_bi2;VcTZxWv}hqSx@GLL zhH@FgLAs<_NQe_Z){(?{Vv8&x4&T?LRlLm0L{`jGlExnhkEg|QBu?bukloK%5S!^G z?AIl3%CGL&9Sb89HhKE?>Xk1{%CGsHUu{*wxniJ!|0OSm-y0zqwkg!+th7|K*wke> zqGprGlgb$zt5jWS%1i?{T})JS$rr~22OfL_kUUPI>a6_II`ZZu-X%kR)%@P)>R5o8 zQoX@lJukiNs=t!#un~h|5_xwnSs|pD?CR+x?Bua^sQw-9i!z*7d#U7CbPN$5+t1|D zHBhHR2#)=&A=`(0e&zf;Dhhe6*58y3TDY`IDLo}q;onA1Jq1( z=IX9WUX7_Wj?(>ql)YnkrCZiET1h3T*tTuEDz@rzq3cvj20c-7@#ZeFx^#r(GZ%EAfBRqCeRa?3^rY0e`xlMhz%0)OoCr zpQiwq`ZO?g2SiY8MC1B)B7bpIVs`Q#;e_wxhM&zdPi5l=#sN!xpp795O)Inbs<|s3 z%13^5B@*ALEwvgOSENqn`|$BQPc3ZA-?}*J>+3Umb{C0%?sjt6ZoK#|et7@RxE!{6 zzy+xhOl-LVX8`LO9#3gmJ{Z7zti#c}(*KF`rK1JK^=fWi*NyRfFc1TJP|AFd^e4~Z zAQ8g(l_5L4=cP*a&y)<3wY8z~w?em1dX76Mx^tU2wA%vN?x7hWQdcrw5gB5S1I-$P z`D?s`F~7IYe(y~i6;cj9s7GCRUVY}BaFn}jBe-5mSmWIroaKFk<(RylAaK7jdhL(M z+2#WH?DtH%?_=P<&IBB|55NFAC>ePQ$?`3&6OyGxP_AxxR>At0L4k|0Zq${7vl(;h zqK*O|6kzBs%@5Aj<~Zg@7C7c-mPcoJhZaWwf~BRI#YG?8m~S$R?01TdObOA0*a<5& zP5Jiu>9STMkD4HAo)3dvK7KoG$Rk^WHfe6G>#1Y?JDPR1GEzYa)3vNe-(W_8OK~p{ zZL3;5njYMq?ckEZnqqmi;))S4${M5%-JNTJMg z=rU0Qb6I@Hlv|HZnW@+WfKwTY{3`==Rwp0cHokmkQE8jJutD9U;X`_7#v+Ly$!@%H zs#siPHEt2$5^TR&_tB^EFXVHQC7TE5P|s40mI;f^1w^*A9ls}4K~u1?Ro7@HgM*c=kqmOU3!bo6a;N=;rBf?J0 zgG4!znJ#oDXP1kp^9hEQgK2OVwQn}tZ`gDUMjlaM%Sus@&5G;xXz!>uEITPG*5Xc4 zP+jJ>(G1<*r|i_Cn6i&NYzuP`^dObQP7$5WWl`tL5>R#= zU1V&JZ1;G=fl`=9HPNl%LC$>D;59$eD#?*g+16j-s;En`PCVyCJQ68wSt=db1i7+_ zrJzLOAwa#*WHyI+RW^g24i~Um@>*@u8r{Fy^qL3gAf=2ylAv&kk&Idu8=B!cq9#QP zw*WSn3?s8oUT3pYnH|jOV_m*5Tzn@uYw6H(^krmg#M(f0~BEVv`5^WKiS|L~Zx~2yy(sWKr)US|aw|;HoHTy|P za%Ll(c$<}2>Z8`N-&}oj=h*v|q%?UKY!>2sB)oZKXY>o}&oumR<6Eh5`A3M;Pxtra z%p)~T{J#dgn}RY&v4r(|aFEmmP*+=W6~NMQ7^oi6nqY9h%0wQ1qL+C}DLR%g-GXx5 zS%mfp_)Xn{{?q7k6&#c+qBqQqGoj!$fn3oz#Hq7GI3hD+nmOH{y@AFJD@DQ1aVe`m z$AE1i9(N*g27;vxl;SqZ+*#DQbO*+K-JCqBibUlEqLDi)=H5Yd=fN1AVcs^>d0Kp< z&5ayA--K`J$B)lh&=Z4P&}~y^g9NCrNNUJXHq6AIKO}%uPRe#{9KM5kYi=SvdQV%n zkL~`=JIvr}b~pIirTVa|Xbqdv-~>Ye@Q?1V>yIh^zB?-59M|n1m$z1KIz;}nX6oxs zuc~%vwlA~*MLUR%ZFCW602+L=9d+-3<{EAIk^lDZI=05fhu&{*sy}_X8t=mGU=Wzf zC=`Y$=mrRk<`$zYw~*NIWumCf2htML&cd<1kx>stV2ft+b265LIw-mhF-ZMpi=O01 z_U+p1>-+V-Cd8B*{)*~5iu2!&E$UYMn0}*n#T?j3kn#8M zPwA@)#Exq-RMn;cVujmhD=f6*Xj`&tp@OxI?|4BWdkre(T(|)OJPZQ#y~kN%S$6!wP+7;bKZVVK)RJ%W$;EAHSU$!?K&EmG{8R z(*yHQpj=_VxL44Uj`$9dDQA<^1)EWTh_CbQQqaG1{u57z3ulQMY|RuYZjiYZsb*H! zgs{?-oFojF;Tm!8dL$hLfP-q}#7tsMf0Hni2uFm6ZmPa!{(ClA5G2*TWcPBbLds}GCpg|N3Zw+oI#nGFwH6gRn$(1E?)BPs zS96?RJ*`!FZXLOTdAwxxYy?nJ3Cn3lUZsIuN^m*NQ;3AX64)=f58)n>xFEfG*t|NX z1SW$ z&jgkY#?Bwc(*iHLfJ3JY{X>LAUEeh<>bFQ;Fu(?QaPR`-B->yGo78pMx#0;HdYIXZV-uCm(Chmgg7}a z%z#B5wi(vs$9d@PK(9sp5)@oB2+JNtWC$gvGIGSJG~I%>p+~^)?I6~+>+YZGV-!%N z)x$T*|KM?g9D+I(WrK^xXd%ceZZZIM#^AW{ej8ZHtau`YbHfE}n?hxi7W0c_x~FsA zRJcRD-rnPp{uVegCE5scl?bV3cA^&H+lU%1T;2j|2lmVI=woxP)_V`)&&MV2t~uD2pfKwfQq_k&XB_A|8-@ zxJJCcj-yRKQsWHDZUzbhI;=;R%E#@h67{Xmv(%aW3WN5$46V+;TnZR{aFblA4EMWo zWI1uO-)h+?-Rd^#tE8$E^oGDy#VAb**lfS8=aQV@mS-hR1U2hxl+3g`M3oOZLsCG4 zjfAu-pjX(-=r6xfZuk}|oqE4v#Yr`)WD*3T%-@>SD5K`b4HkzYQ~BV9l??KFfe{p{ z&}RyJ?P?z8j`j_O!ohEgd~b1Rjg(2i3Lt-uU5-`jb=yZVMSmiVsv0PURjQyZ^202w89p>}#f zt~PasC=fVIsdE}8%oyr!7lBQghwj)9svI7)o5xLy5`l;uF-<7Tcr^5KFV9UM4>pUI z8L$)CTUPGzISRmPu>>$K)6|(~J}-ekFEkz=)8-Ew6l4gb)h%Izy23(n2m(2R=L{OZ zS4lnt79r4d94SYSjx@fsmv1jt*-|k)gaSM)qiQCN$xT4|&Tv7S2SQG!cTKQ*v zPzWq6|FK#Yv7V|si$g|-YF?TVm~Iy$>P;wFD2XIq0A1$hph)Aqw=})7f3I>WNJ@PL z;)QCs;F6HYN=6r5cajCXTDgB(;rsS}h4KxA0j=Q2uO($f6h~E2Spj4%XyhqW-fsef zLJ+0qD@DzHh-w^Guwn6z=8V!R(yMM~&BqYG7f;YNX3&arwb-&U4Dql~HsX$$jj7>n zErWN%g;O^ev?Bi62=bH#O)YE#=4pO6 zz(d`2IaK&gu}L*&XpYS2xW3>N{=O#EP4`Wu!?HJXuDyyNjTA-vSqM_wSfQ&{Yyf48w(3+qpJR= zzQ^pES>y ztQdpIq%TRQIyFcl=z4zJzS>{?t7E`SQ(;|Q@$m0tbUTGdx7fXx6%pn9S&MH_f6Yqf zr$vK|SbsUi>Fj3|$VbJbIQrrMgUc9Xk*<^~zztd*-|RLhi^y|G_>Q*y&GS(M+l(p1 zZBvKBDs%r93i%6#IKHtXp7;~Iv0uc)R`TbK`6-@lG}{|>$opCKe&=o7V^a!Rj^X$) zXzf8s`B53ob!g%+SW9Chrb6v^p22rhl^69w`tmuGB=LS8GxeZ70Kti7f1B)wXU{6c z`E13ME^}z`*T1?We}KPrfSn_h1C=%a^3x~2zty!aK-wr{11DPt1_1zY#qA%r1szrY z^%96`V`6RmKVSb@@+JWxXTPBieXME`ihlcsdId^6l@S;oKGl0zf|qvm2-;Vlt8*eK zo(UxKQ96Pdd)$0H4RPSj7-U~y1XIRmKRxIA`H}5-Z~gP*@fz(LI1V*xqB87{ifw*$ zl|yw!`M6O8R9@xFP$D&ynC-$Z&`ol(24Rn1sc+j2h3VSQ1KF&j&n*`QoU&RHT15k&0ovy^8pBr|NSETe6 zYcC7BD5N`ywBO-_m6f-r%%2TTWe#&cVZ@>(S_1q8mIlKs26N$qnhADbch4Y|>n14I zwe^AjTGdXoH8rL+5C+PYt55iMIf_5l0`h}Xqz}KvVQLXU3CQqITE)8aIp`GgCSjIi znBDMGu+qs}J?QkzFXb;S()kOu-H26SfeMjvNw>O%S&7EU(Q)r{2i9LEQ1Ak(9MN}L zBwtYc?%1%8Ac9&jZe^rC6rV8De6k5Hi+Ip=bm2J|(eN+H0dZm>UY@&DaTkFGUBnDW z#pqIdw!`=&i*mnXrsnB&3X|Y<24K&L*+7>Wh#GNxuE1#dU44VUM!B!Zg$#}5BYH&; zG6%&Manl*4?wTG&#DSEpFrzac%l%~qf4FW{Ub?|Sp!R^jXoJ03iKNpxIOHlZAK^M`(O73V0F{9C1=1YV?fWX@c{DeaQLH_A;g0Cw%H( zNHj&_DV3%T^}kQ=PP{;BdU*#}2O=-09LQ+S2iom?id!55?;HWv2fPPdli8kt_xFoQvrn>H#fZ;# ze1SgNYIY=G)!Mg21cNeTA@(o?qeC{}Fb*%Wm^quXjQ)?bk?k$T-(U=of(U=p1x>-| zXnI%aYtV<9Q>vqJW=`zwUmv}mYM-Bbar1aGW#zQ{a3o}J*=cPWHyP7Ws4hkXXSw}I z8;mzisSs{cr(I6BNesVf?2J_1baa&bL1HrHq1lZSH4gJ=Dk;_WO>Kelxb^NOqAh6= zUFQ7OSPFbRbCFi4syu_=bAS>Cw?s5H;|>w@*t)hvi={}F{-mL;2By_v-MIt}zxAHO zaY?)Us^!sRs?^KJGW{_m*?IM@E0apYz0;Zp3sPECN1?(wO^eGu$004OZC;tSy^L=P zxky!8c5J1M%sv#i!+;ip&2yc2`ABV`bo#WisHD9GdM%>q<*Ha0`!~3{Q4Ijcl-MfK z2BK@(2U2kzKGvbo$s+$pwFCl1?ptG^wq?$GfFvM#ePt$|D30wW-Xw`u(D|YP+6r(K z-AoqxeF)RAwtXs-L8)~7$NDD!5`^n+G(W#&zkMC{TPU{g;L)w$a9-#EPL~$R z0|@+f#dumu3^S@@bq>upGEt|{g!2SZ=UY>hkAj~-!`7n<%I~t${S?s1)WJ*KB ziE!2Q%UWXc{Nuyfyh?lhdEIO-6_ExCK({M){KBhia`lx4+`Z`RoSK;xFQdY3ud>29 zE{no1t^xuhpd!!CwpA|kyPp=@8kW8_ozNiKe$-z}{&pX@RKl6h9z0>kwpu^&a5;yj zq|xLmwq2TF2m{X!&8z1`jA|?knAm4NcryDfn?W8yd<@O4#4N)-oSu@J6$PVdO2UX5 z)#%6_b86TtX_cp8#iFy?1a{BHgvg1qzJ+cTAYY(=6a~}KYNc!AU69eXtjlfHu%3R2 zw;7R5&Ux| z7+5w*>g@nY7X>8QTRswY5MRsP<-phcpYs;@PTdoP-|I04IgwMlx!z?AW^(z*AE4d| zzxpxF;0^jz$;R6=P-XX8!gOsP_u+NFl@|SZCg&MP6|a29B*<6?{^8v0qVB z&fNOm$2EQMHS09g$=V?2n_?Jc=b=|* z)xn`O1hL;wyIof&G0>RWuUL^{{-~7{SlCg4)OoL`7zldStxjPiyO%KXegfJ*UM;TE zwvLJENdm0A=l)Nr#FhA){tVhbDuy5NWhUWIOPNPe+enZ{%5bbAWp8sA%V$eFa8 za|sDE+;xOY_21Pl@E6o!Q4d6({G#V>lQO~3{*|4pLbl+>x9}xW^F?{c^RJGPzXW$JjfSc@V9Vwm50*lbz@sQEf6=<*A^k|IhCW6yf2U(@hK8Zcl znfsSabe%&?avZ zJkoY4s8o7fwK|b($44+xlNeT$Rg~y_2LWzyY*X&gFld~Ok#-|J4%QMS0bjV z5fLh{!KVP9g$3e=V&&w;7CZbe!PB9ZyXXY{#kZiD7n$W5F0;!hC&9cMD4oLlCW36R z-;(+&{EM;CYYX%>gs^}qcB%($9(tlJjD8+1bP2D$o7y&uq~qt zCAZwBO_BygXMpvbmMyF3-`2KHG^gq%V4OWlIe4sV3{Qs>J|69u3nDh@!so>ws$pDQMgeOH|BvA36 z##(4drNRNo64(-fh}Ds+E{Z9%?WV3xTV_Xam<*ANKuoDL6Pv}AK=4KkmaH_#Y}bi2 zmiphmUQf_J{L3KF+~G7(Sy2^c>@aAkVYzfv?f;-$lb&~=tsRN|wTFN?qXkG{iJYSi z`3W6;ytc}5!ag23zZPskkeW?4G;OTe(d-qxMYnqU_Ib7`y~vIa!h6WR1!KZNQ?I&J zca#%WeAxV>jyanvnnv27Rd&(&%5?^!PdXxESkdx%wW@j28)*fJ3q#1$Px&s21iFWv zTNUSNC3l$}Zq-S1FnTi^SSHFlalt?_?$(+$;wpjR2fg3d{h9~!$slFNHwhogyNEkW z83mljUoaph+sx7G4P&mZ8;wyc7(%|E43^ajcX0wP5#lk6j@G|UMVYkdNha>pSyRJG zg&|VoGk)*kw6&^jtF|6qRcj0V+$Su}=JJw0LiP4Z0!De&@pE-gGo41t?As*`a}qa1 z?ueS5H~){SWbDt4tJ4C?Ai+1Z^U2<-z4~8!D}Id)YIh2WUJK&{4lw^D@3m`(+6}34fp-I^a&68-@bc+(G+Vu#pEDWmRW9vs6(>XnjPFjbd(2 zrreLme(dmmhmxLoRyOyJ(k#n{e8_xGyk$t1jXmG%gmQN@L&wvF;9x|tk&jOb^>VzW zinA3l=pqHyhiKu2wwRm(MJZi4`Br#s!ONjlTkMt8`LTp5GKhH(o@ z)9e@eT&IqI)Q5SFW%_};`=vwX$+DIHg$?&8e~$%qEMz*rfsjfWK<#J!zb5hjldg*z z7y{dC0LLvQX^PP-ZGqG7P!TL5gwkziBK~MQ(2IkE_LfWca~ znNQ@7Be)*eC88d+x+3D8P){BL)01{`I*kvIC3%nOJOm?Vmx&0DfJR*<_I3;B>)@rZ zfTSb_npgQIPwMP4c15UF<+VhqseY+Rdh(a0{s=5QsV3bnFSxSduLosMNAbWx= z*NPGeKm#p=M|6NXb2yJCF@VD~b{o1+-@K@MQ$jgBaa??*MtE@jH=0ZKMLH>#l$sL& zy~Squrgmy4F$%jcz=wpqRrZ!E2=2J)2hiOyRs_)xa?Wyy2bXuKC62o32Re7m6DDXC z4j)&yl}M7cwd-E|DmR+2doV<01-+9M6>1yN>(IwM3r}QpuO!dUr2n`%mVil~q#oL* zpZC?1=7^!_&M9wcqK^;0<$3xz(~3n>S?l>i?cY*L9K{xV#Gg++TrzB!1wA*yYm%PV zKi;C_@L;j9dS}uyt?-Mh$sh^8HCO{xxoQB&wToBDCa%e|-(jqii^VqXAOnPXt(^6h z8F*NdkLzpm?+7Q5m#?K7!Fw$+gppI>?UQ3=;Y%O4t0!5vqZ?Yn&`FtQuU;0!5Y<6# z45+Ko#8TYXjIlItJ53|sv1O6Idw|zhZ&~YQ(mpcIUSCIP6N1r07A_V%s#j~!J`jdo z5t)_#yjH=B#=tsj6xi9JiKZGyw1!tVKc_?_cc&3eNw(r7cu~j#z(Q>syYvqCpmW*? zYjB~a%T{es)Au+6r?ro*vxINHb@W+z{H(Gl@rL}nQh@*y|DIASCn)nQP9%j?uZiZ1 zLo*edm-z2`sOPTf!x5GI13GTFO?HT|VmMN6iFimpEWQv^gdSZs71q3sqA5ARr^Z4c zk^G{Q8v#LMxaWRTQDZ`R&$Fl*u?@;Vx`dIU@*>Q zg5eL4q!x$`p8glxUbx8Ey?8MXC=cwGy5*|}hY`oX+NOYVV|0Ml7ru~|``~zuL8X;0 zgH(S!KMjCAzvuBvIzT|sg6wi<46flz;>`emIswlcA*7iXC6GDXTdBpUIQ70 zaQ%27=vy_$6dFERk0oq;az}$y>JTV1Dwn4l`5gav_;Wxa=_0P`6+D_zmb2=^&rfY! z)5Q{x@L8h%J?H()-yH@Zk9L9*7%m%ul|SA8cZc!Mj#8qHE%F~k!cy*(p-l_P3(xYk z3xeJ)kG=h6x*hTQ>FG$@KWHJ>%IfudO8XNeyGYNFoCfGl|Ec22?4wOv0n8 zDcfpJ7U5+q<}mFes}LFsPUU@3=*@-YFM}m*u|mNefMveQ3qmYZI?8TLck+LAal= z*DUZFUG$t#`vx24>P#?=^ASD9C74>2_12CpUL9CcFvn-ikn$%33|1?HcbP4aNJoCH z5nIS4h>(nk55oI=*YTupwutf^bY9D4<8$bSR^{8&sfbI#d5vy>9696=?%D_)_oz*q zZY4N5KSy%b9)mbzUV;_yMEkbd`vzr`;ev3<2zJK!{T?!gq5&^nj(o9UX85UlUt_(f``&b}> z#*-CgQE?MgV&Ym2jPWq`9f{NrfdfB<$3UwCCY=KiH4)xo`C$EHdWQ^zY@|YL|88mF zxt(Uoz|iaq49$P1efobd)BZHILe+niWqhkeGB}`##MF;)C52wX%7_+~s{E*QKN|9q zil{PT!Z zq^ocJLP%T?jKeHNrOPP6$DHYXQ_PiCqV5W8w{^#w>_R6M`&F8a$>_EYQCsQ@taNJ5 z^Cm*&Oi~fcYh%Vuj6Y+|LiZNt;8aRm+H!ZDhGdw8Z=Sr|PX z)s~k6l)doRnagiGL*j}P(v*WKdo8jMnPGc`e-j5V8YG2PuoY*lXzvZwnPNOL2fIyB zmk#Dxp1iJdK%bY%B1y2*20^aAVrdFEYBR{fl7wM{wfFX&Q8I{!<(^JT-pvnD6eW*x zo5@E}tu|TvhXa)RJYUR-i2c8BNM)!A@$OhQeMNUJhreb0k+b_u9O@x=eidNg-Pwh) zGU~i~=8aRb%rvUb==Qw$sq1u8hWoyQu{K2);)TYiLw@>*q!anp~ z;CT+-uV>-kTV~X{wkC*bDrT~tdme1z9ca=QJ4^WDQ7j!l6l8|6A@(%$f{l8aVX+UM zMu-xHcS1}#2Vjg&tNWce6Y5Wv2l^E|VI2cjAz3;EIGlxpZ9^krvIIZGgolJaXXV<6gYbI4yc~4%XyV_RxAT?&+W0&} z%P<0jIV6oa!lFlqrydFO4oPBKQrStT<%n0!y}pb3Ylkw#KLr1XU4nFX4^joAq$m6x zz&|+e9cdL<%X30Kz7jR(To-vdWHF-z0UP*}P!ab0N9k}A;Xy<%e7buxnI7!fk0e*4 zCpq(%PX@CvXb&`}K^L64(H=`2cK$1*SFTgCMCiGC{+zP@AH@CBQ17FN#pahEp`5Z% zGymb(28bBK3xKgy2pCKMHw%|{Hng@d`fs&nmh!6XDiFa%3KYHv6&p~#1P|3crS~9jJm$+^2Rzwl`SN6vP!Afi6sOwE1nv02~j5@)*Icb{hx+0=k_1fsb| z)!T5Zc%L{fm%*HKm$F?SOE`u^umy**>lufdu0cN`V6N5H2~--pgV!4;kQ=m^%+jah zryLY9Q{T5v*66qBs(gin6#vR!Dr6=$D%-D<6 z;X~-D)&{F!U1a$`P%qTx5(mgYoE4qraamEs(cr0@^f0cDw2N$z{T}gUmH~74iNuN9 zEyo&T+6mx73nm+Hk?a;Rs&W*plrKvjPG=+bRc{ASc#^FRW*Zcsu*-aiw_ji_HkE20 zgPAN}Bm~(&EynG1GkP!o?2#I}YOr*^D%^^ns>0Hb&kh!tVi5SP!v#$ma`blC3rXBi zERlN$Z{ZXlY5dSjwPbJ3ENdlKf=g)j%?5K5|2)Ci?R$tZS(eppi_?gi#TA&2UaptW z?ji2VMrtFj}^d0P*Smn27N&lZ9kpHnjV&Gum zXbbo!YVW^dw|C?}*$d6tG+|u!M8Pns;P`}UHwCrb{2PMPkx?Wx5f1*rUpP>>>9z06 zKi0AMas?JkWS|erM8v;5p;9NWiHzRbxe=(ekuFHN&edwuuYif?AN7S~BbZSN4kdhPk#9r*3dsSzzvxFM`idga4@cRWUFlq-X3`6d0 z&eqts}Xd>YE zZ|5EkY%V8Eg@Rj2VS`^az!@#otc%xC{SRJ_{}tk8O}p*AH!Mqz-UY#@D!bk7?t$D0 zzi(D_&H|tTHxVzwRfWZcVVyzaiDA{?&m4mVs+vjZOr5_3wLl=9&@JLboXT0X+7p%v zuym4L{C0jYs#YFK>{*tUULSz=eWlxF*a9~mNesn_evcbds?39fS>L=O%9Qr@OYo4Q ztWTw-nLKvan+<2_8^@_F;k)Z=Usmsi$~nMYk*Z&kg3hmaV8QoQVX8L~M5^9yU~f%# zCw0?+AhnFeYGS_WbU-wwY%w~alnsFTBrz8*_;HMEt< z!tgByz7@Fij6E(Zn_52gauGN&Zm0zAw2Pu>oL!55AS?9x=>$wbt+zHck|KP>@w-{o z1z{>*JLPOd8}%Brlg*n<2qaRRd0D%YryXraiOk^)9gXjX*Bp%UQd^n{-WC@q>jp~~ zft&f+&84?n^OGWS*U^|41e?6U^51p0{R}=PTv&& zhF|}m;*kRiN6kR|@N00}ucsAma#;E&Hf1l(^dO?s;>H-4!ATcDaWq2*!n82XYo?vo zqIm;L*VKN@6qVRL95;m%#^5|M_p{hDV&-^?q5RRTw+oLfWXM_am@>GSLUzMV*iM?U z=_m)ff^DWTM*>YRqjC_vm2Lj}o184ohq0yuK9pExTzRn=n4p*koQ!kLJ4^fF2tQ&$ z;HtiLUW~wJy>F3p*1rFS*7(PrSjYL1D?6ZAynq1~^>6y~$G*cq1*2di1uB5(!``Um zIk|B<4x}(YJgi3&#v&^+P}6&EST?3O$X+|scyHvt{rs#jT_KDPMMulSGRZP|I@aOa z(FMZ!ZK5|gNCrj=y$O69h;-h48>EPu>BbC8g(^NH6{DGs55^p1SV{6Sb6;S&DkQ3* zzoky4Cw2CGoQQ9-YvH$-PS9{BTcB;jgL=$IGQKv~xT>ls2C_)?rouz}7Ro8-_d$EX zM@?W~RJcz6gk&`YJzxo{Cr0RfCMFOup&i4fRJ7DJjX2CsViFHnpE60BW@s(VB5>a2 z(C3gyU`EG~zAeP4HGU^JPP%BV^m{V6DLU8IRt0MsEaqf3PcYp-ck2M62e4%cOh#H> z*KKEV$by^t#whChB(AqyTmrxxjKIa{Zq5g3Ng3RHP`r$IN5VLpzmvXD-5b&sFq!nG zn(9N;OXGm5j4}BdK++NST|j6_!7`wz)`YVeZ3rONsSlB&%;1LI$PnH^{oPfXmwY)p z0iKL6@RYFsc0vNCK%R#G#lXdA+>rh-aQbY%q;$m|&9Lc+VjIl9;Ik^y48f1|FTUTu zO0KyvrhNa*aW;wR+i*Bv|M>!1>Mt&BqsJ7}975vE|`o>bmQoY|jr z=P|(0HYe3*WR<0+%cF%%e{L1U`pZ=D4T;%wvPqO9@LV&E8Z72Lj-NY!R)#V3@rkH4 zLoBe~MJg{m(pz4)=_YPVWmua10#~@xJ#h@ZInYSWn7O**zV1jIlN~Fbgh(xTgY?f!QnEdfl_6P0ss(Nvjz?4%*3};* z-y89tLEcIZwf*V+6Wy&Mcc2G{Z?CR% zIljNhTUFKBbaR&?T~FnunM}EHmQlKoL}%#Fv%Z}&s19(#`B{uYSwMf*6Byjlkx)2z zG;9Lm2b+WT&K0+Zx{F!K{0j-Rf~j?aFo2i+k$>AV0bHXOy{R@KF$OUZG+gg5CH%)0 zOZ2ERD=`1Yh6PfN{Y?q~&z$71H~;wbM+^L4#rCQziV5O}cLwX~ARQfDq7;lOU20K- z1r=p8y40#UBPwa3I(;wua$@BOU}=5IO`zk)JIr%G*K>CSf?IS0F4vG4zSkwe5r}$f zdf{n*E(i>)j%q{xaMfgs0kVB<(^F_8HI0h^%Bn4HBkllj2o1F0@Q!Z>1v<1x(MK!E z{dL)AkmgjQ%$Xzp=WW3>Q`{!|H?wGySJfHCvqy8S($pkVak?|MM`8W|I&$W0Bh82* z37?rJZMo(Su1>LYdK2Dhv!*GgUoGOx(7t zc^Jn;-dTQ@({)Cwow$ZGTJq#yyL1ZG@`@ZVCPRlXC0HhvrsaX%@9N(u1%fP@jz#!d zHB!9gI-xbJZay}=^Wsntnll1k0&eqDPu`|*aGHW+`#nS1mb?m`)#VcZ!zF^}4 z?7T|iILG>PF@|H(`O<4gWf#QL*8+4-Zi6|g;a+O=gkU|{Iwm$bMOiz-NU)!43$}&e zz)@Ayv8@xq2H(}b)+(q44DF9{64&f3|H`D!2+9=jZ?37x?e!;MdQ9!1cvK#+fy>#7 z4xYRU3TC)M3uveALKnAYX7{^qd#Q(!f{4*DH#ZOEzNLPnM?u@Mu=Qn^JXYQzr$fL# zK8rHaU~}mBKt7raNc$0V5PKxP;S$bGRQy@gy))@k`^mhr7s)5TF&Nh48&uKVbgMhD zPWDMQ4;$S(MTv>4&EVvOkCwSNO&bJ9&neCOQ%!^X`9|$MG3fV}Ssr;I+fp3fd?}ad z2C#I)QdB*$x&~?TlCCZFGT(UgTrFKY?|L0t6xNVcqn_9E17$J&Nk^*?-RHscJUKhC z_S!F=N8Y;Rl0@%-j+t*iC2y_ZoCvtx@S!d?EfUS7v*}1@V>o+2@}Nm^iX64P(Bj-4 zghC(vLLdje5C}eLXmWq6fsp|_khn(n?XCq^n+hw(Bn5Po#SoEx3aiy4V!E#okMs@+ z<&pL!FU$TQ=4)!h{Q%FUSds|22GdG2bOJwqFefO9ir?>#$h*SD|`zbZ2TUX}la8;v|dVb=}}VlXZR3O|og zj43Dp46Thz0$0`)SIj<@QP$U;?#-lwC`Vvx{-F37Pa@<{+JT+suwsAl33637aL}X8 zx7(-dP@~7CYwHGIGi{)w>WeFy{YTDMvi0#>mN<+f3pz{W3^%fCz!sP`mOF#{-V8zE zmn}2#X9X8|h@o8)s*b`p${cy}OeucW{UNSzKQjp``l+_<03BwNF_?D*!2`Xm*_j0G z45yCgL=FUW%&%Xucb@=ad=Z`UChMr0Go20D57REPJM0t4K7PrLog>#)Dicc4^VA27 zmVUD7K>0!I^K5IH6ng z7Ap}n09i)%9sDmh{0F8+I``PIG%(P~0R!FNd%P9^U@ibKux1c(0}dVk%>_GH0DrJB z_|pSNDU8bY0-Bo+EJ7-u(M(j@~DFd;Pv|eS_#tbf@Y|CXCeu@grQ{vesV^jCN=DX2K$PR^)!Ub-d_oi!dZCl2YiJZ#o z;xm4`c)<`cMo46x-=qU2w>PAIeGZ;2;@GcVgKNQVMF^<9OqjS9_N0wiPPAm2t4c<^ zC2iwOXdvigy&kBX(?$4Tbjn4;P1M(1a;%Ag7CQO3FyPbx(G4o6v*TC>#mw|V@%YRX ztx)hg|0ifFyYO`0MBx}^ispsB?XrDZ9v6XOR9?a&`vMitoSMTmUTy@o_s07-gPta; z0P68YXfa3SsvqTW$}B1Wa|8_Ee6tsZ`?l6PEHgrA^4UOw>0rG!N#>T+O z$lS!ikpYMcYwP;QUZ;$SqoaYDiOior{CPxKDq4=K%82jLhK5oKYluTtO6dy?+Fla* zMHoNApc0FyFpB+FP=fgxhku1tM$(y)rjfsr;~&BXLX9!6M#AiUTBnr~fVWcP7C3tgNYH&Na9 z82ma*hwsy2_}vpbV^y^0usY+Z`J;bYQ^)gC`q9>LXqxA>FtOKdVy91Gqme^G-L{c8 ziz9xIOjSf&^}fYu$uy%G0#>SaQ|97)itS7C0dM`o_4lnAW3yn5oSNCW2ltEAT=i&1 zNVW>KY(+eoln1QqFnCy{g2-nza*_@hlHS##9fL?j02xVUbqVQA_C=nPGerqo->-tB zG}fB0^IBG69qhWr3L{klqZm1`bc?4qIsEA;{RE}0!3G&#EvA{Gb5X)uY-H;8I^ zyJ41Hy56986OkT!oKy(Fxo^KGpK3%8OV^IPpoB*S0PcZMDNO#3zeCQIa2dcJ&vO zjFcw49s0ybqi;!($}ghXTTL|6fT0mdXe<;+yV3VzL|mUMZvP-ac`ejipaI9|o4e-k zYwym#6M^f;kRzBasC|HZ)FJp%jvox=Q+rWNMh#%v7+ko35EY0M-6hnMfV!{NEg=ay#=9G>B4(Zo0tFc z0aK>5u)b5Ws{LrYnjH^n2?Ry8 zbi8(#V?O?E8vKWI$S|%;bO1uwyZ~oZe+MuAFV4Z;&g2h(#J@R(Bo!Sc92HETWb3*b z>nB*$5-KVY9ArsKO>2;RI{66l2KKm>h3dY2QVsIuf%Pbohj*wBhfMpHD?zhFX6^u2 z?j459g|CL*ljrIC5fiK!o)hk0a~`~N9IqFD{>%n#2@VgZ+)zatMn|1Q@El(FI(#MgxuLS&saCExK$BSSR;x(D|7>7CX|4?RW?6dR@_9{snmuS;pnT z<$<#Ac+ChZPB?edb^&(Qjs;mTtQ8OHx=p3vFhHYkclBf-%)C5pz9t#XfS{bWjO&kn{kYMxT(D%`$W50;g23btnvn1GBJ zCds0$ivo5?7$10I6_h0FK8Rx!H1Cwb19)b4Trn%!uWYNl;R#OlXt1e)Atqe5zVyyG zi7b+oCzz92EV;t#V+y5i2I3p0S*aJzYW{Z2QGu%_EHe0lz}6AI$Qo&oxik~4+9QUI zzf~)`=qb^I0!Ofe0-j^}2#at;&fEOE!Dcks&M_-Y+98vJ~SFJ!E539<3tGQsvZcvT-88KS#a_o~#?Q zvxQ$iw8U`>kaGB@L;XLjy<>Ex?Ups1ifyxE+qP}nwpC%pb}F`QR&29k+h%>c&U3oY z)2I9G@s4+Ve=^3-{@1Gf>y5Q0 zm)E2GDW>mgfw})D_`|HkZ)J-f_Bh>Op)JdMq+$+JIm8UnU$ludLDcwjum>?H)zpP> z%Ct}ugpwnnP=?TVsFYHA>Xzh*E^sh`V?(KZSpk_+FL0(}G(t-@~E4Ksp^mOlvP7-S8;MW@X)6_hl}e2@<&TqAqCL zE0xhPYmvNJFGQ2l1MX?!O-P*k=;_$aPO`b!vtT-9wKtqIitR53b=EBq0Q`?()5(~8 z!hVue5r3B*49NaKQPmF4O-Vz?5AKjjdgr42?|{oB-ci+L`|sC@WIaR$dcB{ajLrqT4xD z_yKD5gl^oCRwz3cC@c+p4^9}4M^VVGsV0C*LlqA0C-_^2AR`?;lxcp{*`SESa^`PhTb59%genw%`A^e!s9|+SU?linjqAZ>DL1p5%qww0_fZGCF%`6+(W6XJWgJ& z&Hl!ivk?ZJvlI&KcUXG)eBCCj-CMuBA*(LLm0 zDifZ%#vZ8z=qg67#dAsxwkK{Q`r|5yeeZ55nWP6p=q=R(Omp1=INZt$9ac@3RQ;`^ES& zxkdeJ?M1kRfN~csk}^O^$wlKGQegazry$mO=M=OuAo=EoIFOQyvk z-OPljMTBBTo@n{KZu$hRrX_2pcevr$=13%Zc7ViE{ybA`Y>3_iqA73~&`f1yxr`#)h&ybIA2HxH(O)w@w(h1@+fZVN&6a5h`j?{$mhO~Xtk)USwRZFSG-AVUL+%YL zc>+v$=PoOUZZbj33|;A`Q24~!gkzN&mdA&j2P^%S_C>YnI{niNK5gxi;d$42rY=_~ zn4=?-Ki9JlX*`Zj6k-fXyy>GQi^NG4cqgs-knV@96oI=F*q^E0kbU3T0! zrs$~xgumQ-%!ruCNwzdfjE4(Tw9Eg~;XzH>qLNfPGYySS^MYa7VS>$i6}fs4*e0R_ zWV(@dhi9IXH?EdrRkIH)r+#hWN#nPK5Fjwg=mhLw_I^b`h;LS~54Eh|HF?D0>IG@X zb{-9rIGB4B(wv&=w${AE#H*dUURIaA%$=;s#*5+fRIclRp$+zkR;%871{h}gdx|;y zO7%&`{_mA~8~G!pb#`!TX?C79&V2Dji$k|xZxh#>2`DcP$q0iuHP5oqQt60s%hi00 zPpH>7tLYGg`&74m&I?0ty$Vc%yN7=?PPFm4%_CvF)~tgDcD_i>v8xcreIR z0}}EGa2YD*jlO4FOenV&AEl|WZ&K{-rQhj`!@EC{@Ps`WB|bd)q&{jBo3&5C4DCx< zTK3WC%bjjG$drnk@6AU){rqhNbjq%$X!r$-v(QqutoVTkAk@Z87H@On#*+EJ_T+D% zR?o0Yqu&#WenNLq%-C%{4FRKnsk<%c;dXOp{Ug+tEnM-gW>fdDzu0v%vAYH)MG;UP zY!T*c<7o|1qC)xwNYIE;>SbN_?j9@;;ow4-yA$?vz$53~<>=UN68+&Lq zP(dz;(L=t0={pWO1 zNmBEV#y<$xfgN7-~{tV*yZBZ@&8HlpU`lrFBG{!xG0w6lo z5dUr#`JY5b(81gSL{g_fh4Om#Xp?bYu55N0Gu>rVWvK?&2P zF_@vX)c-89>WBT)98ji#laQBXnA(aqd)-QW3cDW+_@Orv+nwaPu4M;`zzV@zdlnm0V5a|KcTNmQ){FZ6uj-|kCVe@&4=2HHa~CQe+W#6s@BQ&97+X@ z|K`lL9Z{XHHo0r2r=FXfJWv@>J@GUPp}Rp(gxhL5hn^O0NU?o!23AkJ7^ck-jV*en z*=;`KvZKrSg$zl@NjembMx$N52=7+ZVR@;>nxJg5NM>EKt^)qS8|i8a9iu&Zxg3_! zlvZk;xpg8S>kNIBhRwDxleM}F8E1YL!{Sd(x zT~x5pX^9~LD9~&cRT_H5W}RvIq)I2v_WC4-kKjtF`h9ZPBt2D#vAo>MVGh0il z;P3)mgT!ddJ7(W)_K$tS?EAKFAX?3~$*Q3WKc8e_qJFqm0P9M+I`Wpwr(*LmEdHv< z^sc_EvZ~W5FG!KS*N9&A(liK@oiS7ZeU+0(5nSc{)jjCr>#mRf@nek41Rq~26MY_U zsJN?4>$T5{Egm}ibY17hjW%+Hxr_B>VA+SqB=MIP$41{IESk)nmZHHr ziv;c;Jdwiz@K!RnT{uT)iy?|S180b7xu^obj*AUR^p-D7rp@$Ef~N@*jJCkj2c?Gg;Z?#En_q8sg99c%=QVsD#yt_t-*Fm_dN8fiY0VVvhv7 zfqoXV`;H8Olvbgu>RSTBT=%POT_PA(iAkAD1vT@!du7m$AwR)=NM2ozFEOWkB(G_m zz}Qx41R#Sh3NgVM0cJD&mIZTl`d`P!ykKBAKaj=5e9st~nQxp=3m9T&$ZNS=gVTBu zTKgtF1GZ-M#eL{d2xgWFjpF!fD0hZ?evb@%Z{*S)cEBU{(jN}ViE+*rq+hlaX^o5z zLqcZw$#ax`0v$k%Q}=9gPpd%- zyrwE$*33QfEbA`(Sdmnn&0&v5_XDBU-d;qKFAT5f$25mPkBRYtug0^7d zBo6Kh1_ve^x-f#+JdG8x!N|YcKA8pL+ry6z@*7N5Un}OI$4Fu!DhuBh&z%DER(Bl9 zK2TEM3qdvJ;{fZ`f&3CAz#Xvh!;z|NLx6j=mWEqr6G1R?y@d!X<&mb#>| z?pQ^lgICxHs!FU;Q_C4+PLH%5w0h_D$0Mi}sS?$ap*A&ff(}bOSLngs3v9a*J{!4}(o2B}f zwnE0@mXVakK@!`duNb9ISx-(=&UVwD=ARE+?wb(Tl0FMDo-`zm5S1jC1H0f;_|o~oq^k|44kj9M zyV4G(hocknxj%wqMB!q`@1lPENM7aS^b@4)UZ*+GNDVDZuKM__qZX!cJU zsPL$=eLrv<$*J`F(JPPqTqd-JwR|h9p6Bi~>#;tfDR=p0x&Fg)i#58)7ZtO~W}HB| zm6iFV^{#D@DV0+yt=cxpNnFl>(|77_vdA}x9L)$Ki&Htzdai!b_@GF0K8w*zdR>c(--p^jX+x6m^fBY%_u;bL`%D$^~ebD(D5 z>h8Q+W8aXG-eAMzF}nE_Tcch#p9%{!Sj7?1gn%NEy7J~X@FpVX7tb|E(rmc9Vt=aq z(Ugg8Y!OTSlmp*lMslaRiTGZQiwO;Bmg*P^7f_;jtR-GE>=3XJ^fR`QY{ces?INA* zV%V+tdh5ZA`yp^BLU8%y!QY*Ihspa~EjpwtT@@~3_6%UgpvyR2s+e7~h2P1fLwR$I zooKxI_Gjy@(W@HfAeXb$6WMn-1QR+Y6Y9>>ofFzV^e6`4O{FqV$V#&6wHe51pgfd~ z*Ur&SK>dpMjyS6K?4rgU6o*S3)PZ|uZlpV__rCbZ4a348rws;x(w#h``Bm+umFf(M zF8MUgf|ypIso1@Dt%j7V23cSMA zQ{g4M1@DNLFex;9?M5Fz!+d7+W^!!`i4LoFR@I(`j^*}hKOpf)dBM%?vpSyPVQr#q zeTG6K#B5CyX3gGYw_?h}oJmqR$->Q*g@3$^q9}had3$>s6vg+l)WXe+#OptCNghW2 z{nnb$yXE>0LU8;{&Zn~S!l<6nxBcpPolri0squSC*}`?qrHhqVWvzZlba0|Rv7{VN z((uv5J<$%3ZhK%lpPg87zpVwA1IeMi`_M!_AAGlLD_R*}{Fp^m=FKF_xv>VTSS<^# z(8I5!dN9PD=X?Nfk2UQ@1j|m};_Ih7U3q-ElT{Dgxg#Z|+cR!LgSp9=!d~l~A$DO< z$JDvk5NRgpb8djyS8{4wHu{Sd+Jzb4B$>!2`NS#Dz)P=A2b$RY1fI*3^P>ES@YgDC z+KnYEMz=dTuKVb<@L=b~ODOHNb_KjHIpx)gQQ>?h=RzUP@savS)_b4<{62I*W7=-C z6T+}}8&??m=eNi68CHrxH(Sr3ar7wA96YDS@M+XX$7W8{K?*)RpOi*p*c`$*pcwIQ zC`blO-e^^;c`b+)d#?G(#t25ogW&m#jESrhCfmgZm%{;&&KX`ri&=Q(U-bktc~F=v zT(40L1FB{mn7L}B&o1D=+pWRdvF`GEdkwidxM1vwnjP)IaOA3{g!pp+8TBF4yWKzx zvBa`p5ZFO*x1FD`zdac<0r9klet$9hChP-Wb7mOXNl4VIV*nHevz?5sqFw7L4pi_R z7)eHElPms~#=R&BgvO~}sN~rL<26WqHvY6Sm%5`NFxp40wk&YL3V1yl^ra+B{X`_OhUVd8XhRI~{Gx2qWJ1J~uU`KM|U(q`dzZvn5fwFIl zsaC6PsCDd9S3%Qzf``=-UGpAcYy>e@=-Ivj=8T?MVyt%*gsWTgaY2T!Ia1CBdT-WH zh+pj1m3~%LNVAXfaY&`$!Qje$|HgXs2wGiX@F|c|8PY9wOy!e?*!Pg_-lZl z47hNDqKK;dy;+VMwkRnQlIUxxt)SJHFSLP0MPbbcc@joG48mArafYEXB_hwj{1BvH zk_Mg&!wF2+o%3K*0~3;*ANkHIyB-fFuK2gQK_qf}38(g;ka;o~tuBW=qV_0b5y^n} zGi^ZoQDe_TR-^+r>q9d@Z_@vI)XA~Nvf!c z7Z?vx1E3&aEkyL%uw~p$$Pq&MrmnokASiGz&A$9{srE(DvRi}}F|bDB zi5YK@I6@b-l%hr1a%kD-kTye${L5k$Rb~<4C6&+{>dlyO;-%c125pu7?2(5(3@&RO zspUc4i1VsAxzL@kw|rU_&j*V1ptCikWGYwtugI>G;d-o*8l37tcbt!#Ky`QW9h)}h zg;Tf%Iecz}uO@8UF{`##x)r8P@f&_qk3<3}PMMEc`!6CD-v* z{uTEP>=LH+V@3TL3m$2urVfmD)p;N#lt2^17*lb;qNxaO_QXL}t8WgdG3T4Vd+-p5 z1399_vdgzz%H*~}w%K2@9mD9eka`;XaQm#k-%+Que*Z1;{SPCB7Kq)M0x(fnz=jja z|IA3G08t|@%AU?HrnY}oo2(olQ&|!A$3j!ZLr^x29#2auACEV(hyrM&w70*m@M!&; zo@XZ7hc*8Dmrn{tZ3I@tJ`=Nqm(Q1XV29{C+!D?yNUWa7Uuk?3YQeL3_9&@(FUbxs zb70A#>T_f5hii!WUdfnReS^veTb&iYE3I8ep$>@L-0bO7pP7B{n0?00(dtr3=c}l zI3Q{f@IMlH8H0 zj0F))xl~~Gb%}12j3#(v%545s{gwVWDv+Kz#_vI#GuyerW-bnqY43Yi$I~XjK<;DW z^X}@(A2=9J*WeI!j={jfdJky;^{2uNCa0)6&JEsb&1J z7(ovel3o*32R$vkg^<0Cd?ww=saSx;c=gci#be9GJ^F(v>)!lFrQ$lXPUO?4VTrpz zGN@QfM4N8Ieo=&2Sz`iows(r|hz99&Bi9M6>$(OkXO~#%!hrJ>Dp)W}hBh99~`LsOPiNd`y(AHya z7D7E)TZ#>w&Ut+#SC$J+LMOm(*ttwVLZ*nNc$(O+$CBtwPQ6q@HwG&*BblqzB!$X& z*UABG3r1kul6zy>OnpMKK!|_xmWiBUxtT}QVwkc+liAjh9zh>;(m{oFy;r;QJ=YME z7`vFUU|Sqc{zfJ!z#Mo_z1-|@WjRhXhHS``we+WmUIF1-Kxk}jZf@=lP)evUE>slD znDH1zIxL+P$Ke6|E_A6b+h>m=F=7S!>e46S1H{YhNLqRDrkNZl*Y1y{QR-AU&EyuH z#KmIE!&G>gh)a#2_KGa~_vw#403XCGFN7hg3XTW3Nn8`v5EDh_ z?O@~dC#00&uXX?%Gtv8)i_^#ZOC%zqQJL7Tkf#ypd@ak74RnpU^dF_DH z+sU$nj%4XlKJQ7Ido&dFG8F8AIyV-ZM?HOT_%tK?_t&P%H{jGSsBt7*Q;Uq8b z^zCM(1c!v*sAfjkZ$QrRB6#IZ{*Yt8~0l=?B@G5bv(!#WZ6`1lex z>WN4R5K|gZh%mZ;b}T4H-iy)P{@XOpFxXGA9)R}l0Fw1zeRck`-Tq$?j^*zF$M{da z1&DV<5k%#kPpQ@w*H(cBmP#I6n5#t`50dh*{5rdkpmLE&KYyW6tZAP3ar~R${s z#B%|xdvj)ExO~Ux)NtET_8TL!|L={>FC2ZD&}y}|p%`pq9+t)^-00ZodYT@Sz2<%H zE{GMkq~A%{5KY2F&E$G(7Q1OvELar_eKVs_E))P2X_mgD~HmJr2mLAe6nfj?e*|23cMzr6#0k!>Y=Lla9= z5~jZ%f3(t?R6pQ;_nO%Jkjnhhn=a)_BqrL8=uHs?q-tJDez)yf(FQVmT;XTxHki*f z$UB828|}g{I1{(G+0<%7`un?|F9=7U9X7Zcjf~-9AM%n+W#$S)-6#XzgNX)*3B}@j z?%5-RlvuS&JS6JVxlazLj65w=BLy7ePR1^AHgDn-+{3FMeoX+*sjvbU+wK0u^fHuWznb2!YM5 z30nMbJrB9l`W%`aDz?)IMW^tQWX(1<#PoK71iF$r;%``?(JTpRvD_H7 z5*32{yG%dQL>t83-@p8er~G+>VZxepIsl$B4VbA@|L;8I4DJ&P!_?J{g->+;m9L9UcQ878E zQT$^!Z5`6}aUzmtmtEeMoYS7(Q;(A3^7vN3BC%enMu3lG`PeY4ex}t>0k9e8gRA7+bSi?UL!@5z4Zd0d? zg4W`&+@Y-!=Mb_-x9l>k$e>++Ze`eGhi&(hLDw+TtIA+mR(VA(&!U=$zHPYl1uUcFsbc+oxWW}XdJ~!$~v1MC3U>h(n0I@lkDC`vfjCui|toQUz*o@ju zEk}JI&z?Og3ubYzRV!S!!0Oa)!|eLSExO1@LTR(1%HA|PlHH;VYYIde)DJbvl-p`7 z3OOHbP(qy6?0}dv@0%&1UAXR2C>kD5Ow}cJlhEk(ZMHoMovVFY6sO?GF5R2pK&v5N zLpIYzyu#DTw1}#EiErPRHxYnowYM&7(0}q(h#(OMk^AEFID|5CIh^ebt!5OG_aZD!>)NmFslOg&M!m-hU;^uV@gDj(P&6}H^0-^lUnMX6z*`&cp#cp_0}fNwM8zJ{J&^Afz3U%Kc8>gpRuyzS6-9AD<<%*{dICFS>c=!c`HC`T$mEbydwU>d{wu2E%3;1;k$J^ z0m8aD?>J{Qr`C(+7W@x{BW#I7oMUT&w`yrH458!xNpQINH`6P>?$wlv^`b)kd^hWn zCI#WwOb4(|yoH0V+!o(TX&1;3xWX7YL7I@SufUM}&Njs8bKVt&G^}JVhUFSM<4aF+*oQg7DiZCbML^{Wu>FWTO_V^5lF?fSXnY2Fb zKplMtK2Q*n3HYQgzuwUQ3#9(^ayIY{|1s5<#`yQ}-~V>ZIJw%GI@2ow{>qx#8ksu% zr=QWk_8XQ4b}B{!sLBH^ndCg5u5^Y1wE>!96c`+`>aez-DS)xxj*0nf zwpe`bzCOGS!8s$bu&HV(4AbdBBKCfYe}>>y`FD8nm9M#*`--mC`Xs`H_g(kaljqSB zxBbgL|CJw5E?f?k#c<2Z4W8e6O)dxmMd`46>g-w2gl}xy74s9wpw*ZWqxw)&tl$N4a6jroFM*-0kk#J<e%GM$$= zG}ep4UWY1LbEe|-q2NOjTBzI2BtyC5fyJvxQE{;t*e&ccUMBSDhbIy7@1dkF0|`qe z`xaD&97x1F$7({%#A*>J#we_=+jnGE}uid5xwE*e4` zbuO61F-4rOg+CW-9OIQ@48@E>FXDb_#FSQ)>afyMgkP7`kAID_gPJ|u{n}OT7CJ-% z`bbJn!A@-?CPW}})2(Q$+;}^t|e7AR(=845p;ibe% zC#b(ghn=S6IJ$4&@j#VUT1Vnj;a!Vq8J$~5+uZU|lR~q;cuD2HqZk@*9l5*t_@ahU zZ~#$#Pa3~Y(y5D~E;DjFI(wXUj*w_|{l=b~lF;;#V?wFJe73o<^kY<_D;lRoSjp8= z)W$@#m$7r{LPNu^8$R-v;|PF>@|of?E$s9(ptCh=^Nnbdtn^wCu zS=%*j?UVH^i-&Nx#@8*kTWwYK_513UTeGP=rUV&H$1cEOxCn+^AAMIt1g0G_7;F5F zIpj-4w~L4N(JDDeI#G_0u4MyYDL>iyPP8`_M|dt4(mR8tlYf&@<+nfY~2K1+k@ssY<&EDvdWG3yWkLk zs!t&Q>`Z(Iy|xLO5e)RwlJ; z<@-?VsbdBtSHx{aG=%C?LPx+=tF~0u8Z>OXB}m7Lz-Z8p;a1c7SQrF9LF&id&CqXd zyBSe2=QQ@{GZc^$MjvNqJz(hVk)R zN{(Aw+K6y-0gYH}*8n-f`Sd`yZxuj*RvmbPBioU6!!ml6l!=X47LShD2S@?xh6IaL zj#v|G_F-onGFbai!4WE1=0LjCsQnx{2}bBa&8u1njMrZ58|?Lpiagm;d;nt|*|%%7 z9e8K`K|&_t*?lLRs=79L#Tco4-W_)ZSMWtz5o&X!AA&Q+i$AN>YjyfA1%$Vu%SnF- zf;dx?_ylKcpzVZ4(55<0PMH5Tsu>GWZ`wx~S<+gM(QO5Ja}e=ZkZpETJhda&1Y;{e za-V~~x)}9X4XRN@CixkyoIeIh8qDE%koMJ*SP?@QqwcP{gQ+#YkXha(PWu0lBIjLB=BHB;7Nn{|aZuz<*+F^d_$7J~%BFiWn!by(yB-ljQq*~H0_NHjAZrr*iWBz}W zDt}nOq{Yd>AwXza0rvZ3{&%VJe`En9e+d{_S7#R?Q^7wp;h(%fRr^mP;4a$#DVRbPa-s~d=rY-*a1mZ30m>Dr`pvaWVi!kf(}Ot5GnEf*>g zuFKj;2sw+3B`YXv=uV5f)zpx;t=l8zb;>0gp_bl4zt)*dbPaWW(e7Z6Ra2;pAh%3F zKjCsZ4mrjU)-ONH2u6gX*u{1(QhazMM$%<|;(-s)C z>&clCRKFO6nhg74<*zs6#d;STD^pGl5Y`Aui7O%PUNB;b$)`SCTq;^JXEBYGq>N7c zc(41s1|O#7-PDpECT*DD6um=LOxm8DQ?v2ayZ2ZATCb2MdaB-Qr*_j-Jd0DWFEq^l z0^26yPRq8p<+ClDVpyk*umFl9r<*dEQFdu}j=RvfOCU^OgpF?0`du{iT)&@nvWz5F z1p#Rgdoqv?Y$K@3S)1LuBc&9oLy>*Mvxr?xjBy69%pQ7K`L+?dt8m8;mUAC#>2sPx zNuFS9{Bw$2e|D1LPYAodDdDXcVFpRu8#O*yGK;I4Hk?$tjEw{apG^ws0`NAk6kl z0D*!hZZ6*Q7dU=LtRA1~vQXFgh6FLk(O9+^Mj zer7!{hncJCcMr=Y^gvD?h@zln6kZ1jVq*O&p!15s4D%3pns6$42wh;(VqC$x;9 ziDk&b7K3HjutB2pY}wBb^@PnHt3=}tvtv>w8Qpuz3>%HS!Yk`@A@q!N7b!cZ(-yW2$*rbpZAW3@^Anz- zBYJz>lp6Bc+r0S|%J3=OR2~~E?gJIz;@z$NPpx*29mUkDvO!nrDS9lr^z?TK%V=qY zi;VQbNo&n}j?*qSp?S)VVT*`;NGc&7-ZG)H{4j53Po=HOSyU8-sbS{Tymo}neNL4M z{wrLEMO!ABg?&&pRkl0l(yY*{9hOTrmoI?>T^FsFO1kQETnoummTBfd!hEZ`u?Gt| z2%S?*G%n);vb87A`9_r)w_DL!0U7bH#>c`k{TrC*wIgvK)~&_d$@}r=gxHf@aKiaE zByNiw6B0w-*td+R4*DRnw|l=?EElSWNw+AjFwtTS+o+u^tv4`V*DmiiRI@T#`pF8} z`(0w|^HVQL`-k{@aK~y-pysQ~;IW?@3@H(7)Ud=71|OLYi@vSeC5WZyJ?dFKQt;jj zf|_v8R^`}nU9dnLOA-({2z&r#*H##3C^ahnJ4xj7@94vaWHi0JO^F; zl_?iF>UR-c%e?Alh2>*wAyWrlcqzyH^j)Hh0JDhmb5wDhZz*y3>jSh0Y-QJyuoYhc zmeKISF71NcyGZ30@Xk9U_Wu&1f2N#BaUh}ifRZT%bj;ZPZ%XE$@)Hm&FY4sSa7OLA-JL}z`0G5nm-@Zpf9OT`30SKLv> zfCck{DEB;IV1#44dgrUjAI?|l%x`zgEd)T1bv=QAOQmNkfqBL_@-94s%y`rzRvy)a z!-y49;;#^}B`+BjTxRUK3n~G7kO%3!PdY1yb-TPbKUJ@`BJ`9?rK-m1+bo?+jPZZ1 z-;u$j)D+H_p`OCd3JWolSkEDm3x@IR$!1cWWUTGFWl>`tvJaN}6Y_>)peRcWV~p)Q zTHvCs^f8~UryQ-PRy!9aRZx-Svtvf()z*T8XK}}zA$VXenXw>MU^K4XQvGljBM?5c zMhIRZ$c^<{@@BNl_Wx+Dgg|{{$jR3&;2n{6mw~qHl|uDpWlU(v*?Fm6S0r<<7+cVo-+~LOCL{zGYmd`kXW#A`2q{VMrm_} z*Sfh!a?ZtVHJdL@a$AGV)KBzNhTK_yJie$+4i}mobkiI};Uu+!G_$%Z4J(ncl?-@#jq0lxWcNaTCC_^+X~5o(lF@Hef|``@+%psg2(qvkXS&e;HAV}0fn zQ|l^9t<1k%Q>~sT^!j|uc`-#0{@vrPYQ45;;QvpM23+xUu{8bggY z%fX8XdYhpk?H2!lG)Y~d*cL$gX|7*pbZF0PZAVUj!swA$<?Fn$hB6wmGs{*LFlk_k6BF`@wUuLu*xJ=zvG#T5$<~LDQ(pZnNq^H+8WbGY)M0 z#-Y1XZ9LDAw}g5Lu8ptkb$i=Ugt{zzL2bW#o1JqB0HSGy`&(?f3_QCD{|V8o0Ep&} zp&o35?;k1S7_frgfi4&7WG3r>9_{P)_0?EUw?o^XM+h^|W47aSo^UEu@L%A=p0jTk zR{Bg^UTSuDD#Q*sr`KZr{st$wyXmUyURF(Rse3Aw%tFKT?We@!k}>DQ5r};~taKNX z0t)IzXla^t%DX#?dG2B1Cnh-JyaRhEDGjs9Z|v#=IZ{s=?=Z0jx&AncOep#2{vRft zB|pOmW8bhX5^~;4Bn#Ylsb0)Hhby09sd?k2wcmyqRvh)ut4b=e5Juu|O9(7Igc zvDkjU94Lh5)68yDg5@L_YZ*f`xijl#{C7*(ga^?<-Y@k z{sqwU*w(=R1ZYM8KtKHf==7JcZHTBzKS2OMn>Ahm?Z^WFy1NDd(1d>j=*&%806-4| z02&$P4?vUr4WJ9En-%{B(B;XyOcw!ae*k(o^ILNq-#-Al>RK|Y{2u^K{GR{~vorFy zq2wPQ(9$Wo^&1DszB3}fqY)A$!V;cA-W7+K=jYJJKrB6v(^r`Rq9F5b z^8E3tXUiW5mIy@*Wk|>b-!XBQ3@4#*^Fd@DOh#B5qEKx zHZhO2q1vu2A}^z2EGiEjnlf}Iq1&oF#@ZUTpL}^foJt-{GM!3Z86}v|)?z9nnVzBc zNySN;^}h2|gN-v^6li%Cj}{Z>RWn7IqSB*?5|{C6#aO%b zX-s}*j9F%R-U{6`<&1>|SO^H66%KWVZs-NKng}9Xp=)27!ExAPV?O`*c4pn}!uOOY zJ1csfm`62T#*z7yI;Zk@Rog87)E|82vgFNkjTJba(ansC1k*}T3l?x& z%#!_2sGkO_k>am1L$5don5#=!O;i`%LsP<8p_U=dR7qyjK}bRVAq97b%foboHTrZV zXwbd|qa^)jT->gWqo2yvHRj}+WlTdAGOSu5)eg!~4h*A6`dJ89r|!KxAec-|Ew$ZJ zLA!NwyUo zJ`Kp(V;a58p?O|mj{8TjCt{$vEe=JK^y*7ZKl&Lqp3w|3%W9TkH!(3PU!L2(wq%sN zEou7FMEDGr**u$=&r0jdrgxX9MvP5CNuT2 zI1eZ2C6GVw$9THz$Ke+-cmbLN>^%X0Fs;%(k8)lAETX?fS6w43#M42t1_o0PM;fRc zIpmr&#g5FjNFRo)XP*_H{xQhl=@EtcbhFDZ0!fdBUQ1ARO|DoBNt!&q-gkjKfGc{t zBJobn6Rr>GbzKd9%ARUKbv9*rEC1R2Oic;MRHqh5XC6`B} z!V(60nF550{gRQx@ghg2tvc$rPECpsR+u=td1WpoH@8*(%Vb)UDkuq;iga43F;#pR z1;W6)#Ow*3c#tDcKeVmq+l+}B|1!VzEW@W;R1WcX9C zyF`@MRe*w}2h1P!|6dFCuU7wGB1F#K?yn0(=33u8NA*56GnvBFr5*XrTagj+fBb1AQ<&7<+@Ed*=nW;1Sfau5h00poEi^}9i zh~qy~;!jrYfbRlLL&?0Jz<_$3K3i4_Nygh<8|lW4zRH)E8p`zgMa$yz>A(*chk)i3iw(@ zZ=G$m`i943FU^iPb`Vp=g}pa_4!O1DHM_yR9xsdUVMU>B8oCf95p=%P0Fn{|+c+ve zys6Mh3(xbQ>SEp2JWb%RwqrLAPk#o@72tB7aUWD46TgbyJ*{o1@cMiqAlV|C67A-J zA#7*S0Bd>Kp6xd1j5YNmSFi=Th)2{glSeMxLZXK*khf+v76arhaHsO#o3Ts`TqJR4 z{jTl(@vOjy4tBhisYlAK2LDKN6hYz@e|2%QzVhKPrcD8BroE-46J(N1BnIGuG9DB| zAjQGPj1qg`RY`ZLTpmQU}R9a0hWeCw;Xor;FS*x_}->fU$}9;iYWiF&*uNMvxeZ z%}#Uu8pL}hcI7vx=T(-fyOb23`C4ZEixuSomaT5k;de4C3{{z5MvL2%D6xSC&ghSn z2RB%h;m5&Qrpa2S2%>%tdzMnwN%U%(Sz&F=Zn(oz_X#*CGInjEQuxN2)WN*tG z#o-jcq?~JQ5!mKW_bq&ziS}(dUi~eTF!nNnDOltfJ)jUE>3hYjTq1tatrZTV_9zSY zP&c+omERIm1VoR)=ztJxi{QR1Mp#p5_z@Z z%$~6fw#7^Q__l1lBt1Oss*m8{SkhpKsI{C}LiQ($H5wk;exso1F4 zwkx*Hify~X8QZSdsn|)ywry8zR{mLg?Q_pM=iY;VKg`$p@Qu;G-g+CYx5k{F55ZtO zA^H9{t;wI8B47boY8{A#)qr$`%)fe5{3H4N|H1wN$%?Qgl5bOW^# zKZ(uz#Eclpygq~~a`EFNV@EZ?bwLCn(X|a8wxG*CqOE3KRH~)jP3=HtnWdHshCHGl`=!a_Xp6vMK zK`CNg_D`C!RD{frH<;%bdJSCl3H!l-+fD^W)_-ysFNq-g$3>S#@W@4>f?@tv%-Z*J z(k1B^P+qe`F!=E(-5}A1ThE9=Y=gKU{f@Awn0kXSd8${uy&)EaQ$Am=_{EC_N$*G! z2`;$BpGX@(a)_Q`G4?YTHXmE}ZuOjVSwx~u&@;^8TiC_xbqvfveJ3x3c4s~bm3w|71H6*~2@G5jlZ`x_ zYnb_5X94_Y#D6C+{uB|wozCP>5m^9>=zowU|1UZ8KdPX=^XRrf9v#`QiN5m>j}GBe zQ7pZ+tqlpRB!9{Le^k;|iW`0C5^tS5^b6kGuK5RK?$sY6y&$T7N%?!ivg*(E@k##M z@w2n>i>a?$ejrraQs^j!1=y;&2z9tlDC1%%y>G}a`|Rj!eA8EP#JVhWeR`%a#j|RF zX@DLULV;-?Dr3iCbsVqH64{u?O0{GCXi?sxt?}>%D?T7R!r}4EYruKkwYG^A|FNjV zZzxAAB@U0m9bc%%X(a{GcdNkTZxJMxd!*3K(SQLx1!X59@9Or^>L2r7^o9=Yb47pVam z25S!{ayGc9XT=Oc6BTd9*ut`X$_TMF<8dF>Eloh)uk4fr4e^NMJVL*#ZIHV{VzVrNnCw#hJKexQPfyJI`*vaT;`l}Kf(7q`1P5{#< zEEt0z(xHwPlSoImUql4IA_YfGv4PS@bYL|}{;TciPvQJ0g-W*4 zhIAhj_B)HY&aYzq7ZCj?aHyX4lmIyJJQ0Vw*B@&Va&l;rv**MMfwMAEXHCxdsw z2*Ex_WJf-fBSS}Pydb(ghA@sWzECsxMQM4YPz7_cnSrT|s4^)pYUotTe);5P=ANLfXHsLQKhjPXwOBm8NUL(erF%|3;9t{Fjjm>^iaZM8 zCT_K3WxV`+oYDCNnsoqy3|K2}o}Kl62zI;`x3HA171Yp$=-nmaDURRhbzgNvQ3;g4 zgV-p2_s}|1OdRa|Pv3E7{Vh&Sfg{u*(4kW8Up)&^Q)3%oJdK_CKL)1%$M+ny73Dul zZ31BmioWviyOXyHO&{x%s zUe_^a-cN>JV?hQTX#reO*e)ym%*BR$5opZ8jw~@MX<<8T zll=~uM@C$+l>m5L3U*zSu>D~A4kRw^6)d$COHL+9ZptzCO+X}txNW@~r9jw89$TeR#GhhN11-eG%UU8+@qKhKQr$#l@C3+ zy?QSJw{wCU2Z|H^{cR*;nY4;!xQLQ^Qq*}<*DT01JI|3D+pK8I0j+2q>PLI5?opXZ zLEIXq=m1A&o6Np`LuI?k5@sW&=ZGF2dgBCSy?PXBRjR}(XwbDrg*5-PLpmtJiix+H zK=pEHPBe3tEhkv=R-lTzjF0$m`AQ?Cl`2h10Uke3%r17{GLiFhR|A@c=?M#d^(>Ao zx@Uf6@Zmvl4Vu|*I4X})LVoNhx(aTwt8R}PA}dezP8&drfYU)mL|+2b8TSz9@Z+}V z3#D}@&tarY$3C-cW3uRKAdZN}+?$K{nyAe0qfBWWOg?J=^300~=-_IXdR;SY$-~S> zMWFepkyl$U&H7p;d*6eJRb*sU$%yEZ;4@}cod;D*$JKFidJ(iS!Qo9PCNs+-lS^jg zb_*b}KH;RyjcpK{KbQxYBjH8d2Q%VSqQy9YaC(xJ&)OL=jfWdNEnzE)BUq5D-3i+5 zh9I1CoV_eYb@G zEL?(j;b+0UD)*6wd)}ijO)BwPlk4+onk&ypQkCQj0fJ)a@ugv7FzMZl<%8uWMP+|K zD{WY{!J1CLK6C>v?R)hx0*3);c8kK%m+!*s3LBEF>$IuK4@G=OCGpC2RYf*r#|Wq{ zBta+#Zn`@X%wOJ-l_E()3D~5SV>hYJb&*m@W^(^yhmnJcWt|3g7Zo5@Q}|cw`tJkJ ze}-!RwtHbm4Jlm&^Q49-{nJ3_4^-=x6sAi6exYs7%T5|NXGq_Gd`IkhI{Uc|D~JjV z9~t#9*MU<-%{(33&hAcGK@5#bnmz}qg+qw$xOKDa9fz*`Sep1uEd=aJO51V`+NIR{<{O!Li|9boJ~?uM9x(*Q--gvRN4S4&RkE>>{EYg|~4m8KK1% zaAQD2(MV6R&ioxI1o9*xt-lstP|I)s{;(NP+KTYYccwzqe1K`aQUCPED+2sG84JR- zwj9@_tYh96BEhX!y#&v(n)fM-#$nC zCRM+G2D7U92Rft6hCwhZH%s6TrRcP1&Pr@*Gz25gG|e>PM8i3y_BtX0r7u>CMG zQ-bL~qsJ-J(JO(WsMD;{r0IWFvVaMJplZ_Q7-6QXKjZNRebsn@ezPf2FJpZNeOJmB zFi)jw(oIO`_rB?x^8R@STxxj6^2eD+J08Hgd146{SeM#mIAj~AoB?=e5AV`?`eb)= zKB;eF?$<7dvF6u&ESNFdCrSQ*zt# z4Dz?VT#XrBD!Xg4zIen~;^`lA_1;Efpq#Zex-L~}8N~?SVj5~es+<%TrBHHUl)~G| zQ5`dA#!vxXF?NzCBIKm)d#W-Xichp|KA4q~yQuxae5I^(Yvi`D3QaN^Gcxj;tM;#C zWuOxvE_GsX!f^M#4Tri7!h0VESOy1};;Ai_0dgp_x~YadNBJuvN&*geR2PUyZRg7H zC{HpNJHRWX^_Jw9lD#R)4Y$3DuqEP=2Cau2{hZpydzrsbtfTo^)SHl&h};??d!ce& z`4N8eTpd1`xV0V6g|TU@qb%>yO*u82WOWC~*6joI)%NKvA7)3aWM%j&a-GYYe(A{b zn^|ctT=OrwAnew~_#qr)_oe|{3CNSQE{ZF%Gvf2{a5-FUcAyE?l&3@p1a~P3Vy`rZ zrj}<6PD{U+Z(FH^nCJey{ch-yn{9(ufrdZDlqQ?!>2UuF5Ty_oDm}_H1(~1 z+|pA*yF^uY=bFNm=9t8D49;yVTI_pq!AXac-7lvLC;~@Kqm5;)_8cZ_#FRi6ul$w4 zTstpw2d^TXGBb2%@wb{fd*%$Amq1URzJ+Fy`JGFE&;-9pp7^9q9HPYPtVRl4NRhIg zVPlIXk8=W^$LR(0CplUwBKy2joWa>KtS~tTC0C9tnzqn0|Hm7>8lN)nr>vS5kY9mF zQ~EY%AI2L=u}f5>Sarp+ zSInJWvg83`TT?8#e%|Y+J3a}GaUA96OUQS;!y``=BGJpCmVU*;AuTVMbz@Df8%!L( zn6THhepCdyJr213AMy2pd=cxq)=ByUNE(G9_f)gc(_uuSa2jQl3It0`lWRz*9YqC6 z=LAPW18B0yRnx1aCJxy-_r~BVX~hyyDBy+t9eDPhtox0-w^UP{%y=iQVq4;#zsRew zu7A+`y~F>PDebx>d|Z}YJAmX(38<&lu1z#c-sAX z#rOo>e>pBoA%zC_GM(=HuyVB4Y=0^B@pN<)31Zi)p`;r+0<)SomKJg2D=V%(*nmI^ zhm$C5Qr(RZ^TR(R%VU}4Mk%Y?SgB#VP?3uqoe-;nGT#GLVZ=jwJ16Bj3R!>_-Mqj9 zsbt_Z3Z&SLAO|ZJtKV3CFp@<-0huR7&6yjv0#H1UW<^thi&h3oyh=fwut9WCLbjhWwBWqP^;&KDJDaWt=%Il2pUn=r}hEgR@io zEz8e&gKQCCxLRHn{VdL@I-*{LrL@plnh6NLC+Cc~QT_Q79g7X<@q`;c?d2JpZn;p$ zLsrROSE;PdT1s{vuUOzrtbp|v3nK!~;H;j?)fFmK(PVk;Br+qVpk(HBqm@~aoLsx9 ztW?vF0gf52@VlAElqTGf-R(Ci9sw zF|PH-f~RL_%AvL{Qp8KGcL{&>S?kN|7=WS1zLP|~5zSF$Rw_YuvyQDV1v#g-0j({a z@+NlN7cg4kBSpALMkit-}uy}H`Z9} zKLHI*D^tq~ZDlwqf{iU%?M)km^bqE}zU|wgl=E#A)pFo4&ye+BOyM;NR1r)&^O)Pm zmvA%ZMlKKVuA$rXSHLaqc?DugbTSoeo7tF3MJl_OW17h+T_7wAKdHf0eU7eT(O0?R z*^Ij`4s5<^3Ut3>cy1u0W!Y4@5)e?lA{J0~`1C--70C_hzGH_&M9USbz}1+-Q?#uz zE~V+rtqfoI4yPJ5`Xt+P^d#Kl$(O&4++|Yq?|Ca)#$uu&WKWO0^G^=+`l z57g#gMym}iB`CAbsVO7n>LZlSGRd%QXG;~;PY15~n_esS7j;|n{ygF-obKuX5@B10 zL*wpoIB4C&TOIenkaIQnBVvJ%Hg)p$Cp znXp+IwCpY_=i6qnjfk3Vhe*5oBXjn>!QI)9{d@1lZFXOvq>--m`rO&NV5oDRK-sq( zvA$5|-ur-8!5Gn#v|whoT01tPNPs!0Gk7If2b@Xs_;~B-+6s-QyB9<+d^6kK%09WuK7H|=;>&_{g1z5dq&1H49~;L#tSuAaZh-j0TEHyf zq7$Q*3#|gl`s0q<9Sdt`lFgp{AVJ4BXbr>N^KQ4CV2fW2>r(O%BgqAP8#^@?i{|5W zF9d_Z*IaH!{y6CCtufjc6G)pbjc(7{?PUjtzH#61xAor%@0ZsyEP78N*{1Rsc9`9x!ba-&=4#{UaYu%jq)zSfzwJTy*L%f;5qBky+}t!_jIPb%MNt~{ zi0L|G=52>O%X~|InmO)o4&q;!0-`%2H(mi-@aN1H62qarcRm!tZzA}Hu1u}|?1c*%ko||qaJt)F_eR2e0%&X94;&Isgp=)6ygPi^ z<2O&T{zN}=9M zp~_Cg*~4C2QQ76Nydu9Y;|@K#hHOeBxWC7!jZ{Nc@(&L+_5q&`!;UX4E&ZW3_NRoO zp(kr7m4hN#UnP76!wz-6N_^-FG%*Ezn$}Kwc~ru@NZsY1$W!x0>w6KTM4 z=(xD1h$Mj$+SZt-|89HYfz85ZvDp7{4v>=pPf0;LRgKZIJ;Tk^vDh z-8)qpeM%fC5NU=+#rzDf*^F*pKDrG5dCwwR$a$9I!cqa`?*=n}0KH5oFT5r&#nABo zN-_Mub^!k&wNy5B02(_139Y{@RsL$y$?DdBn)F6uVY&+sJ^3BvEQgx(tkjw&%Di#~ z_LmvtIMoLKSW6b$Vt`b(taJ}_m;Y8b<2G$2IsLHmb)xk%ukP44;tSq%KIvIZb#?no z{ztxtjiYtvqstG!cY+5I)SrpZj*i{ z%01FN2mLc&Iz}Ofl-lgy)9&WDvg;y5kROdTr% zwl2|asZi4Ylh&rR@EfT?vL2R6R;cgXO{e z^phpKw)iTJkk&K_T$3!Nv@3%~J;OZVDvMUNPV3woW}DVes=5R08GLd|)Q;(?SqHN5 zWmx0Z)wMDJkXLqi*UZ=TUg<$jnyvwNzMz%SBUc~BJ!lL;Be~w=2OQqAOvnd`o-G9$ zzd=L{&Je9#Zk?#$-^E`R2)@bA3)>runc`;_+eM#kRdcPR)iveuiWl4P3>HV19dfiA z=egT?wwGEb<$@nie?|;-++8z8q>Q|&2A~3q@$}hIwmPRavB*W zz_Xl5!WC-sEnSr#KBWkaCg8=lo>6Z5m0;Xd_0?1m?zCuBOTri{v$pYSM#oThy-_Zh zve|d39A|?X(s*iJ=!uRYqbZVf@3_f0u9K9vrum><)%gIU1H!gssb|h*qTTwi!?CC% zz7Iyw0Psw|zZVLhiAdIQT&=&GVO!cH5cc^^$TSU|c8RrvJv*au?EXZdG9 zH<9+6z$%-q4|vaO+@;dUr|3O_HjoXd8faoaqL7(TzuzR-U$S`PBSfN%!5qvnK#VxT zA;5o*x1LHNAuD67qnrQOMwS3Q$9#u)`iOggUnTsUwEOLuc$GYh@EeR+ukG1Ep-8WB z=}8MmZNQ|f%ZBHT!dvw(`C9|9S6G+0&j4(a-N1P&A~9Zl^3Q^e07q;Ii#`X!E986q zzF!ceJBYI0->W^o=T8{CoEkKQKS8+x|KYL|H;y4SS*e$6_-iGUQJjtX7ph<_NR+Bt ztO2EQrWOT0GW}V*S$PY&p%2kV+fr>Gg7);{cHL0>0@B~uJFaIaV>zRB<^-MY;6H`3 zABR{!O>0nEz_1KC#-JTj#Q2$+r)hCXl2C+;Z=Y3&Rv2cu-D*y(>b&jo9-xph!P$zL z(64`hfZuBhaURVf3M6MJKwh>8`0f_n`c&mlkb6s#W@n#Vhr61+p*&2$dwta$@*~En zbY7S6MOKLO;0d$v7l1zbG1|yw%f18{+sm*tHWvsZ6A1skQ`;jjDEI&e|H0?80`rN5T_X37%P(qW0)l-%I%+Vpu7c ztJjkaye<7pZ@#Dg&PPy9S~cq9!E=@iMMZzk6a&1?!f6M}sm<~F=Bu7;md*0-5cYdJ z=X@O^gS^jAdMuk&-|;Wi6akOdSHG2kAK&N(LLIO^m6&E3c7M8c;QaJR#T5xLRqW{& zgOjD64ndN>QC~4w7VG zaJs@)Q4isrxoSp6g~I z-3+(Gjl*}bMQDAk-f^olw`mC$>9rqIYDds2QZJn%C^(}vN?w*Con8uZ6WN57iZ|xd zuf!CT=zbGEIz!70BZQ$gdfd4x&>w>3U=t^VmI`a*JE6PO^fplznBkh(1_B3YyAIQv zF&SqobWp3TSQ%89vncSpJ#_&h@uj9wxP7=4cqGmb;p{6(&zKTf$-ya*-xFYA``M-A z={tjE4mEUy17^0pM6t_58=U&hdF_{s`-+LzNenU4+2ja6LF_ykCBD=I%Q*L_A=FDW zi%a6=!NRU1TL>JZs5wsw*Bb;=C#w3cLO?6e_JMV6u|yAJ>liN2k3`}VmoY8j3ka{W zdXutX@Rv`C#|Kw{->z8(ASFq*G$G7;g_T9Kd`~X~;9Zj`H9~K;f92V|_n$)5Rx_QI zs^wc{JD?%6g9w{#x_6jwaOs`HM6F!OK8trWSdSvyJHt9GoAeNd!)I+ADFoZlTA#^k zb{eS6BA`Flf;9^(kme0IH2Gqlqih=W>||(ZKWslL&X8+Dh0ETHi4}2(;Fmc~GHAkQ zQ*e&%|FB^IlQj6oM5ddQ$G2Zv)P+5uLa2Q2yu6}}G0@M~tcw%_vCs;g)y|4MjDt1O zE_D(+IANI0R@hxC)xNT-#TmF-t&qVpz)vYoPoOmzEMU=(0Jp?#S9y(Xj9DTh#)zb( zHzq*^*eEdK%*o%?##gOHYggsVz7Bfc;+8$2r12Yt@EdH2)^e~7DOe55tKbSONFsr6 z{f)OM4Z@ulie>Z_OZzP=R6_L)EY##pdEm#DHBM~#6C$C?wN6}X$^;e<4PC#Q?5-CE zim2(E{J`ZkGzRA`1;)4jJ(}Oaf@4pS5kE=Fch%R6ckQ2e7jEahsP>3xeusZ6V@fw2 z1Bot;kr|ES!@j##eP zSjQS@%JMmsYT$;oIQ^(pb$#UF!wMTO|m3H_E%_r>e$bCQ}uaZ3C~& zj9NTKGs6ZC*&~gwx4=0qI>2R~@3s3wOJda5a5T)?)B5;%64N6UM zL(F&Jq0p{!#ZY|rSs@g|tSu@7atGCdRb$~Q2U&Ch7#7|7jubFEWy{cET7pnvD}EUj zca82)mTvxs0xtp+D0X4$^H;M`VyEBH01QZ*;9tQ8N+1!O8Bt&50yE`mmv_wOT4RnC z+s~$P$kMg)GjNg+n5!(QI_Y7P2)_&Q?V95Qb*iH9|OY8%_d zrtZ(@K)KJq)uc02_~l6#@4#zip-jI6I)4YbCfQk3!XUshW`jZumMz){1^0d5*CqW-G%#=9(Wfea@rI}pp z^sW)YdL(fSP1Esow~xL=rPq=c#~m-dD-*wl;1{)>R=2CmqI6)bzW`i=7x8D>*@HH+ zU?vL58foRwg3fM44)4%{&7mn6i6`2uX_`in3Wfj~l>+N#$~I{NaRI*=E;6$M)_`Q# zO6h^iG30CkKYuQz)|@UMb-TSKEdB0N2nHGQ`YDm(b>c*X4v^?ONhb)eB&LYtc5+F- zubUDkcs#x(HTiQyHntV_l+#?%#jKMNB?wFFC%HlnrHdNB>}@ll&Kq)we~b0k;#>DO z$2={gx=u&Tm4%_I0ry->OsWc9^n_qFBw(8pl&ixNNWYvQ=UZ&Z8rEwZE6O_16jM39 zL#PSY@AdBKtRt_HywQf^K;w-~hokK;2>0rS;$6|ra)`R*L?0pBf&Lu9pXh5i^wC_L z&G@1-hOio{nXU+ydONu~k4{ATC*xW6tco6+4_soZ9JF zD9bQqJ+4Xg#Z{1Y-3g|w9n-}$jp-He%i`W&oJ-An+YfauGpT-zyKXmmW5Dsk;x+NY zFDpNvE;p9=+S8YOax{h$0jzk1Do$K=T2(0e0?1<(u3?D4mH@K;6Q<2Vu?+GK#@qU!oG)wz_LU{>d zSv_V-XU$oCi}TXoSoKmV`J2jJwA6POTEx=c)YlK=5V^$$r}C1mZglvHdM?$|mS9Sk zc3lIHe-RvWPCxRKfWlGPp8uS9INJJm%Ks0s@K_WS!~v8M%>sY)|2^gZCojm85aoy!Dj_oqEQXLXmyn)j+09UJ)NbR-;eNk zZx3PNJ*9c;w8eAe8V-p&YE@C>ejKl8;=-sB${LB_Ry1_oKh_DR{z!l&)z*e9Dk$sj z@y*ZHR{U->K)~3@A+xzhj|k2nlhBSlDUo!N=-D>D_;gqMTpx2WH!4u z^wZz8Tz|#|=AR4mO~8YP13rNNBB1i$#sz2K@}jA&shx{6Kt|5z$Vyt-VOVKIEeOU0_|nPkVJgzNeL{vv{Li6q@h3EElSflm zJGX~kyk9})shsz@;e>0Q3ocujQ(%drIhv9?xoh$Ej=q0m-+9;J`4t%NH+FrD#Jve) zedNs^Wt7i?x)Rwm8cT8(1g9h+P}~2V&|@qEM7TBG>Z^KacYvbY*QABniU;#;22}MA zf8+RR*0%{@RO{$fmL0%z^~Z?V>2y+gD(}C)kAIG%g~fzk5qK0dK@fF%19v{+S=1xg?tS=yxLqrQV5gTB}h6dkboJZ-y#6D7hJ#do% zH1ld0t;Sg$!o#5yfqJB9O+~nuwDe4!l9)xXi8kbv9wZ@zE1=US->@lH2GmnAqX~>j zWz%L$6^MxOZaz=@nJBO%%44&D%}gv;~eqh3(9 z;*90gIs2@6+PNd`uL3~7L{ z+~qacE11A5=mJmk@eX6sxd-;RT8T021a+=t95Zh*AsTt@3(A6IvaS#TV!4)_zQOl( z-+aOo--%a89w3^6BRr-YraU`IoL-l#kJtIR7N&NubaEx0ul zttVc@pO3qro(iyJt|$?|EnZ>ad{kWho(TH6$9*EeXz}%GSFD3bC6g8jK&26r!4y)x32Z2n$8&DYPwn>dl@|p6F%` zXKZeGuHh{hch*aWi4uZ&2;j;GjYz5t*Q5`Yp9%)g^NBQ5bA1AWoZ^sVR7?Vqf5z2l%2A! z2{7MlO!&CMr_k^oWc@~?s?@2-SUP`==ak~?^C2FuWx2Wsy$IF1M$DoT>|M=vvkq^}fs zijd@l&6d>anM_2N zC#S_jq3*>A%Ur9xBrnNIbVH56KJ z!iWyH7g%0B3pf9{y2di{JltTKcC=YJnnn}Z@JWj&8*2HHU{{>%bfR%zID?4jHPxBE zIQ>e2c$~DnAZ<_uKYy(N8+xN>?KmBeRFuQG{Bu;u1415reE^Yl!OgfQ53|+4qiHWg z4d+NVi#-Bb(Ugqe4IBGCS^p$om^d3xXj@it^a>73UzX|w95*JceY0UmXcL{JbOd{- z3VU$9_nZ@?VS=+9o7I_0DL1BJUB9a7#_B>c`YD_^YC_D08Q08)UADpuA#r9xpEewX zgx0Z_a)D=$rP!otL^8xuNsE3h)E;haG zE?LnGAqSL(o+#HTG4eJGS51>LduG5T1JXWT*A8eMmjgw4g7f3)WSN6gkLDVS(W*U! z>84*>@d;z^NukX{%n2qE6O{;MWw%4Ck`zO*6g_qR2 zXr>n+%74HOK(*IOXrQT~Br2w~eO5_K%ZU97uC*v%19oavN28wREi9%uHEd zkFYfh(etILbP!`XQ9CY|m77y*&8V)xdD}Mfku~hGz}870tIUa`mM{D{2g4>N#kxQj zz^jvY##Lm#e>M{$GlbEitl>P*C#QBg`lH-sJuK4&LvbOad`7J*<3|Ng%FG$};jcD@7UCM%nEA3h_pt;UeP_)ex~gF47L4m~_gg1Z)io6$|{YZSuu) zH+urtPp3Avc9xcQU$+{{Z1s36HVA3ENUIiFe@7ehp(s3Ha3&T0BA5Ch(Aq}U=q$M@ z9Pd6UHHvrZ$=9%!?+(VlH4}fWR+b18t5vW*5Sq|6!M2;9AWQr3bUIUQh|}k@4zLwk z5%VxI^T{@J8yj(cX&#M>j4MD*A0+Hc_+>xuN5Sg>tE%Y(hQi%3Q*6sS@tw=6PViSv zCQD|NXq0LDyx^)zey`vmhWEpAX{n~4&AzQ)@yC;s?W?8;Mnp4T5DuTL%Dma_5VJ^M zsBA%oEkKuBVwJd2)sGTgYF1=mX|b=%X2@hqGZKT;zm*iEq%zG@Iyicl;yISEe(U$h zP}Cbscd}Ipp{C#MmBlTNt*!N9Q>8{4%gYTPDR#44W|>Y$-`9aqi5@2R z3gTub=v0odeP|N9Qp<#B_B3(0rP+wW>d2D;+M-D2uBI&J zIGwAGUO`wUFiv5$;+5`$0TpSv+mDI1nN& z==`B2ef6482i1O^+8@iQQ?eA{u8%-5bQ^XaKM+p!Q@1ya=j>@{9HVUyu`D(e3jyxW z#$X-c=%WG<*FsE(4#L|SCU9L-TwQYd`aUQP%f4}9TSH2nfE%)8_gY&5QA2b8!Hi{= zuzdMb!7_HHu#s%Bfp;oyvL?E7gmq8_xtS!tr&X(L-!$#D(7ICrS@`++hk}lo6K6u9 z>M74y5VvLjBhuKd&W3FP+1_V}M^ND|kVwlQ(~h9(Zs=MhqWpG7VR!)}+8Qocsv>_Z zx#bXKAq8R5HWZ309vXb1Pmh`stQ|y3xMbq`{1X_I8iAzpG2@>nDm<61PH69*x8q*~{aas!~2)ncAD_73X4GJ6*_`LT1>}1ZYUA?v4ynHd57J zK$T}xIV^)cAz*znwq&@Rsh50XI#L~fJB<${@4xYZ|AKG2sc0Fa6W)*s;^z8A;wn&P z6?0j1-QRp~xwW_krNluFH6oQs%#B6q8bH90brY)b+XSQ>UmDH!L1oFaYTmbZ0oCoj zln;f&e-zDlt2nMj-eBMV`t2@4?pQWl+_#g zsRL=swpmsn<82m^$(vs?$CLP~vJO*bk8?Z$)9al2iv3#P34r5`DTpSN#eLhKfGK$# zo9FHnwk0EQ;8gE95cue^-yiJN<41&Y2zLUNbYu=MRx0qp> zpkbMS;rK_j(KEHA66b0iq*-5wvQ2-*cMF@U+V=8^`gyInv|nSL?Ly9MEs+}ot8x}s z2bk?x99}*-0(3tKXzhCL{9`NB8SZB>JjpjvDfgCt-8Lk9r1E@fS?FmdDy`~*%*f}o z4z22lfJJD@<=zJ!+!Yzm{{#&9W-=ohP~`(S@x?+b69O?X6bKUiu%;Z*x(rF>gd zf8rb7nx@!Mk#*L0nyO#8n?|Q;tU)`R(nyHdJ?l}~x~RSC`f6@$ z)48Q=1+NFCd34vlf2pRKblrM-sBfs9Qad{v$|&eN=YBc&^tvaP?H{8WpdCm5f%@AT z;x|vaOr;!m(Bk9J9VN&QB!K#-F&`Ld1+I<(cmI%H1qTwStH#Mww%qAkB`52=KVR~7e z{E3T`z>ONH^gP740k4LfEK#g5`Yn^5715_}xSpu-b!B8u(bOkUc%A~I9%l@-1l`bf za7Bd#Bk88#7FJc(Yxp<-Cw3MIb4|O;$9wQaGR~#t|7v zxfzy0@QPVe3<#WSq2+Xl)lrms`69B980&#q!Zi+rvY;zTVEK^c*5aziCVIJPnDQwN zlF?G6S|IE`6Ab>szS)-jO2>noj@Hs11UfrT*RtiCmHCP33t|BP{tx=sSKAZ@CTrf> zctbEadXu$L9OyNU;Vl!Hh4qE5zYk4+C>Dsfx?hk$%PcFP7@PfnJ<bwL+ zFyaa4K;YQn%264+wel1i8X&`EDz#zc*dy;)k0M5>FclptjnPQ35Z5277=6-4HTKXO zA}6qiv8dLChnz&``_`jN)9PmNLcWyjXTacnJIh=mLYp);izoqsD>C*q&c&XVPOBp2 zMDrrh)7DLDQcV3^#A41>m8s|2tv!Zm z%kf0)zFM+UW{hXR$Q=q3k*E{4yBUB?*C_3ab&uPDs->s;3umR4M7g(@a|)~Ra}$q7 zl6H&5ZAy^$=o*9lg|`}tIJm+}P8Tj&@clKuTxB9!$t4}<}y4PA53?PcdUxQ{Vs9HJb}A(~D0 z@YgmUm<_y2UFI!r*C9}}7UPTkZ}gSZlW!%Z6DfPwbj+U3efl{oi^Ms<8;YkAos0l3O;dussPfW7 z7OqR9BzL1yz7x9M%;g5n^YX;VDb0aqAr|lLAA2oz&>;jBkrw`7%hxS(%6Vn#!r*Qi zju41Iu{@>zkRMBcO%hwM&#fTOsL~bTJU%;d`9S8JZ4^Sdcx;+H_mm`%tMofi0I$Jz z?!o^kwBdaA0sdgif$%3Of$NLN1H;s0R)M^6Big)q82P}*1D(^^CVDNEbyRDGpU}kR zd&ZXCK!(A@#c=tawQf{pbop(vrS!JOqSBmBc2-?+?kos9?jz>!af=9sx4&(({~=@6 zFolP^fi&4HP#5+;*zx_1Dg)jte^I#qyjZeT|GBfS!KIA^2kEJT4pBtU2n|DnSz+`! z16?-QAV0U-)E2ASeP18WXJ%`M@rpIvfNADw*QW);}7TrlvIqHrY1N?xRfo6U{K;=35 zo$D5A&c##80D%VMiuL+@Du3S|xt*saz-!6@E~|HM#kIiZxY!Wm4y)BQCsm()XloV8 z9Y>qSZVRnA2cz0WJVmUBg>P#I;e_>K<)>ZOHa2;eDKB2+I_;|UNfZP#EfrJW6`dpK zw0ZnIm_oHOR?aL7KvP}QXN2*frQT>?mI1!;7SL+NCHz|>+VBTe>F5aB8vNK^jA@z# z*SZKq_3zo{Lz-;jJAx9l3mZZT*N=jXF}91hUObN#CSU2P?_`C*#3K@so8DF&VWYUb zcZimwdBnbYf*Y};=3AdRw5Egd7KM+orpx{3z&Np?7;jbz4eR4Cxd5|%w*HyoJjf~< zGd8|2+5?q<&|%3(Qa~PjZ^4{LlM`a>wP+vW9dp#z6cNDhZ#VtZZXHL`Gque$_?)@L zv8#;b(fL8~k~v%59#zQ~+A|KRftfN5oyCVl)dIfcIw5LJoKJ5L#g^^);}ZmcbWz*= zOlNtCD%khC8n&6l0%Y!f6ideu#n0gk$VjsyEy6)G!jvNnbseNQ6e~F|2r0OmB2?^k z(B$lGp;vZsKQa%I=4bE=hA~B{texZP5&2Ez)E4(>szC!N9?b(N3WNhFYN?LN^>}Zj z=rB~5M#Qr;m^(`(L-t)x(UQRDnN31JDNbF1b{3W*Y|Yeg32)ZiV8r{1e)WBOPxKRc zwOB_)b%PF(G01MP#Nuz^Pa_FKb@&QW7_RM>NK%0P-JS`AU5|bjGnz@uZVnsnhWt0k zzthKmdhPttUSuF}@rfR|#qhsp)5Sa-OpRT{Jd90&S#$Pwe|6k!H643AG4$Vq99rJ( z(Z)yWR1Fu9r(E*uvv_QS(}2Qh9{C1M1yT5*Wf7j{V=jZ+N zzSde3V~#n72@a=?73iJ5>4B%|#6G8^$-`vlI{<78GxO8l_a52AP7sDQ0U+6H4TE?5 zgzoA@l~cZrghQ?+o11$ei}Iw7=o;5tv}X*HbvmRc+-rgO=q$AZ1*2;L_!(`tr}NXU zf~6gHOKf&t@R7f zd`auP)7a0u{H`@|FE{Tm%Yc)X$#H8<8f7z9l}7X?0z1wRycu*zt|oEJ(KX`eN)2Fn zV1@OuHQD30<p;OaT1=jH{mqpgVGW$XAMm0j4Oz}HmyX6 z*?}r>T%+a++}sRcLAK2mjnvA3>xy3+uEQ_K&a8Ks4)Y3QMKVg}^3RNRux=oxSB<`| zb_-o7dtj&^x;NkA2pwjxrua}SF)hFsuEq2oh$=jCj4#Dxx84kk7F*bt9W}@9t80C$ zt{QwfSj0+WS7H6v9A|0c9QwNq17VG(CM9Eb-O|}rVgl~sE&6Y@s&wPJi(MT?&aiyb zZ09__p}jYBf|39gH8wX2xF>7K{fn1}h(A>|-KLI_;M>)BAWA659je@I!UJx4o1(Po zO&V8cw#%xc@h&P_@Q;qPloT1tQkNCZ4T*V_2Qz#^2q&vyQ6(p4 zGkwwyXTp2`mvm>eVlzJeIT^D4eBNyT>oQv0#>Lk1(+$PR%+}~1?>Zq?TNarfIcSrC z5Ttjj7RuYF3-Z$vP=;v(9YzOTOiHEwmtKVG`o2-qsFfr~2AEGGgqcAuZx^01SBCJ< zN)o{IZ0783W)b&!RF-Zh2q2)1o`5gM1&#vB)I|UlR0lc)Hu*}#+ zU^2sr>F4>)T>@^ZHb=`WGK{gxRVCll)fM1RwxEX$Muuo{U8gzZY7Wf4`h49<@cR`6 zA{9|`kCPud<2Oei9rB(G&`~u6z}p8Ya`8u5Qd%d9`;X zHo=b${I>|GOBsIp$@H#%OX8mx5WufVfB@{4v0aIhmY2Wnul-dKf#l{zm3>~1v`;xb z{{QtA`R}vT|1N*|DU6RL`k4co8d!taY(VVeej%AzvJgY%n2!*{|BM!(4zUmfg9}|4 z9imd76!8$hO~#8UD&@^dFjEeg6B{=ycrPY1U9e2cm*;cQJ#e3R%(xs&N%7fyyJ!6+ z9?v+m4YcY=7_XNYj|hWG9@ay3guE!EuM+6?^YbvLDwV5=9*Ffb{~U#GJ-sH1&PnIlCRz91vRSWDbJ}S0M%NrAUbRp{Yr2A%?;dB`KKtG;WLcD);^sK61rSuF7H`$0~ZW*Z7b80<>zbYTnWhu1>XG;q4H6{(+AB2uVJP z9l7sjgw^N4GQ|g=Lwc0og=gV=%y*)RdkY#TKCGmjV{kC09--^Fi4yS_W9rm7w@9?3 zR<-9Td*`E6K)E9l686U3mk$QciQf{0v`7dH%j-Q7h6w9BP{QPwX-KFfyq=% znEgg6f!y=h_vV=Ljgu)EQw!bUL=QL19=wT7Rp);V7y9-1m?~7R&Z;O>CtccKI z3fJ)s(Vw84*Ul~HDD>`g#|{ZD`4*~UsdOL4OT6S?gLOo7H4bTLpxD&s--(k~O?Bq2 z>kYDP`d-52IgugBnxAE6lhu<$=9@!PedkE4A_y}-DNv4`Aem+lQzEl_0hOwSiR)vt zL6pMeAR$1{uu}VROS;qP1z+gqHr-3K$#kU?r*Ts+ z`GqUeA-)E`lr7Tzo6o;Qf--Z{5uVRTu=rUA{u{Zxzx77{JrW4&TUqHFSQ#t+C+*@N z`J+NfU2#?p`CZ0L94jwg8lE*#MG`7M#LAB>QMrt#i!RSLDcY9~-+l)44eT97S6`%S z8pG@H({~sPGQQuKgJ&<(Lw4eM!Zp#u=k4tVrt7DUd2`Trah)J0rmdVXeHi)(vGL-y zNOSZ-LKviErE9hRcqN_~9a&|mGC*Oj*wl#cm4EDyF&Kfudh*6V1n@?~S}eMyKh-Q0?QL}Lqt--S7IgONM)Yi}F^E;S zbDCAnL^NGY8!h<( zB4YtVc{bo26^WHW7{t?OYewC=?M@4PRh<-|aAsXNvxr$MB6^r5mi8NWUq;@RDKmcbtar4AJS z_lkv%qB?k<3i&0J1IDMIP>6sS&GKpG4}mPpMmzeJO(~lK%D5y{M~OtoVJNTJ)VjQ3 zb|e?Rmm{-&XPj}fm^SE~L%hlmri|I?5E7i*p<=bEnvg>Zog*^w=mSZ2ZxIgxg+WOp zr?qbFo--c|DS;Eu`yWjoYCJs|ib=v4D{!0FeaiNDl_gc4qP5`;0EaUgiK z#Bj^bBG&{5F5~;^KoN#_5lZ5sUR$pNkH&xv)7Axj&ZY z!g5yol<#WvW4dV&HPOy@9`QcS7TIFnUn2s~5q)1{@nWdao zXCpy-?*$65F^Bn}_NOJh%<{bJXTNY1!}nhb;h5%BpX~t7rz<&koXUDif;-VIncioH zl$Ii|#5IV4OUH+donw#i@%4Crp%uRRa?7S}M;q zsV~CvhPHFAw8|=XN})rq_&{4Adj;SGn)jSqW&^<&%A$;PHk<(Pzg0;>wa|>#^q%7J zU^ukQ1GR&m3Y%;h^DTQCHbpA9S3kNQv1_H~{u04$q1|&`L{F-q`_;V`Q%_MOoj4+P zzn@sl-oD)cY?dvjd|tulJxJ_bFWg_v!f8X$usyr#TCIY8Kz2cAvW?Mqw~L6#ZW(_h z0W`UaA_iA`tEH8)u1`90u+{%wch^XCOn@=PfWgl9i%2>yvjDwzl&|dPnu30)Y(T#s4!v?sBOuehvKVwTYQok}aiIjB*U-XVtWQWE$l0~oy zjla`e6#aP3H;j!N8!-#Q9YsC^9fqr@_6G7_xWiwHY!aGJm|~x~Mi=hi($@abi~Ni3 zU8KsXF7`f(H#n+^n#d0Vu1APMlOo8wrWc--XVz~qQuD`^SFgQ3RY1-AS z&;R7MlUg^RSzAt@|foY7Db9rXTAy3KUVbo7|y{CK`vu>SIT zeaQx^FEVI_ZJb=vGe}SBpSLTJep}>h%)}SRO zh4tp+TX_&QAzHa`87UfDN+tp+)}2K$rmKlI<>cmp} zpb$lMT{qvrh{Ev(!erKYOSEG~_Mkn;s%wQ*RFg0pe-ZPn!+Z_HRJrk;w1(gp_(u(FX*2)G>A@^Ud|UtXh9|T5faW^m-Hk z4@{d6{n}Em4NLV}JWj2gyj$8*_T=GXRVzekWTzQu` z%9YE(F@o{Xt?Uw`3Jp@a%EIh<<3psl)h6F>$CFYF^;Nj|56m6^B!vfoEdb4Q+Rag( zPA4xXpT^dqLPQLBBo9mZv^sp=K!qFquvT|MP$To1KF_2C9VPk>-+mQ<3-<}gDXC1q zDlu-p=kbJ*CICOtGZ%t21L zze7u;2nl9obCva@_;PJedsuXaFM3kgk&oFX4B;lT1l5sYke!@oa=>GEa4t@IN*691 zS^6`)SU5!oX^^gO4B3C~@^!(u1R5!7r#dw63Dj2kI`wXnE{tS={*ww#gx6%sWe&qE z9BZULcuL~!t9$a45URTy$u;+~^3!=va-==(L{g+l%*tc7&(3Xv`rsACApE=D*%nvnQW2*7fEM+Dx`N?igT34DYUA~hT+PP!P zVUq^X{aVr$Q$=&R<+Q<#g!kicQ~C{LvKo1Tj>;XD`knN>KdqUDt};oh+A}<~exLog z`H^Ncm%{yV?+z?Tr1!$Z4NOg_&IKN&J%i>hNgL~RlqBPG%Qp~**lF0@%+Z!JE$G7N`yra&s07rb=Bk9fuqaH0&Z2WVuQLFYjiFoX`)QIyoyQ*ePB`dkKcCV1|*jdX^$$6&jjkE3AT?7#6t9j@0Tq_HVeOCC>qu;(^uJLBPgP;c3O^#Lq z)VO@yAD6(mPb|{#3+a~zMEDM?8C=4UMKWS7FC0yI^$zHaI)rg$3vW0SEgF2DnHE0_ zn8hhE4J(ubrJWArx$^8rXw$w_2jg*Aj<2m2Tl`kry5>j^c5C5YW(9`lmQ<(VRI9>i zvZZ!h0~y2Y`OuV_c(h9#e4vqzIM%C(P}b#fE$CsGwZG)RTYqd+bdAZ8eVe@k6&a$2 zl%@D0-y8tiS@Cw#-_j&$(3Z8^tK|M`1lA^(NotpTM#S8@_$_p3#YDc@4?I-soC34R zs59bqleXbSo`QSK?!NM?8SqQy9vWdm%%&Rt&)Z@-U#l1*>YU>-XQoKx*x9v~2~_{{%Q*fMsaCGsw|v1ZYn)~K{M?j>^WUL+4~zB=ugd75iKoS4T!4HA+Y1VpnpRiR z2P*w4x+Vvi`r$$am2>RGDfwbnef+bIw4>G_kOGNTLgKw6gyUeAn2i!4yjIG06NlH$ z{$5+}fHhy~J=l$o7X*c)Om$mYP&qX#f4{+qM0Mu zl;~NDJNz*Dj>1|&d&a?8d>%|i>u?w)6Xurc_m4?ObxJ*9Vb0bd8^uC^}yaMc4=^2vD6|A z!I{YX6A4gBVs&lIWCwHMZa2e>3;Gp&ce8IU4x`IWGUz2?Y zr)eSQAM$~u0S*#my75`G!w=#(vI%*pvZsK7E&(pGKH5`&%Gz_7Zy^Q$lLlKPBZm%+C}RgXRTVk_#lIGFhTck#_+s9^5xeYa1=`(SX0XXA zeet>#{3cm*)|_)Sw$_22vna>KgQBK)f<3I7T>qYZ*vXYD#nH;a{ECxnmX5WNHcN(M zy0U!U5^v1tQB>HZJ!mV4=opJxDbVn>97Ki5xS%ahV)-Q~Bi?qH$O@*;V7Pug@$$UB zj5d*nBMZOj`ZN9?-!=&8nW{TfSxn*6tnpfDp7@!!EwYxT$HlNg9X>J zO?!}_&k$Zm@z@DgQcKrT3l0oMmA6{ea0n;Z4g2wMX`*agXRHNot|uEu4+ArF6hxR0 z$SsyA`MG(JpaD98CcdGJG@ zcM8*&`b9{E&bJlw$-L>Kv?ZPe1Q{zb7Ic$sbz$8eGN_wE0$rlV9i1r3Gt;`$5!2S# zWx4ssmM38EA&=Gx%iOkSwD}B(oJn{pn01z~(-*}6o zvQpkOsZYoTQq!TFS)s6Jbl29NgMCHU7&x2E(_xq9ODq+ph3^iu1vRmF*XLGspNo8B*9S1?)IJ^w+9yk;~lk6inMcX<4sbaX#p-Wq(`l z=*D7~(NyJ76YA`(oa<12D#o}j&y|k!Wjr;9KKdHU-PS9FfiX<<4T(Fs54ZRwnC^4j zWZ1hRmeSHkC7=UGdS-Y>DufK2Fx9kLH&Jx}F~t=9-O%LJC(=I&nq4{a2JQ~JUQjO3 z`)THP{OCxvC``-^txsAiA(K3LNGMoosY};`N2sd^TDfs=u2)EX97u8OTmn95ElkC> z8=B!rXZ;*y<;c>oFY5C~^=FYgzVORN_ZQhq-nGTPj3)@8dvudFBUU zsBTF(cA;}cR1@JhFX;`HyZ{otGg8ce2rktY`iedp$UHv{c{*(t1i)f>*Wy;NKF7wG{0egbMul|D06)4vSrJ0rG1bOy zZ*hXe$#<8ZeWIQ$E(Tvkf7B=)o{*`P7ND`t3j9!hf?px87*^U{UK67psdG$jDU-+Q zDW3&{;t%Y(fOvCluwW1Xw5pVH!y~!|%iEU}woAl?TMx||4Q=g?SdzO}#<@^9Aar<- zg=_ty6#+H5t*W(0cMOtuPBqow)o?2uR=-c912DOMX+6_O8=2S*(;u_kwRy+%Sx)71 z&R+R|w!ka{@h{F%J@p&E_4ik^W6Fkkdt5h>S6huzS5m{W_#Shn$zP@0Hx4SwyCXR6Ysa!=O8WzuUaj{h$)33kB z=EK1j#0A{_A`?B6Ticc00eMDn<9Qddj=MIpsX}FxyE&l*ht$&kL?*k4UF>fCd( z`tqK<<*q@moP&9P^5IE!-&LIB-(`CIAfLI>@5DYZ+a}&A3Wk!yiQ?qN%dZ!QUyu}S z_n=Z1;b4V;vs!_@`}>sLh4fy6qpDDGl!b~dRBm4xq_`CNbuv$1RXsn#b>$O+wKO*5 zlShTlD=|#!6c5RB-B;PO=dj~F-Sy4oP_Kvvm90F;Sd*!9hW=SZH*ZAdq#3brw10pw zd>(FgA=*$*likt~s$RDi{B`L9W7hH0KDa@G*TO&t7Jp@diG?tUsU$)R&FYg1>j$%Q z;yor;(jriBz!_uWl3)UvA@s~%ZY0`#5IKF*=?nMCK>jCH6$Nyqj-0VDmXe&?7XP63IYH}a}xHa2l4{@y5-A`NY_-Qf}E1-S>P zR7a5RbqTxko4xet9+nWicoO#s(Ueex?4M zG5HrP7%7-{X#0uYBYYw%RR43`rs!<$^xwz3%G&=Sa@CaL604stC($WqB~OoMEh@B6 zSU^Bc9hk3-IOWG9HM{Dx;#6qK!}kH{)1~Squ3inF<@I>kyyS|Q8ZV`t8ocH)xqg`5 zKFQwle42&k^QAc;3p%}@7=-YNE7BY%3C8THrz`1cqzgrB-d=jp83Y4)ems3;UCdCY zLKjPHw-9KH{FVp=!wCnU*lGk4{M(;4iiED?%(HKVqKa>|A1vcnZCfpGT-O8VS(XmGPF$>0_M$%( z?N2H{H^sF@Jod=(3a+Hc{OyJxA6i2o_7F$pEy!1H&bgoGZe1%VxKmW=-lfpik~Cq| zp(;=wA;8FZlvk@pucC3iWI)%KNf3W?5{KoKVh`?R$t<{FuN4DgbmJs}6#FGK^K}$q zq2W(+ePk+2_pUvu&EXy#5+oyP^EDes*q#227uCklI{^l{nJqqLG7 z^Ys_2t|Kcdy0o;la6dZ-K^buTG8M+__MV8H?=xqhnyX9tZc^pD2&DMpd3@VGOuc=E zZ)A4Yosm?We`vef;LJKanQ0dOEV<-!%v*1ItYB_mTRC{l37LppS~sSxw_DHGJh7QG zMP+5x>|TIMB@C}RHDcGIi5WYdy$F5lh(r+M^*LKkSj$@qO?MX2C_ucA-g76v z&8c~OEGRok$}V2a<^Dq{k6&QL5t#d*_Q+=WTQkXlLY;LB!-0+k`#q%(opc zPx$X6TUjxeHA?*!H(gZu|@V3KdtShVQfCVn+VA+vNX%K^1KEjm-bKO`f0{ zu8aNIYJsDI2l>Jage>)05rkG#;m;7U_!{VB=l`iSneBpYL;&$po z+YY&9@g~}9LL@mI)H{P6b5P7Q$mIF0$+8*5Rl+fe%UfZ$XMM&~;((`O2N!1lseEj$ zY=;LXp;;Ffm#o(xASMD=1`z7cqrj!?K4dEII_#g?ok^Fw21AiGQwubL$c%p{Psy6H zLyWt55{99?u1|Io=}%%RAFQLuL`tDe+M*t(esg{Ixo zoblA`cUAIK?In@2R0HM@rK?7$CUSYieKnn{MPW*xoUKpt*cItx zAl{*e%NKyGu1L~W9>iqa701o373Bw0ebAgR(=}m`>l{qj@yzm=qhwz(haE&JTxYdt zjhnedKiIf46=q3};3e5;-6lT(`+d$-UW_6B=@v3t2knfF!@xMGonZ?Cwx1b{K~QX1 zXpKc^Lc{*Z4nfI6poT6eGZXSzq_d`m;9Z|F8;_HYZIh`_uc2^a%i>vQ#h}w?ST)tN zYngdX;gC0TMWJN*f~jQS$;{N`j%y3`+3m!Foahax7$@>I8B3a2kA2^TU6ld0Y}{#H z7jGxWSUp-eusd0C_2yl1-CBoxtkLMdh#YH>8%|(*#^8f|T}YdX5EBA2k+W&3WTBaC z2R71XN8D5Uk9)gA&?jE$3PjrQm^I);?R?%Z?`DMH4LW9lmTJy zPM&_QIBSKUbGYag0kxMZ3`7PW?N$0EIZUo=fvWj#D2Gm-pdQX=NbPuA#)yvub>$Zp zU~<{6!!wn|`m2T1ubqW?aI89h8K~1QIY7(l_r3(dqkS0H81j5Q^-NF#V#gWL z>M;$gm^LP}sDZd?F**}m79@UA8A`K0KNAtEqdtF!SI|7A))CRTLtv(Ex6vyDiB(t`fZ=xDuX?qNrF3>t;*k_Oz|w$^bw z-#NK-l<6Vu1oCd-p!m%F1?cwcI=!KoI={jAO#0HXes{wet5W{eystBB}Eq57;c1|0(3UUE#DJ-?GL!RQ{V5wS4&*1Ei;)9(1L z;elPGr=64u_qT4}5xAwMu}E=T;3h6gN#RR4O_mJ?wC?ZUA*$5nN>pt3P^U3J&@}hX zbDqC#yoUTxDr_+^EwHSi=dl@>@ugyF)f*XQAx52MqrvS0OEZ z#58njZ1vt|xw$y(n>F#1rxVNN1+81+CZLrhukP>ccT(DpJ07qe=J4~ZD-6Vy z^k~vVQ-%BOm`3Z?3c5+{w@DWRnctR{#%S}tl;%%3C=nMdoU2yDf(`N}jd zULV^`pw)D8F@X@z0l>j>3K_|u=fNj_!b4{9PuG`uv=3z`TSt48=Oi=~cO?{y;8@ha zYHKaWHwJJ&!EXWkkos|)9WTGR66v6{5?)hwIjg8lrm;R_>-qe=BM4I<%j`k~LOw&~ zXUj}RO3r*MSXE8R1b`do%rj0EW(O%?zY4q{Cq9^Pvt*^ohPn^3V<`+Nd0;oMWz={bUO(9+ZjLtyIoV23C73y`g2tYm&O-Se0Fb;*UYpG3 zIZ2(H?a34u)(PYiteR!^<&wfujx?=__?^aokF0W^|GLjzr$#U5ybNtIc|Q{0rM7ob z6E7#OE16VKW!M(4Cq|oJeEVnl7eix{1F645FSL0;tbaUC;l+=FV6l)N%t6y3@{5Pj zk|x<%_Q-b1yGOsURF{HDq{3k6V!zmo@a5f2bA}$(+XZy`AuoTb$#^0CK&VOpsZ(R7 z^QSCTDT0@xtq|9z##3l^0Cy%YPZOwZqYo@|@2Sf1{^n~w*&~ifbyn#*3LOlCv=mc= zmTFrS#^Q$z=@BJ;%UQ0;Uo`ed#B38Lb1kS1%qb+|kROy&xAgR0nHc?Vve zr@5!?eSy^NK0t0f%W}We4pp|}X6>h~Q>P-eT1=M|&2me1i7N;cZ`>eu=bTk|ISmoX z2_Haphg3@h+Fhm92^9ZweaCjh59H_D}Oaemi&tImfwCyzg8S zy(!>~T=;&F*I-OvFV{xh6`pL?LPUO>xgg#C7({1GeQky>GGqH#BW}8~dv^k=nz{8x zRFJt>!rQNvlD`L9wH_CrVT3H(mRx`9x6((coeOK%uoTJ6_ve033$us?j&xwVU$=+S zYfRV*79yo)&2z8G7tMz?53SvzCCs$OnXhtp0K-Z$$N4?-o+@#>rChRlW%AAf?&FI( zEk{$#{f+6Z>X=*bAN!^?l;*SO&Jm}_zsXSkHIc48E=&#kq*kE+duoOFC-iNuZ)NVT z{}=oHKlFqDNtIRnr~7vjb%k(sJY+5b!AyAV7PoISd>81fnL$m=6H|N*G;&{*2iTj~$T8Y_}PGN+?ItqYt`iBjG^Sv2>F_1%jEGy zE2lz+saZC&2{F}0wf#%7eXhB@TW9g9VoIs#C&rm1Ymtg$%dn1#JB*3XBqpnd_7!k_ z;kxk8YdH>9b_+B0a|5eP)D2B$2967@k#3Tiwt0|Uy8p$t_-o4}LCPO8`14*%e@fB( z8+_m&1D(Hj87ikLNUF&1BoI>QBH6!wn$71D1W495DuKy^(wc>!!k0a;5P?7kVWdm_ zzI!jDoznIC=3S@KZLD4K=iKt{>kD|pCJ%V^37)#i4o{D)_Q$bPAD<7TF7r3D zY=~WEwg9Z!wRmFUQ6cJ?=7QbEuQ*wl$$jzs5A{^8Mk&+wi(RJ8s^PByx$w#BK&sE# zxWwQhIHvw_GIKQ^297$&D_vzT>NvZ6+G0&M{)M|Q-mgK5j{Hz9j+dG0+q54GM&?aN=@wsx+fst~e|5kX7E zNyHm3@w+R>Ju~I!vS@^6Qf?TOtcK4(uHZ4X>Mc57?KXS`GZJpfQ?Wj0qfPrHFWPEG z-;8~FM$AeWzc1&5BrEb5Z0*O9$oz^3Pt-aV?Cw;KY z_%xn2{jwaXpZj|txDU$J92YzfVXD0C%myP_rO1O~Ji2NMh>XCbI&`NNiP42skH+8j z{_U$<(Cyqk`r?wqWP&C7K#_x^tXB$27O4ajh6wViEz`3yAi$iA($Cwz>z3YQxrs5c zHG^eAZ;NV~QDy_b93iQ}Hc&@n1m5}tI+e|r2kCORI+T#jVh6-2nJs9S0~;y)Xx7f) zF%j}q8k&19hOq{8v2W0zK{XMf#@-={IIownCPI|M6Uhyf1Cj)HH#D>eFc9mlsgja5 zo~KzC&P9I>)3MLx5u8hRjnlC>^XuOvCX9r( zb$|7=Uf-$q>{*bjUV1-k7kq>MVh|!G>VOtgs1)xdzCu%XbbM zTIk|Ooa^F8QtIMII)LZFE##P}v=`ZDTkP&@0h6`?Q?SWDIT+7cM~2}ZE zajpD;fT<1DvH*}i`AJ!loC>Ye>1;DfSTYUJ>0vv*;Mf2*5W3^~%nQtBv@aF;!4QTZ zdLYLbBpL#|hysyAeR~qWG?2DKFUfVG5mlxG zp;-G0egkoNOl2HQ=9T&D`?FKZDVRf0i9Ld<9Rw@e7U}2It!=_~4t8Vsi*ue-x4cEV zp`3k?b7m@Lh0?W8NE^Px1y{YI#s$VJR{P!K0V*e*+g2mH9*X`Cl;eZnmB~BuC6sTbEB0qXhfv>$g%r-d_ z-^#zm3PCSDjO;5zm(GM_uSsl_JnoV@kB>hH(5UzpDgS}4s4g|rLMIMQ0L?S;MO3+! zW%g%!c&Xi>QiB#g;&U4+tp91(--?yL2K6n-*#708KrhJWe$T&Ik^lb>>i<*zE+K*+ zvga@PJ2Pets8+|*o{FHIfp#*okZiy&H9=_z2%?H$$L+6N@yQDXl%~lT?^hol?Rc_Z z$PvK@;E{IXDzr#gB_w+Qt}LZmRH_;PpYn(p8=a80pU{gWvkR1Qm&R^&szG0UHIr_0 zArUI2$TJX9+er4GY0Xm+`NSF<%-&~^M3}QI^&PyMkr^l<>N=~FLCv5xErLbl5ID9) zj)KD*r1Y-qY7NvOe~dfj*)+^_%Cn zwROkCx<99nQCVMJj@;CGtnrxFuDA4i2esE6?Kg!-`#}W8u}go?yIx0s5xCN@Oo2g+ zIbrm04vIPEiV*0HG6ap zATjJ!@p&Ro#EXz{zA%W}Ixi_fEgWLozOv#AL>3{IPd{lMVknVj+JbHzIIsK4$ug*; zVN~N;a7L~oleAR#zV<5z7{{dQu7Lqkj{x5M>nGp31&)(87i4u{wCy4GAt}>4b!heb zrXYMz3lhA_$4r(}Z1vCu)#^iRSxHLv-dPj@pLuL z-eq-H9Z)iYrtTr&5%rpLy()XcmCBRc3zN#4=n9*X%3tAex{u-vPrcXpp%z-!&D5Iz z@P|`CzpdTTEkv+xZRghgK6&O=@*$*ba7-ChRRaB@eV&%>j*9thH88xK8RJ$ivcTf` zZ*;3K zj$>nC^SvsJe*^~W1;A65+Q?BV*M$pUBaA`8Y-lGtJUenL>L~q}JMP?F@b}|L4a9FT~^6&(38Y(qU;6tdR!i_x;iW zANM5Y>#1WAHPmDy|D=r2=a_pfNgrl!-{&UB^OrHe_JHQOy$b!%4dmkns`_hSSf_3C9z;`aC$|L8>9C*u~UE~eCUg=b}w2qEt! zU<;!#KF8qW7NMpCa>#c)CF_K?wmOH;IM;fGZ^?dz{Xq*?JYen?3ppz2p6LK=iH?Dg zLVY^<JT5foa4^A1A8FeU%STDKnST$OG%NiZf^A zUe%uH_~{d<+hsZ#^N@WAxGL-H)5Tv)u}ZT>410EPJ(y^pbiB;)F#UMGjOzTN)lbV2 z*31$%+f36>ipev7{F)Mk#UWy+I7sbTN$9_-?&(Wg*X&=F-(0qx$)ptvKC0kJ-Os8} zZuX?o>k3V(O^dAQ_X<6qdT6W38AB;B8l{!=s&ZIu9^B(t@jXT}D$ zN5!P4@dr98QgaVX%jJrU6uep+=#iSFOI`bfKV3|XO_RoGqa8t3G|5N<&TFVOdt;k* zMU&U1>TtHeNN{84cyB?GG_Gn9(^TR%G=8Os3>hvbmxv5N`?P9~-^teTBtAg#4Eoc{ zBxgw<_(`9qj4#GCOGC~&e ztdD~+&=@eezfYwo3ue8M8!%FO^ZmP}6Ijk1o`p)I_GA*K*Le6Fi7sj_o<#d17wM?+ z7RVSDnf_YWYjQSva7CQ&XtGH%Psgkwt+?uJwM91Y6})2*4igt$t+zD@4~FR~&Nr)u zzW{Ga7@S6Lq)YJFd^?8!5-b#q%b=OVDNfP64f&DP6~JiJ%%i6lr}(tMUi@~+F1t3n z{VV0tozy^5IHABT{E=xR(1CdRff*rSj;SRN)BRb93l4f$6dTb|;b@V;%$l?KwkYSM zHJHh^as?TV4{@F_B-DSbm3tinFQ~*-sd1(YxqVak1u9=I`j1$dpOyHFh29)1UM!bj z8%(X(EUWE>f66?XSV|pj^t*IRrm_u2EPJe5gh7N#5uJD{6b@^8uNz+l5sV_GcziCi zvzk<0AX5HUlTshTTWI#W7swQ^bO6x));0gVZwTCLcHYa(gKc?KCqG+~!q*&9yEe*o z3U=Al4k0OolK7DHz*C?tVrQ-QNb(4}td2Iu7!ZU=4IQKksIt*n7QA>q^=V6IPgqvp zNg*n~4Vxs&7a!3NQk$8A_#ljbH7Jh8;g%^jU;*Z!9%`RWGHe>pC5#KV)=Gw+g#`}@ zYjvj!G}7S_Zpxv6Lx)nyKhiCPv-wl?lOsd|ts}$;y|E`sbg<*>NrJZLc{y82_t`fx@Z;AwN7f zilLw3TzTa+%~O3FB#>t$Cyj@XltOF-19!)awP!3tA~s*5THmY4-0L zRIi!|2(fdmE}m#=Y$^kirU5{0x}e}NPO9SFxa{^53pcWOSQ*?m^Wn-vU!+Vi4pW@b zx$oZzm^RvYoHo;apzmxR9jK)^JAOMqxNan#Rrd`AT3~H2$5(SS--_11k>^5TX-VRi zuGt>vfh{`cZsag*&A2ykl(DC6t_U<7g~C`5kzEp zS(}uv_Cw4<%mO=*AD|nAG$mHTkmrHlm9I>gWzzl33LC(7joMbv>f@Jbv_M=z5+q>QR7Zqr(7eGM$=Yhw4q8k4< z!(L;1=g$cLsr_tj^{ES`@Q=@brg5cHg;_r2_e7nUprHb=JpwfZI_sDag0P=tC_c`1 zK@4L~ZwZO@0pfA3;=g}~M)@*+14i)tg4+kMz$oOC?Pk@rksfkxy1K|t{Kryz@?cN| z@&(Z}oN{tG+kp{LbP^rqc4YuNgvPf=qA{pPFN}4-Ps6Wp#zZw_f<1%~QN&dAVrzh1 ztja+;4JUy1>ZA4SY_shu_+q2RW+Hj{!%RJwKjWAdwB=Fb@*VX$BaWtJKLSyQfx;Mt zAb&g8?R>1UD|#-N>7w2db!ubHF)Ic5<^m8FSv>WBPsVI4J-H3rOjJ?n;Q zWT73B8Vx&76=uHjoV(1;TF1MJsvV9jaz1^w9=sr=4MCnB1|>Aqhv0Cwb8Fp~OAD-Y zPN7YwX494XS?(>^k$J@{svrD-?%_T_pWI_T1VUS-gX zlqKdh3RcQH9*{XIQ+nbkMVz}Jh)MJFNfd{ZutjVcVMeMFwC*ZSJC|JavtKAXwde1C z1#K4&X@(wAoR@ugf;CL)FXpjdw2ewK%#sjsPyp!br*z8*90|wRISs6?(21jXx&Mc= zcW~~sUA90c_QbYr+qP{_Y)@?4wr$(C?MWt@aFX2LoW0LE-?#7Hbx+-@x9a@^p6-6u z)4kSeYId)%u~Gti7C+JP9RhB-doy6(r9|VS@g{=@QyfUwfDo`wC?X`5rEbD$@v$SI z6{p;JmmrJy6^ReX`rm@Lph}$4Lr@9FNjPsI*N!6Iya7s7;@Y>XQu=dFQ9H&DxS%)% zZSH0EkcFLbO<~?>jiT9UJsdit??A1lt zoxu*Nl;-Z|3?P+J&4fsqDGMmUN+Nhlg3}f4mHTM|FT`sm-!oR-XB4WgG;3)W>$gf? z+ImK@_jxbYG*1QFjx+@O6gXB0m6zi58#8NA#rVuAvTNuuBA1jbG_D){YDHbg)ZN=I zZJ6t5L#(4_6ly%aFK$KZaI+j{wNv5h&d{wT>6u{6anH4muwyVu@30v@tyrh>N9ZlJ z_u4Mw(mmc{r8FA8v~ZA*%d}Z70@ODmn*h9{6?1;Cj!26=w5WcVsKLmSU~qFZ$4(Cq z4(~RHJSiPgEO$c0>wE&IIL_|TmSMqM5&J2O>jHor;QB3K!2=FE%0?|AhFeBw-0yW* zo^zG?@L+JHuwg9?A%d`sQ@MmPybakl*AOQ@qaI^!Rbx=O?t%uZHltr{@OZ*5ji$0f zHrodCK5Ki5bWS}Xiks;4HBy<-K&(PXGwHp)-{B#fTfC`vGl=o$XMUFj7tQ}7DoO}! z!7)tvkVwu;@tt6aAh!f7T(}vLtGn1K<9FCRICBqC^SW3^aFn7={$yEG+&jh3s03UQ z^!4up6NpNZGqlPrLhI7EC|RRm0%GW-Fo@wjC@y|&4Mi)yWA-w4?O8V-Qcg-osD&Ap z!kobBrX5i<&8j4r>#mSxB!1!y6HsZ?D7wR}4ZtV3w1kke*tv0U;h2u;(;KnRDrC5K znJDI)3ga$5BkgF8%kNKP)hbWqJ&`T&ER7I}X(g14X~}$~=`jf62-N<&!rtH(!&LjT zh@QuB+uj3N`yE{#hkwx}{DJpX5?M0ffMBNp1p9w7x&QBASN`W7$G?Vq@_)}|(4{7& z@|$76=<~|1S{#gJy!~$iZp-I`sKR3xxyqGW8!w$#f_#g^1q#Cd%fN)0mLmVxU7h(% z*5*^T9rLcQ_Y3$Q;sz;-LuZ(%wPvGDts8Wkwh$io$`q(9py!I^lBsSfrZvaMr+G%sY4r>lsg~r#m2Oy zJo3SvOlfnPS$u|&BqM6wQe;svf9&(&ndK0z zDtW?OOY=FQKqTR_n=Iza>G?>UjRxXH^vfsDY$6GlS(&UAQ4RQhfg>XJtJtr2=i6@lNqC~CX*en_QC6}GQkpCAp{+Wq1GujP=0OAP* z=08fQ1)ZE+Z2rsPO3l*F8n8>kgR7Y_{m zFb~=w9mp4i70j8?crd>adU(y6TeZIY*4M^l74Af-farGK6 z_oA|sW@GBEN$l!&j8VC%wb@*%I%3JmJ$UsLnA)b&6pr1ygj9~}?Nx0#X-kINVW?sb0J@(EbU*BrkxqG;*UuQyIwpf{_@i_)}GdTHp z?Hx!yQRtCJgR@V1^!&u}7}J9D(n22ETHK*7+hz8=xFvjYPjzS>uz$;C;$b8jIX89% zdYBRQ%dmnRY{Em#C5lRj?ucCpEVw$7iKZ~W5WSO@=yeFPkd1}_`TG2n6D3l;*wSn zvk$JhI|}-~OAw2x?oT86vcELOCx&8Fj93Zq78JQmtz@~SN-Ju<@F`&skI*IR> z%?NDbmu(z71EDXpQ9^bg!ctZ`Uxjq@D^$8bGn|#E3%XnbkCcEUQwJVc1w)KS=)nuq z9wjj238NCEKq4wGB7YN@LLTCU%5RU+MX0`LiRu9FVb-Yv$&sdd^pfo~^0yqP|F z3uW6HxlPR#$%z$g5n{HFJNI4iD6~aI0V`J$s#OC>K4AarwP$GgqG?IyhWt%;zkt+K zXxM9=U}YaQk3IX+lED;fDY&YgAoquGmXmHWyE`>2$K1NoSHx0N@+Zn63vW639X8%* zdWun^W4!`v>ZN8?A*Q%tI<*@(!%W@Py7iiAGM6dd^q)SMZu@rsTi3P$bq#S!Th<@& z9R33iiT^z?R5CTRR`zfL?8f=WYsd%C)EodbH9?l8sskwYU{KWe0!Er+hb&}RM4~C) z^5yI$(leM?U)3+f4hP_G3Zq(!BN&IKeWrP1$KRj5y&&p>;b4$88tS5wVS`nXO_5QN ztzZ+ml_a}I<7$>SVMqLZX)zjP%ZDu2eunKOxbb8hW%f*Vv%#AzkqZm&jsXp7Ey8!m z(UTB~Q_%ts^PURX*ZyLdE9jMtJka|l)qJQi6fL^O80bP_3$pJ>TZ5TGCsb^z-*ha1 z^x31-bE5Sc!4ffz*LxT3CZZ^9_KWP9n5%$-=9Y{u2UHgM>QySw0;Bs?+N~4q7-q^ zld=L%PZ@AKk^lP>{Kr(|57aSrB>AVWN3gQ49g-m66k()Shn0%7Dh2ARk0)&fqv2Ud zz*#MaUIiAP{B6$@Oh;iOZ)>0N-EYB=@uOw|fIfR$Hc)9HG`-!acP7j0CxCo%NbU!& zhb3V+D**fko^v1|X^M*q!d1cbjq8Fdhmj-}clLG@_SW$@OYkxbCeyI{(*5z=d8_pp z^Jiz#xa+WA=cx|Y1s)~q=R`Wdih~E>X78%Qm%diCeg)0hB&IB7!}Rx>N{RS6V$!p6oU6u8ZnZo%30cTsFl43wS|7?{>y7K zY4t3;9B1t(j_P6ba06}y$G2H+yS<3;Lpb5W7-3}a>$E!iqC&$0fd8|epI%Qh^u!SF z5r$N&YXspvKW)gCY!^mEt4U!Ayv=7)Y`A8Pj%JzgZ0bM=}hy$w|Qq zSxWsN_8)U$r50qXXT(F6iiS%;2`2NBhY=#bxYyW`j3gFwV3T4UQeByy`?wku0%chv z0!TfqoYB5H4P7*ygtgx5$B)fQ6vm4YPygVuV!N49wg$pPIoE?ms4z@{6qL+t!_Pyz z@hid*HK`8{4Kvq6{s5@aa>gjQ&c9uuBe`ffk(je5tU=+{5-zxlprJ{4B%s6#A!w55 zyQJI%$-#9t*@3ba%7N9F_x^9>{TVAxIunOq0HUrIKuM?m_mL-TXJc>ZXz65UE9?kR zk~mr#{-cIOt8F_0cBOyXG>+S*6bH8e0hbB(+^zdb1*26cXi5ZxR}Qx<|pbW#4k5Dc9ey_x%59fiB9j`X4*4*Ki{w5 zzliT+pY^AOw8C~pFLKRTV6Y>Mrs>RFq{Y1z`FC@e@9~t7xCqjrv#P*893=4Qtk{d< z?ZmI_u-@R6xahFn@R>P#6QJ@hF;dIwE;{HAibErjUv*r?Qihp2F+(pov{IowsQ&0^ z+tSKG-chxhAuR1Zn9-hzI$poSVN~^0aC>Iqr?YxGmwdFi^aBCMlFVV(- zvc9vnQt3yVysz3sX4g&;?nYjpNch#R>RRPl&2#1D+RgR~dOER{koMGRZ;}VSjo$IX zOUrA`k=tZldJOft^B$DHI9+n%y;&{qo^yGtgx-q9LR-PKDEk#Ek@Y9D#cT5mf3biz z+H{F3vizjDB!xuF6{9Te5^1sqikhnX(9^Ap=#te(0kHAGN|(i0Tv5n2?1DnvgsbFd zMnDs)34(;8nvC{jfz5>odiJSfL79_`l@*HB=8C|X`2gZ%!8Lo}MExH9kzmSrnydCs zS6Y*4=Z~!|WMQSrA!&Eb{uVhHEIu{|kX(u{$=rv$iw(E|mIulj(4JyUWG4)E2eLS; z3ao^61_u}+vN(N$VD0GFsK~4|85ls9ZI_z7#KtYMH2chOF%OMX2%DEy>@tfRkQKBXJK^&2Y*g2Xd!KLaw2>=De0z)!s%-|>}0D5;>qF;yq9OFyDGH%`r0 zeAc>(1NXZ4+-2xm*hk?R#u^Q#tldrnEzbh8xr3nwg>kd#0OQNf($6`qq$5o6_ea?>xy~lQ10{r8T zgdb)~R6W{5KE(COlafDseEY_*+oI`T0DC(++d{7tM^YL4T<9MKgqm}SeG$y#N%=!D zk6s>8$~i^0SIcxq)Hwp|o|}6HJ$fS#n^>akUiN-VWalzs5v=y1O<-~a4NBa#q^hJW z!P3ot!^5hU%M*|qN~Idl(v zqB{1X9Dkyty7RbJa;m!_Z$bX_SB2dP9VsZQ*XRDmhbGcPoaBo$YJgDNG(gVU@Cq-_ zq?L*)Cq7I&eo!)SP-84!e`t0(GR@@*R|(cWqWq2O1GhmQx}?46pmJ@yS6qpzT!9{S z7xEb)A9Mudi>q-0uTRVu8N@W0-^b4JrO-G!P)JxX!aiAX*nQ=oOY@K#?0(9?Ua;hl zrBc+#2pX!%yMB4^^57rx@Bh-8s5QnRa0kGx#s3VqR4g3r-2NEj{nJ6*Ctg~9Kmj3m zHfdo(SP)?tBH;`ivYzom3^JUtgQz3V&{C<+U%HOfM$tE=hK0`gXDriVK1UU90WZ~Cdlh%XCqWVhx7K$ezk#j@!Ky= z$>r^qWjn2$xL*<~fi*W!FCCXIQ9FKuA@;zVPE|dIuDnl*8^595yj%$`nLiK8ZFV6B zTp*8yy3Kht#C9FIkiCjIiet8?2=LOeCZwvh-q(;c@j*022HavCG} zFWPeL*oRW7a}iKDQMw3_kxB$7SXFY)g)kO(yTlXk*sE9v_c7GG7XW%Oube zh)sz|7d*D5sdnRsSmCN0K?B1-`_vR;gwUfVRP4{d%chy|A5EVxx#2B7&tpJ=FLt@C+mg<8` zxkeo14ZbPxl;ET6JykkOwa(LiTg!7P(vG7`^gXW-4~Gl5D9gd)39vf9_6UB5+>$+Z;_Bw^0N9_ zg`~z>1?b_Q7!ij*h$c+VvJD+IqwdXn?D6$X4lQ&M$frYjyI_1F&at4Yl zg8rm3STHc>%$;L@`4`te2sCn;YCw&_127y2{sSztHgt0O?*bF8G^_ky)2)z_=zib; z=mNipBHpyy1F)lkF-m24Qx5md600@2HB&b1P<|NtKKC2=n^;Hh%)AvfvniRK)}NzK zJKyPFJ`OM0zu3*e%?%xXvC?omk@SP(`E@%rN+#^2Ph|;@fu;Bq)X%*{+&?E-g!F!A zO)ct%IRLAtT539VP`&y)oidc%g<`CCz{1GO=Osu!BMk{@!RPz@)YBDkveqN?rj;|f=A%GCd=_6k$HvgQXo^$e^K0hp;rAxm5r}fD$Wn| zzg6i^r@JuiYsgnXRni7jrT<{?XyjsPZ35VHLoaD=3)n1d^8d2n`JZk#?e=v;i%Pyb zdRL3~RYWZkQXnIvrF&h_GuQT4moYABGdI~Ib;$w??;D8c!YK0+X=NJ1JEqeQpVO@L zm-o|C`Y+gL9`^RDqNqWB8+Czh`X z{kUWG2bwitgLl2R(*}`B6`4xo){zHSoPINS!lvAqiY|rp$!p{MUxRm!2h(`e-z0|) zd25R6Va!S22$Vxk-$h~v1GD0U%bD^~V+RfC4&&!6pIxhvXvIblc*~J}kA=wq-ntq4jWzK}hm-k-UduZ^JL%u;|0j4JqY}<|kU`izxIKw3wktd`| zw@eeioMBQZ*;co~8rdV$A@6vgnRQnkw=zJL9df1Gf8rX5oFuQn*&+!LtO83fSv!S{ zWh1q>#bARDPFYdx>1kk>f$1y0`Ulf1H&y(q)hLqGZUzpw?Kj(g`IoU_Z9ryH0-%&Y z07}V!n4AAkeEk=5l;v;!-qA|qQXql|KG{Q2m`}9Vn}QMrYmhrA@DX?<6m6h9u13h( zqd9ZThj;3pNGQL*@Jm&lW3GmAgjT38|LiW;)6>Jx1*$Tb5rr7Rm1!F@Sm;j*v<&&( zu|TzDFqSgG8nTt*ONIGbAvM{3)<8EMU*@%hS@jCHzZ|6Kkj>__pALjyBsheenc$}WRx2ZsptpfFlRC4Kx*JV6@+ndM0!(BF9_LQ#Vpw5WE z`*;sTR>N;e%tcvIJ4eZySsDxgZKWaxAz@tkEe^{_0|$Sgpu}83kTY9J8Z9!gOk}P9kuJy zs2y<>#}@j+3G?1)c9LSK-cOsUCr&X*5oxO-YBO6S>hNn%lre%d)3p@F3@wV(@xhgj zNB*;YiN+CEr^1wcD(S;)ZF%f+Rk>E>dcrBj%0*F7PL@r3&Nq+9it|e(lvQ?~_YAu< z)a`f%E<5hZb=F;`uBt=rlV^4yYVhO|lA?rKOXd~|!i++Jfq0L> z1(@$Pnr;&p4dpO(EhQO|6~Fs+i@(xPYfDf46A&Ge3_b26kb@#kILOjanFZfh#ev!~BG}Lnn@%hvm{S^UJ zc=e=i{wf9r(db>{dK!9*tnworz{spnqmSbP1Lx{E0YQzmtV}2xb)-d4$~nZ73bKct zd8+0(qh>dqoV&k%Xc4K%S`eiVX|nID+3Z%4R9qPI=997gHeH-U%18@|sr6_{bRS3{ z-MTs{kYu6|DVXmxW@1C}h7(uOmq}*Fltu#2P_--p&u$c z3z_eAqXasX!K2;GgH%Umhnu1NN`O`j)aOnB%(bDIKOKh85(^oB8m_ca%Y?8`-_@&X^AHi9r-4$9%9eFn+5!4y=c_UYF@4{0xpODp*KkvY8PDm zq!~Fb=}#0nC)pdDl!mX@w@YY6DzE6yJa7-JRJ&s+}_++-wt)NfPkgk zk7b55yTpC=@5QebuhX6R?vV=9fkbi$UxDKXo~3alqdy}syzVf++LSP9$KCV4KgBjl zzDpqd0{!Yh>quJ&-x{uCqACRK1_Da?dM!*Z7GER^vC4P{S|J0X3T}C~X5ccEzv8Y- zEgQiP_Djp;_Iuo|2Va(*j_6nFB*-hngCD=~-nTk(h(AEMBwg%U_TVZX{L=84QZ|%| z_rY`azZi#!@8dawMld{*D&f=_zLQ`&Dg^#=et@Ttjt8PBHb2{++%J|0If_R=+omZp zhC5es{_-wFuC}TfQSx1EwBm1)=_5^ z?z(zZv3MxYBs&4i*0E|Q0Jn%s^o3ThA+`*&&;%6!kO{^sBGoJ)iDJgH5aBWn7Mifk z+1@%`tUc(5lrY&>t0zQVQeISr+~0qB-TxU9*Jp%vbO5ePd%$)1ABYG4Q&0a1$NpAL zqm^`}u>n2#)gf!$)#v!M4f*Ekym}54Z)H%_AfYp1T7N#d1Vda+^T{99`JWR#Di-;% zK4-C1-Hq6ZSjBDdPgXOW02cB4`{|qf7rQz{qQ1f}vBEt4i(h7iRBn0tzWK2V+2~_m zeT7V(uBOZP%=(IA*i#tonX3Pg^iJRfrJllNsZXYB**qIMT*1AFx$i>WT+cD9DPeJ# z#L9%&twRoC%6!YlR<0UY$h1qmWMdoEKwi!(XL9nAneFtV86lFPfzsSv?Mouv=C03i zGRu+NPUv!rmN?h3evvA_dc{WG|8@mZ>sDb*tZR!&WZQhe_<2djBkQ!OPQI}_*T(rH zW;NpG3v*C#y$BR^9o{~e9+K;IeNRE^of7?X#9Ytk0u**4h{-{KJ{RT;hK1=nCd(Zkt|d-gC_&YX;l}6 zZj(HeUlxm2KXed1AKbHWWYKO>F+4v=r1h_`DaC3@78?M|u>i3A{{)+u{~iX)y7I_? zFj!2vZlI|y*1FMFX~I7nItzpf62X2mz!EA-INMYhVQSkZZR{-IAO73}>5=#c1*NO8 zQ^f+?IB}*O;7i?Zel6qs{_%m_M_k2K=dkD>tc{j}d*rY=fD7SPZ?vBi{02Mha$IQ< zNT_f3g8^luKgWc^Et#JEaKC1WxBgPmEFb$JxRtnx>5WD+>``@W?gHGi58eprU?R5Y zF?iI?`1nc^_b#=T^7GlFL)Vz%eC?_D8nojoJnpRW*R}sMK^ysRAbCftXyyn@PT%A& zx8}r{VwlZL{U&AEZm;JzOIO3U2ft3hm$~Wr9*+%+fccvg$lq;PZ$we73T~jRLhk9^ zVxU`_ycdXLmmDU>cbI78)Qk1At_W6q))mLcW@WGQ^V`yb4-cSgn0V5d9+sxhr*g?Q z%2@}k8EA@w+_Yei74vqTjGJhMEc4F`Or5bmebQm64+9}z;_%{9r;SzA-@SHrdcMXq zz@#(bc?KTWlMI5P^1%o@(GFdn8HAa7F0xIL!<&T&UE*AE5E5ru=J@#(6F{V{7$r0@ z$X8~f#=L{X>!6s~|Jm zMcPZJ@XQlw`}tpVDoUvSVq}0Ay95ki1pdG9o3*uwshJ^w%&cJNzh1 z@Um3_o~mjHA74{wX+SX!gtAyHDf8D(h>#Yg`-(|PnurO8$?JUz~oG97zZRVkqeL z%0sl_M`ZeZCzIsf>j#rIP`O0xK{iLB_7H9_cbMYWVG5*C2Es!%K^UoCNF#~}x9ve3 zyS{{m0h0wm_c}Yq7?l<)IhBMkMkS%&8? zukQ`lKfakJvK(@D7NmnsGd}YvKWPZaw>ei94f*{DdkQvqdM*|RC5_sU6H*n z>8V|o{aJI>A-2u{H#@hD9euAFf>>&++0kgpja_nrwCl~}R_0SmSz?Au(PPWH>?%5_ zvwjP*jakwl>Tj7dJzJ0ikQ_G} z>-I3g=77#3SQ(FD)`*uPmny%U^-FRcW~;0}V6E%_%o}^e1R0fT#Z!BL$T8He2}AOz z!GcIRS;p;TymwA}d6`m`~X`8-v*&rItr(@3+q$kV-1q~QrQ z>1BlBrtPz2B1zh*{G^YcTD0L(T40CO^<%M{+aw-ca)i{I z@{mZ+Jnj4v4HMr$c7&>diEl`psm54z#LHcONS&!?gq^4-IX|DKfT$2!cZBb&$r6Kb z{e$lEcWZ61T;F7++cdZk=g;DNrAH>U*|H65dVwC>4B5%#PyQo}nPx7V)|0heb}YW6 zBWCuMZ$Di|=key3!Yt^1I#;+fEUgr|O@w+57ouHdP!gB2vIImK=*)LXmdxN8A8u=b z*O#<=yyu^KiTgtK-?85!C%B5clUuyK%8mY(BY(3FQUOwasD+vLjW2s%m9-=4)*mp{ z+RfW013v>QdQh%=7|vz9A-)2?A*&|lQws4j6tQF%?FWu7z>ODqJ`45zFcBBQzsv5D0rC&X6b=Yz_v7I#N{|NQqDvCW|JG7_(eS;Yh zohus4s8@uPdr6XJMI6QkWzpoqjX(~ecR56D&LsfC*k=d!JpLe$;U1N5EQ2t8G|xDb zDARO?g|8h_(H^BZVHD}glxM2(RBiYBFD-&Um)>l$7i4@3;BzlGf=h<7Kz39_f36OcSlxUPxyEha~X|Koh&&=DCH zhvAhr%D&6aY{SpDy92ZbEvIDA?++6C6$ep*B?#$zqMvH{SI9M5w<#zSZlPOS27JeD zbK!7_{KJ?u90ppM9#9)!DjwkFm`ZYIGy`I)q}gVpgs&ikqdHzq*b*MNq%OdixD>-K zo6EH0JSh4qT+FVsWhUQ*gsXaX=nED*=kj+>tXW9oc99S%KJ{)bZ@bMb6SvA(<8wPa zaBhR?b&fghWeC=hk%xZ^6b9Man6miNrd+i9VgYsd&Oqh+ zm(JlI-cJpAg02DJ$maeJox{JFK>qFYl9hFx78DS8(SiN_2#N!C!J3m}rL^?VopHDy z!yg5?uFB+rYDltK&bLUuM*;M1d(!w9(%glG0IuwD8+(2daG^2YwJlrcY1Ve<%dfXh z`7f956@r7raF#Tc8uJLFhbZ5uF0c|T$}B20RBwX_+YLEWddCrJm!B|`Xx;iS?{Fvg zJNp%5BY6wWl}+*wAK|=q5mLPI!BBUbctV21q3>dpLIAws-J)-@$C1{0ehNW zzCOvi-S9*-V>%MqW73}pxQpjh78Cc z3ZGXj#EznWLoZEa$I48q?S7s+9ql>h%85V|?y!Qx9fSu>K4Y#hncfXLmKn@EOVc=I zdCc%f^mI9xtl5NnHB(_h6LGi9_4=?7JAU~FDSO%Be|B#p{ivCf?Jm7y8ZXEe+1WN) z$8VGSGEN>xCMIRZ>Y*gj z)C4)&sjl{DD6Wth6I}J^d`b+eEe2TgwOxS(LDM=eI-Zs-!#vDK?2-GRHse%5ZryT> zB;V0QaEsE2Rv|rzM%0v8;+*yXTrhP6fN{uvlD$B$Yq#M>bPDrbfqE$Qkq@Mt4W9@R zeSnNJmqF;qZH4DjkQ2&;oGB9%l3oB6@d>MN5{)5?`WGlE1Uue=dg4nnFHix#{3Z#7 zXhy@6gHSW}54&jEqai1{22?WtFGO zpz6CpXtyY)R-S1U+-o)2Syla)`;wD$((5*4%mOm>wn}cXoS$p3gOd39MaeGEw@a+P zwFj6jtn}_JsB&9;yB0*38vsyRWh~#)Li!ZcB6wO@lj0k|cC%1@Xo=y2gJOX*q7ZZy(vc&Kl=c)J zPcsgLQ?oXe@C7atkP1Le|RXoAMuF`Nuxrbi0Io(W?rvOnoh&sN2i?<@e3I zB81KV6HnF?MhTWuOO`t zZUg?X-MWyk-si){*yp3-Ri@qfCM@KbbSBr0`Y%Ip#ND1 z_75psi-?j?kYjSBk>ZkGUVP*#5fvB;Say9_;b)4ovOSCzx2>_#ND?q+ zI!8(1cQT8SO$P`!)2&2@T*3AIleA0D5LL4?z4Zfb9p-k`m56-W**PvNjS%+Hxm2$1 zEIso$Xje%F=NgO@_hWVTpvDn)8N|MIF80-SW6=9C3J=sj$<$%3IY61VggfEeyg7HfJ}WbeN*82*GS4-xA!YZJ2Q`B zbu5im@tX9&GOn?3)jF)YQvN4&?ZwgDBHBQ+&1_vY!^Go4y}#kvk7-yN(L!s7SvQI; zo%a!s>j;W~^~IzUU?tH_H|Kg2P@`Wtc+~5o&|xPk{?j5SER`oX_Jd_QS}9OEjxjN{NJs#P z_U?*zbykZ-3F}M2T|p=qySvHgK)J~y&OAWj6N~eSNu($aq}bE)IN=%_`hu{Rr=GRT z84?T`lIY(=e*TMmG&XNL_7jjf0)VUM?|r?0n>qhf3d>kJIscRGsIsYq3=jz;17jx~ zqd}tAA_@v2Y1C4n-v)@xqgD(%RHIDND(-ncfPZGcSSOJX zS>h=&FX?QZ<>buE5hX zMK_c-9jEfjzow|qeN#Qgt%lA?u0+epG0jfF9B$I|zg`lIn;!+jj0WAn#NqYjBsvrd3Nli@M)&xy=p@nPSVxgAXZ3Rc=IYh9qx8y zhM;7nquJY03P$G0zasQK~%z}T)jjvwZESi@cD>&gzj3XS6vt3y)$cZK)S{3+rs?9$MQw}pxGh* zwC$%4k%vu%Yd4O`3fIHNp|2;W_NAPqqOE#4?_us}C64D~#8SO^_Y^iUJc`PR-+ zi85S_?Od)%#aD01w+Zb+d`UjjZ0`*U(lnBqZJyw{L41B8`c*#99D6v2=n^-=h4fa) z?vrw;_ogeIeh9iKwx&ClK4m*rY;k*(vL6-8v8qg>(~I{oKRMjU?GxAp-UcFQbx!&7 z&d=!vT+JY+pBC*9JVVj^hwI%KK=t-u*%AF`EwZ7_AqKd^dPGK5?jh3T4{bUvJ|FHz zTc@berf*bx!Z7@S2Li+9T<1q5+cW1u58tQGhC!jG;#~=hQb@=oSi+SpYE0k`SWF)Y zBMD*EO=ed~#O#xSXAmmk)ENR)iv0^w9nN$A&RH;eD21p2Bvau3uWN|;9~qUbaw!LB zk$#jU*=nkl`vnkapf;l$ir#3^tPzDvDjGwHeaf~Pcbar+KMA>0e5P51XFPx512`wT zg4hHjG_1F0JN4XWPfq3b^812lhgU!0hcJ?#qtslPWw6<-}Rqkv06V{t;l<1qZWxeQUZJUOrW_K81RHn7K z<2HR8*xqNAmf#rOTcLB4ZIAtW_T~bM6V)u_Q9E#eO=a z&d2t=<_383>A`KkYucxfQpe6PxQ(*f{uD0GOL-GHM1Sl%iCYQ1)_Xi)rCT>0&mgOn z(WqhCWY9-umuZ}^{w}Pk&93tghKc#tTcE+I^9fjD)kZ@netXI-sa~USFQN#8t19f+8Ik;8g_e5}9KWU$GREFqP2M7DG-vRdelU+0q&V)j?sN1$!WL)~NmZ z0CKFHgYP2;X#-rj0dNc z7{k}5E(V$$m?*;p4qF$>lvoU=Be{#!4@VJdj_u!?+QC^;L_&woQ@eEq_j`uR15TjU4zl@UfMqaat__q04km{lq= zM$&nP=t{%^v7o$TZj1>ZkV}FO(=UY>Mmpygq8N^>ftm@-I)gevEz-Y>R=hvZL-=us z7;Bv4ehiRtW4r*dhCGepEGu-1JRalW-;48|oOjBtIZOmKwfkr8d&9u6j5=Vujfox1 zB_e2%eE#L>{RfAQK)^)O0utbl8NuJzX8qgSWj2*^@kD|e<$f(eo+zt)ZfGKbCBEP}5hdh`rnJ`Qw;|Z6b zb^%^3xaX1Tw`KGLtzAFoXTFi!x2+!LFMYT(Bf}LL)o}}+Z49ObS>K)qLLN&zBR>65 zC|iq6dMB%=_c($TDZ79LEAOa3ge;abiZv|Mkt6~4K0+XG7*!BD>0J2bff9;x{Q|3T zsDB$PB*|BtMW$qzaI*lFiZ|X8uok=VfR=guI7QPCBgRF>}Wp5@3?u`W93F%(D^H!^F#%BuDV0S$l{|_v0Jgyyk|B~Ce32!GIQPRL!BR~ zmecqNbc!Wy(U&{hxM^cltDuFW>Z72UD0&T!;F<${N5so;op_3+WX5B^55ZTKPq-0> zbJ+C7@HDrX;VEN~OcUjNq?gw7-w6tjX$iBk&{uj08w1>`?t}j;AjbWRs-0` z{|Li>hTlJpk4m7nO*(x>d%mF7=bfW?AHdj7B9xGCS9dnzUD(|T zbBbfLoIZm*E8_f|qLa*+gZ5tYXs4g;eoE(VoYnt*PwyA`JUpc8ZAKK_+OH{rDsST+%_FUY`)J1L_ZTlczB4SM{y9hSd+~@ zHJ^XaP$d<15tYA;Q#+o#2w5a&6vSM#@(#A-C|^esR=Ry6B1J{cFn!7b`o$w_M0Y zN4L_YZ=D5IzZY{m@+o)g5yr3 z$`iu0cg;3aG zD!-eQQ_C-Wpj_D|0ER*Jx&FMuyLi>gY4fg9e1UG3O-9&RBVH`IoCF@ZCz`LX_G-kr z#L+@}1-nTNn07?XJ0hOl{>G1duhoEj}0OHC;P`P>{$xmbz0G-_xIsMlQ zc*7e5)Tt%4rt;x}2^gngwd<^_+MsrDV4Z_p#ju9PHY? zZ@=fpgnJlK0MFu4B5ABEOC##^k_xpE{ee<|2PvWF+z0XsANc18!XUn`i1&ivkOA=M zl8dAO-d@^Q*3BV?TTUfQqog)m<*X=nz;ey+=HKy=y>u~8&+DK;dza#Gt&xa?uk6zU zDq(9adgVX=GBf)!$7K?>J5O`G939qD8qd@$e%#JRKlF(QHnmc4a%wzcT;^gHEesboN~f@wMF0Z%T^o&aXmSREwQTLkGfp(hbYso+dEJmNfEG4P) z{GlKLg%ZV^=dxyG*ajlDY`$sWgww3%QHEE}O~m&?%wVBdx%iOlzUoLV6O5o zwQTWtrINWO#g)UAVt~sj4@yX+VIJ~AngBiu0zL@w!2Yg+Qv}sT8D@l*%vJowr$%T+qP}n>e#kz+v?cq*tVT?oIdkC?_PVa zwQ7HRpZcoiQ#Jq2S@*b~F|Ki;30C|M-N=A0&NHL=0Uti&p}P&S@DBRJz(l6Qc>Z0D z3tq+!3J2U4eO!9h1Z|8A1-_LJ(5>V>Jd-G z>~EE>bRM>I&%B{J^gkDB@wcF2Gx@{SuoJ7fRywY@(z0R(B-*s-%Eb+*_0?g8@e)*- z?;DuG8XwwDFsMuR2R>v%_B71*^BfAV4=!{rpBYpOaQOa$nNTlhi^y0AXY+TE0N?L2bj=t_24 z!YG*di>W8%BN@p1fM&e}4|$XB%<=>XdYPTV9VQGw{>DT{yq=w~q-Ks#%zh;^ghbbL=}zHBkCNOMk^T)y zB#1mB@wQ@=wQPZe`q{&#WCuWMNu5Yfy#;p<%Q-`P8!dDHrSe||&w zTPCAm_T|vyyQ8#6cYyK@ba&EYwx;T7wl( zfL&+%ayKd6MXvSCwggpUbk;sL!pt*x{Ps0a-_(&^ZP+w&E7?bPZW4(CBikUzLQc1s zOIiAHwq|+;o|;6bt!kv6X2W0ZA)h=EEnA=&AX6!u^O!2&(%VR)%F{}-GH~De$W~(; zmi?6?)$i0wJEI0*TUKr&W3I-VR+!kfwF@zh$EVl5Q#X5#-v5v+(DBxb&IuZ}==^pD z!S&!IzN>Y7EH2uor~}iu_y&R>9BB52bJYk z00`vOt*dDIUe+3dc!|nY2Bvsp*%9(k#^f~yaH)03z=I_BuDRNS+VRdew+DQwPTe6kgf6j_w76v6Z?f+4dHt1 zsvC}rn@Z`@wAWg8q77@=5UD5=Pr7djT5@^1A|SkFzcGP-3$v}gSD=qSUGZu{I?XuG z&on_QB!jj)!uNIT>%xDoD)B)_x22%`M*6XN_(2<-t2%l7gkckBnlflmqb$huPoH03rM}*WlI(7=GFzj^dBX)Jr7&9#VPbHF=hh8BopgG{?8xQ?C zk|jxce!w+S;5Gy&qo8HTKvLQ8&LWSL$0N7`g$$r`1VG3R1*ewhBk)@^_h*XX$tqG6 zM`RM=9XTidWXDFwXUW9OD+0}1P|NL)-j#pE-J7qW59XIRFwn;D-m8Ufz z%VtCVI&)aVvez5qe*WU_seJDk;urYU)XqQH$3WM92X2RZv)`k(NxBN!b|G6YV5z#Q zVRnyM7=gV|LT5RYkSX$wDHK7&rJw@WtQ@I7Ov@SFm}?TL^$@#hHBQ@y80*hJN!I?l zhR&R{rc$7RfFiK~R!IM{ng8#uAz^?x{HDQ@FgfzJo(zKIXved>cZB28%l9E^rOoS$X8H3sYOhlPBD|u`ZBl6~1 z8*~Rj1@#s#+u7XBt*L9RdB?n$fyMcT_c{B|$6t|Qe0Tdn2;Vg5vC%e*g?6u~ecCnq zxnDlz&~iA+_jTLJ1O~NLH$&YY2E0+b)kX2@ULC^0wnqn_A8xIMl-v4DNCH;JQB?;DbHi-&1(J@qy*3APpg*mF@fT1473r@f8w= z(+LiEI7)W~!BDynSg2F?iO}dg(uWBYZ_5KmRYV+S<7V#Poj+c>3G{cLKdIN(W|Z$l zL*Lp7@{B_CmF`S=3U+Czdn4-_w(FXv*fG!9KVMPCE1J8{)2U)0ax@&D!w5g%FO0{!h;2*{f(#;sj($ zT4ktdO}ZoWx(URQ$amC9B;<7d7Lb4_>T(9%H76!G(zX00 zJnte~Q=AGo?2lD&T$LH{O;{Vz;+?V`t<@G*x)p`8Vq8`kRI#5eJ{nC$*_UeMR_-`& z`49{kLY`M>g0HZ=T(tH1jl2QW&J7rBN>64R^)3?#p8ie{p37W4I6v;mcu(m=xoTF> zbSpM;m=2i4fA(>j##Sh3a;n0!%IQj>QHzj-@@7YKs#^YvH+(*Itc)cQvmwlLpDb%p z&P)q@%+cf7$!hLO%n+$|)?XZJ=)D(7;r8@FhM-;I$FkRzv?j#BLIY_dCGCC06`6`_@0DCV|5!snBP&- zn}ar2f7>}*kGHeH=pRKzTl$ku!v})Dw{8~#TQ7vbYBib;+P8Rb^d%xxJ&69-t8yA^ zD(3vH@`ude%w2IPZ@bbU!!0TU4;|u!{dbh)W2nZPMh{I)5F}OWvbnFhhp4T2l`pO zP~;W{awJYZvYH@^?#wrOVs5A>3C62`D?-yYa2?vo#e9%hNUlHR6LmTO9OHlm-ocbxz}&-+KxU~-cRSUdEU{H*Xd148pN75Kx$LSD#azW*>>?YEY_1*NQv?)Gq0worsmzH(k(?G{c!`v> zow|;_AWs_A8yj1CrH8T|8L!Z@cxf<8Ns}4B?Z%uilDaf1b}G~0tet|TSfAmC^riPy z6ZMJKI71%pIPlsQp59-aP&BmWPmN+Qx!{U2o!8!NtI{n5XV~yh>N@&zpAC66nBJuAPVI9>ibFH< z%7L<>(fpUtk%jn}LW3`0*K^vWcY<0_Lub{u^o~rNT_7ZtY$tloQii%wp zNOcE0mu7?_${XA&UmL^L6+pvfX3>sz`HZo1orY3zeM!@9pN57?2V$u-YC&YaR29U% zxk4kP&)X%Qi&gGxf0Pc$xI0-Wc8byk`Iby#W|`RLM}JF0mr3ctoWK(x5~2-8$N{Qk zB+&IBYXQd?o6E2`%#G+ZClsJlVXvGME^0cH#RF}I3dbv8Qi&<@Qn@}YF|W~qF{F{^ zaB7cl2EhpU^QM#G>jlxCS7g83Ik1GC?jP5(j9R6mm(T2P+b&Y8oOMFIDpN!aE}dm9 zTyvm+@Bb&ftT^|P#f?BMA#q7*O~?G3+rCnSZK#U$GtZMp+8lP()_Emd{e%EI^+6?l zpQ~O#rGFW<|71hdavf!#52wr9IvtT{NkV$m50ZYT`Zl?IyHU($S~FCXdQ<2raB$rz z;o8m|(DU8r;z-%HEQ7I1(N)=dvvmpB*r^)|jGYGMb5Ws*)aK1N*lNv%OT z=RYhlm^!=SJ-Z^^=K{4yYr=E-Ypy13*4bKpAsYqB`z-IxBW?ZUY<3Nhpmy~*BC1Kt z2WpCI9zAiFp-IabTng2Encg>#H^n8&%RAV;y^P|E8$~`V7lmYGq-cBd!L1mOZ~H5kyX%I21O1@mfUqw~ z?+6Hd6LZ=nCq6fmlphPYQcOq{fm&|@t}93`FT``c)vAPC+V$dF_~Tt$AeS(s{v}&#&WE6$P4or8&VqOyBD* z{A3G6%6r$Y@EpJJMz6a6hs#~G5*CLLDqhOA9bq)neK10Ks2g4K+AvYdJ*I@>i{?G0 z5^8WNPk8cSVQ2n!DJjMhJ%)YJADqLL7|fJW(X_V3(6oPBq4=7rdshNl+6%z*ucXue zuC@Kgg#8Z)E4m*ZmO+!~aTPF80>$3S5>#8DvbG7JD_=veg@}icU+RY6hega)u=FI>BO^ zEvFP##y|&V!f?8hqZFf?uZ0sBHW~m4w*nNaO42vuEYW;A1tnC&*9wYAn5BMujIs6T zy$i8IHc(tlC@w|M2c>smKi12i|INAl)-qs80)X6^0%E(l{?~r~A3yr9*n+=Zm<$0h z!#~zX(f~hS)UWGims5@u=x_!Ff%smR@_iK0gh(D}T0&Z#bl4{?h%y!vd}#hYk)nuN zpPJ1M!-9xHN5jnwfcX1Fjsgs=>@2h)y0@Xm(7Oy1TXPX6kA#;uNIduJeuUEN17mlahY5d=Or~VFj3nN`y!YW6OlN z`hC`5*QvP1!z?z|4(_&IiGqy}u;T7*C~9R?uJG2|{#~Fc zijuhRqB@cu2~t~eD%2M3h_=F1V1&FyT{^@ZLoEDmmrV_S06EzArp<3*M9c)Ydakj5q>LhdN%Q`$zGJ7ZB7C*Fi^e$ z5q`}UejJ4J*vrc_WaK&5?#<`AwJ&3x4g0h>PbZMeok4?{N=o9-1h_@r`8Stdw=MjX%Vyd=+*!TJs*_5Um23a4>r~p_Dh#1F(|Yw>fo-_~nrJ zD(JZ09$8&@Py(^j4R$ZvL9xWTN~z$nfw$SpKA-?z2GiwgU&7o zrf>lH5x^%H@QB1%Zn1{gjtGu~!fDElQ5}g{MKl7*gmr2hoDPF12hJcb2=m)lsu5DR z&2A{`lJ3|>+`R9`yZe>fJptf;0rx9HDx(6GEl#L z*-cxc3Sq>;$C9xhAnzvHn=XjHioc@&^^5pU-H@0lVd&*Dj(Iy{ISy!~bNtt6hVxCw z^RFEH9ezLH*^we*DGk=aE#%TY&i0dhH6h?)5{-anQ*z@sX1fw&yb*STPm)6ziqp4--E6T4eUoN|23} zy>d({Y4jves=4QN*({YKX&l+5l(3$cgRd#L;Zt>JNgSAh8euRnbW{X}>td23SIFa9 zbCKe_1L%SqDB52Mm{>r6t}!nQ4HrKyOerl71CXK+-s)&1PYFC`xp-J-^9!17Q{pAq zs6W5^7&m11RjR71g!^~C8f}+m9_KmPIZYN?4lhcV^kNr^7fJUj8gn<=V&3#E&{t2Z z4tp#$_xIVRHb9+HB0Eg|%{rZeX7&3;txl+Ga%cJEo!9K~172%L4nK?!`L*`Ruqh%S zFAY=0R%$2PqdC)`9pF~P?Y0dDxb!##4JXa@nfCmIt}&Cs_Ml2zH6AdBg{^Iia}sW_ zXlfwm4#}FZ)laLX`e%&$?=i%zJU8o^wub03VUl<8bV^iH>XAeB4LLsl4TYxNF7})N z2s1JPuZ(|9as2Pzk$)e@e;mjdC0TnECd40dslmY^g_Bz0{s$1X%+{zQHg+V4Zy6(<_W0u!Vz*0sDk$+*j6KX|=+*l-8>!DE{r872$r zp)%@*7l&naEku^%i^mOX02$Yu>V_IcngBJZXL6aWU#i7P-_+4;Mc#tKlot_A5M^Uh zefbC>!lHueJa*fueJ$le#RrKG!+Ye}IuOr=_8>uKSMN807(LZtq7jjtYCpf0(R?$c zDU-T1CL`iQU44Htfcc_?IRQ1Ms@|9edqtzvT{JVRl{!>^XTKfyu+y=UCK=iz9LcXy zi1}4AUD~_!VcQGmtel*HwB=3}J9oluuNgNQz_?;&PKy_1*bt14P~5f}IZE7GgW|?^04Jp66Qag2$;TZMV#qD+mUjTnX3y8IY7e*; zpZ*=N|wu0M5h_;Q3!#2w{6y8xug@5y1V`*h;ih4!;R-f=A*4>`~t-Z)-j6S4EM?e&MTwCBKSg;EsM5 z}@j`M&HF3V1acAYMYU0{E@{OGg4Zxp>d}Zs$>nA0>du3*ru@cI;z^f`h z>21Al*LbPc`2Bg#`vc;DdxJG=hy$R)+*jonSr7t?o9W<5Grv~D&j>_4_6Ded&LbEdfhom<+jvF57&l*4;c6uE0H2ecjG&ik@;$*P(~0Ej}$- zu9RKtokG{1$-C)rRZy*lmT9NZ38X5XPKyTChAfa=%4lesMsm_^QAM&jv#Az?BPrX( z8Fjo+1y?)?`%h@=0KTJi$VW2H6eSJ+Kzp9vcm-L4TsgW;zr~Y96v*uCB?KA zgSR)?6qu2m5+z0)?2cA%VP72E946TVA6ubd@a>XY?%d zyP>jqMH}jKZK)Yr##(AORpTa|s49a?chb3&qG*eD9ija$(K9sTbH8G#`A^o4qTj4% z;GyiPtUL@ZT(N)0>suWN{u)Hs%Z?AmPDwiPZ2F{f)iz+o_0lL;_bg5?_Nc=^FfU}R zWT|;QCx+v`M;nY4D$#+M|3paSv@>8>?U?1}R(4vh${N3hwXzH7Is4MkRHJ+3ZHch- zxOgnKfTKxM?#;u-#a)b-w0|fM&xWJXF`VioV<;OLNL*EY^3WMzVhXXuW61P?V#vbm zuMb7}BfpgKf>tW~fz4pe(O3g1E3=E0n=U&MlhSUPF)_cB{zB(#zK@S5s>Y(dK;*Wre}=(c0RWxt)!n?7j^~~nU`DcZp=c};f}AM15O2So`@24+ChPX zPvU{{cjILizpM{Eo*+XlzQKejF|B~03~vh$u<@xdi*9buOZ-fZIUiHFHy<-J?(2Eo zla*4*eemp~Kz!CF-l;WI^SJyNg0L%&NP3f7O|8z;6|qWZk3?%p|1u#jVS45D;17OM zjAUnP3nXk~C%Br2Q8hz7k4yY@zEHklUy7o&?+(u{LcZ=4*Lik{5!a>fk8`Dj zu@oaUs78o>z`z?2;+hZY8Q~4s#fA;^W{VPh3Semy1AAL=3lt1l`+p*qaE*JA6~Q{o z?<+>{Th`hYd{RX-wIvy*=D{@aggqFh9(+hUh%N5B;z#7f4PBeoj!$889jo7sL7Y~9 zT~6S>19@*Fv|ZYi8!3mU5}wdEJ|SKa-Yuh%qmw%lP1Ug<9$%2#s~6vXuf?eQv|i=@ z8G8LX#b0lZ##{BV&OL&+El%~UewIiIlIFhq@Zr}ldO0W)ZRIDj)Gv!$5~e2kK>Ut1 zC1x4Pv%e$PNRN#B0ttb0%j9*V7M>~GLO`(7@OMvy;<2IjPapU(-C?W;Dg@o3S}h)mCj_+)8u zu0FBjb1@}QlzR}XdZQk7U_b458)n-QRI9%Q-x%`?NJoAiNPPX1!0#_+k^oR72qBqdTdu?PU?9sI4nQPMyVltc9m;`Z85#_Xe4jiCTYxjZmdmQdWfVj zxmAT4r^ZB9X=kK$7HOv%9$h*uIm1y*&gOB&xOGbnJ202^wy6YRKJb#I%Pj?|i=^2K zp!gItet?DMItxr|hjyK3(3fad$tzDLk3-S;GkBD$7M8EP;(f;CHat$Kk&n{xs)u%; zg)zbEC+7Lo$_sWWKe)Pm_CVcKj^fN|Vtg-}R?2T|*JiD(wN$raKE^DpI#v^P=M6K` z)9tYM^+Rt<(aDW$HDGDd?3Ka1s8-P#EV`g4z;IkF(R7LhwYKu4urNh+!#Q#UM)`8| zCxu^jQ-#H7U?k=~^*UmivE#V+;5QUl_VW~!M4{MeIsHU?i$Gx5b7X|cSNWhw+}x_u zQ8+Z-_F7`N82Z@^z}69#Q8UP z#4k#rBx0Gu)}VFL!c)>ldaD3!U(D%FV5WV`bj&*uBB4iC8MA;LY(>; z#!sXpmz4Wbdd&giaO_Yb7rYjw1Kms>5hogdLly8+8tc#A1J7fY!NF*SoCb`Fyo)GU z`L0HAZ?#Ltz5-Z&d?I6PiL>H&ZSs=ghT*+i1q~uJ?o717Wfo!(bp@0uQP6oLRubQ(p1<(MMEzRu=T>vqN|3MYdfYMf3!SZEbVVrW%1O=XxK}2Ku z6^}T#8Xit;C!#5?wggV&~00fQyFc^ixmkmo8 zKKgkZ5f}Hehw&i(Ns07;;+q`#YV4aF^?Kkth4eu2QI7mj0mK&}pR&8~A_G)*r^&=a zh3QN0Up922>@gq40!-Uy%;%$*?IY;p!{omN7-!6fZ(V?pvQfNeAQR1pPdpnk5zCSS z|9~;+JnnS>(eFv`UwSg>pcm_-526wDDhYk|QuFna|LWBXwBNOY((7X%zNKq;E=1T- zQ`qV-e(x*I`NYHNWWT!D+3KpW*OwQs3%tMnwk}xXxyfoY&AYye4fe%n%u$r=MhBm*dlYoWRtWp7i5aQOD~wCFR`yU2sK)7;&yry+vFU z^^f_@Jz7uG?cH`HoO78WgmXz{oanPp)J$R(Xn4BGx#^7z%=wUcF`XSgKCW_#_hB-y zl&y$zbe!45P!l6tFEOyZ%qf!lwzw4&n0E39mFSqPAL3%-t}K@EewX2ass*%twO!oc z2mp(TnO}{-V3FjkW1Rc_`GM=S@t>d8FY*Gn4yB8&U(1_aR|S@}noaT860%^>JuN(k z`w5HBqhrM#;_Twc!q%H+=Mv;CBwJ!q`83!mC(y_8e(L?VElze9a-?Bd2+^Z(O`7~X zr4%uWymnR%X3iq=q;R}Tn^k1rCzg}s%B8&zmjW76n3E0^SrVoY%`X&?W%Fpt^8$d2 z-j=AUMK~D0Aqu9%9Cfx_!(WX{&hfIGY`e&*!hX3@QQ~AFQz$0_XVQeG^c9>toP6zT z0vWKe07>fb!X=*L2Bf;Sed-4t@98{1F|AnlUyLX&n%&BIcSg2vak8WWE7ps{W;!1| z5gJsDA<;}T(u|ub(rqKfoEsneqvM!c*1#W8xjfgiCpe5@&dbavbEUnR7G-2rwY4i{ zVWe?nh=cb)B~4%zesy|+#i)o&rLwEN0SlvasU=AwH3g37XnKZJg(a?I%2K*(09^Vx zt2da5Jp*JRmQOaTGOf6=B2<#PtVO-C7|agUOey8Dy6DWCY{h1vu1iR?sCz{DI0=cH z_MN?JnarFOHAT)kn1cg5^+` z_VmlJ8R`;ZF_(^2(`{0$GGrT8St%sRZZ>g(Doe*dQ893!#5K~pwXjI#((6J`MeC$x zNj3wme$Yq`SQ{=Z(u`?tr^9Zd$)zC8Bl!_=XQHxW6W*q2YZucgTEExCIBi>%ioLfW z77`$?>H~36Do54`7a=0EvQOPwkd?5<#X&qF@99-!Pny7*kxpMDM#(32hK1X;U&=@O zTW6{hK;8(jt`A`|2xphYSv3fDc zP%2>Z8x@RhMQ=Vt6~6q144HbpK~5Bct^5Vew`QLVSJja}k=mCe)Dc%@F7i9IFHN{# z*p4|RDevVVfyxJxpVA#Zi?^XGd1& zmxdG5nTEI-i}j2j?q53qlPrnyHhUz8_bAG4>LywaTXqSNvs7BGx{fWmH(e;3UekAR zY#h0L)&OlA5BIya-Cud= zu5j4)hMKsRM74p*3o3)&hM_#HEQjW^R@DLf*#fOnFr-zXO4*`js!G|WhNhZsTti)@ zK&FPl_*@Ozo?)CmAV@i!KG}fHo)0dq7^Te=cY6V8&DUxSd|j%gEm482!*o5MRtfH6 zdRcvxR#L#E`Tm=2vcL-%GhvD zgeh9<=AcRlTwLLWSIG_dNSX$$OK$%-Z4<27r?ptT1+{un_Xd9WCB+p`Dv?X)s)Bx? zi|K&6N#?m_`>=k#uR8kkm5m`TN}V)l#cuO}Ij^N@bkCPzdbHHQ*)I^cdq6d<-XF

?@Ib4$R$ZbA6MIsF(ZEk4Ii=sfRBa)&Yo zdo*%+J~Z_4Ve2DlO3H=gri+l&z1J@juzqxm_xwRViQht_&1OavHJXt$3rIeBbnQ$= z6{7tuh8?B5NvT#b3&5vtz!ok*tj9nWQy>b2deChCqnt1&-?N3oU%RV;C=`rq2Ep0` z$9|7Z2fL1tZQlQu3vZLdQ?AdgU_}db4R#CPuX)T1T=XAo-N7Mkcd68Vys&*6L@pI= z*@hY++4Sa(UH8u_x#*i0Cow&F!B^KqU*D%Ax8KFrr)5h*&yr-ypzZW8wc&f$@rh)4 z!9Cdi7W@8o)klls+xdFV>Koblp>m8_G9?$uctSXx+snV@u@q;`tNH8|ydk31MnDW}cEG?&A>isZNL$3fLBa#iwuXx_Vb5QSoS zc1*L^MR%Gynit@tW2j=}4jgmYyDCao)m8jr4>(2v^k~|32Cr)lIXA>F%C;ahnSt9x z1GaRvG`-Xkk+z8kqSX!{MH%#>P=`Rk>2!-3qSK{mioBN_rFQ1|9+9Q( ztI6RR*Le7!y%9!zI8u}a2GcLz&vLLUhCEBh)8L}1t@g?e>Lwh`8TkOkt+zDmDG7A* z*!h7IDGs5jSEo9E!zC2GH5p8bM)Y>1M2ewL?T{E_PAf7|g|#3+Brny}2BWoW8nDnLxaQgd$|Krm|VgXR>c}%6|I(d4bwx(t9Qj4_-|)l8&$?59gZ#XM!LL zhnyFj&qCOTLMNq_(lCm*u0&d>b{gKLH`kcZc2nf6%6s|veBOKp!3+kTvA6sJ9(qoFmReBVj9$vK&>HQspEPRH07 zdd{(FsPScw7($NHWhHJ?2?{FDNO-#B))CNkUaa+srxL^|v_e&cuJ5kFSN%qhNjl_YH(V{ISF4U#Yfz+gz5TSG+I9hWsM(Bk5fN#dx(2?FM(Eb*tGz2Jb{J zY8Ai7a6iHpFThsiz+3L~3ZLFncL=vHhE$GTYFx`LF=7_pq4R|==h`&^J$9a%O>-T0 zEJRwIV6*?SINx8XX$7%D^XuO7XM(@`{q0LZA{tg8xpbt6l>@)TlQ@Q6i=2>y-#vHdPcQcoi<56xTBo~U;b0!Wj@=!MKa zlLa>@J_NedkI-7@$HRz57>PWh5_-h^q_|Xm*Vye(>E!a;uyM$G;NUgFLfU95^gD$j zIB(fSpgAh82AUT>o<~~Vfo6&*!dS!o0n#V~tTw_g%AOs9|5DQbRaH)@WnP*98K)CE z5D@qO->Uk1kegP&&_-Rs^POpAoV@ghEF=_K2H)?5q18)NQ`8o*WeP7wq?NR0xrVJo()6J30FGQ@z;1i0FcT|@LbAaW;7tOF6 z<@1v0&+u?m2l-MNUUz^)Ox!*eCau$85B-uFj_;F|_ZI7a<5aPOf;9Xr`T-;#JQq#? z{nFr{$GE7yW}?(UJ8Wb?0$W(4@tbK_4u>lAswk8*iz8=AmD|wFRhOwoWJH2WYd@UI zJlQ$ab7YH4Lf~V!o?IK$<)-q4{2}X99LY(QH*ZnmxhOHQo@`V3v84^WZkb|}O1=hmX|@5pp` zmSmO)wYh>Q$rzC*;hoVd0@!9U!^G~|t<@Ac)Ec1@+Y*yrQpyum%aV<{b6s=}xopuQ zaGO_xp=`<-EHYiYMo%C=*k$#S?#ksK#+xm(572mCPNDIMUu$UW$bWL2$s|~7?hyv% zn}46?@*Sz**3)gQ+gz?CZWDnrFS?i&ZlsIDF?kQ(*yqe=Im5@qG+5Op+HV{gP=%R7 zK;3h5XlJhsdFP+r>-&J`yF47EZ*(27gcn!YZo|1xeROt!Qsy8c0uvp;$4!j~dMzqh z1rL=`=9{snfqFgwjwm0JgX*f+?n8r`*)KzeH`3^HM$R3bA;ldIf_+v+w}s*#Wx!-Z zi^;B+Rn6l~S8Yiaig=$*cT!^_VG&c47lqzhj9j%`i`7WhUXHFTCbsJrI~4k%@tGje zEA}zzO@dszk4>N#e=DtnQBOz|CJM#g{%zzoKUk7)b0`WVmGlGpC%S|5fbG{SS+|U+ zuBdm)EzU!TkHKp~7e9eHk}oW%zWw37Q~B24!WbVCf0 z4yDXRiY;W&ppNd}kEC13t=9)TFKMYr$#8UaCCEr?w613bQs2&I?0({VUhYdZxKc!x zy`T}!OjB{K&7JVy0R9&NNj!wqD+ZUwrROl4L0w`gWZm8bH&!&>y<;Mzc`VJP(=RQ_ zHYz!z>OBzdv-C;z3fCdV(PYmJg3{w|8U7@DT3sSC)i|QL5>=uOcQ zO*X7*V&4*k(Zdq6d+!6I)Xw>ALSK6FKCK$R1%GazQ$=a$YxP1s-@; zr4I;ee1N_`e!GsKDvlId6JHL*8#i+5LJ5&z1G(d$Ec{L1LeLogLN5TZJKA8HPYYU4sQ7@mm9`*) zR%d53TNs88hSO%O;0c@!eR@*@Ie_eb-}Vu40jqBklW3%2=k-|PiS@i-2dO)W)jJIZ zLhL;-``J^A?=l^>dBk}YK<35d-Jnm>KU>p7U6l#*UkP8^?C0v1^Zl_vQQfjTqZYld zkx}0eSPyfE96Q+0z9RxL*sz_oI^ckG#d>C9BDJDHyPY=3dssU8=T%)XNQ}bCPnhB> z_Ua{!gjdWW2leCtv#gGI_?D=9V~$d7mNGQL6k8UZHIq>M{u56+TxQfG*l878e@J^X zeJe}YT@h?dstcCA@8@iBdEUTmtB)iUgoK@0uFeWW^mId!3=9zB4w=vu339QM( z?8uRyo`Hx9&t12v#~rC*qh!x8r`%K*QDaEm#ug09mQ>K~(qfQ` z^sIPC`B6T`d{lBKmcGs*TPflvK$GxNRbJznD|2D`h#({B)QDegzA-ydxH@FS2h+v# zdQs6fWsqtDnovsZYI;S4*CDpI%BpH`%VfoLM1K)BhTLm}(B&^nRL;>;txQX-usC&v zsxHMfjCE5V8tv|p&AN|NR(MfTZE%!x9LYcaB?sxMwN~=`5!PTJG!wi*n+>>d*^FMHs{u6ipyZ!&WMF~;h{)=() z6&hAX2+ap=96b_faR4Ctfku-PgUiDJMvoz~N&JotlKYjv`6k)q^YI!o$5}pcTNyKT z&j>&#t8n#b2Hbt{1;@r$iw`UX9!^|@tXjW@^}JEK*nXZ)y%lmqD0IX%k?u&>s6y@uZU_`!T$2F z_dp*OL7gEDK{$fYy?CaZa~arIY|zJy3XUFV-l14Spq1 zdclTI07=)ezQE)fYmmKZqXX+o;jJ53J2U%l-lC zD$m;JG#>l0g?T>_S_K5%{G3XbZK~|9D>ymTd6j%Gu8N zLTPNv8Lmy$?NT`dvB0XomP@q3Z0yl1D;zhCLvOZHmDM)Q2WNn00|FbpzPtbh3QqTQ zdG_13w*~vvHB~sf8B)JBoPGTeWR+EBcIf}%dc~2vWT#}`G>`iWH zn?|gG=peNc_Hw)t*}R?8-fRO6Y<}<=H=0oYA)Z6^bivhPRa;hvZsx|()OLxYMwx+_ zn|1dc=x-i06&I-tTcmCL2Nm z`heaztiHHHeR%>uKp+@3%Ep~jdmXO1lk4DibFFu8(KsSh@Ob2_9$m?W3iKgwK*=Qc zD73I6-s+HC^^o9nk#yrF$R8w;KLo9b8^6GkB2H!1*1_44tybA%bBeBTwG1hSRJ(5E zTo!eTSdmf6srFo1c2NJMeHZ-}?jYlcTSzheBejcSGsXbPxOX0xLA#`IwA-WN0XP&3 zD<1md9D-5x89XB8FJBJ~D!JY;or=d{!n{+z|Ei+DCanBJS1@|OO1cbyTl^17{(rr% z01LB!#VwfrvyxQ*_5l=*52?qb2iZp>wL+$cf~Fk8Q5XHD1UCGQPh*lfh1SNcVl5`0 ze~2YjWDeg_zHKr(1sR=`cCV04{!W&p9GEV-UpI6M(4|8;`sfh%p+blesi?R2r7s{EVc! z=Dak0T8c$JPoBe6c2%Kpw9jOrsXJ)yNTt|o9O6C=NQ<%wYPbolI6dmUwGthUHJhdu zOReQ9O=zQs9^10h7|5BGCfHnvxtmPKk#?=H!c(G?KA{*$0VWD^aS8P;-Duhb(IwOj z&0&x!O{(=mhf`YyqkZckdNP$cUFnXCgmrul)j8H^v+j&j zM%duQOkkAK=_Z@*bS-&XA zPhP9ctd2?G#Kn7?f;N;gNw)+xF=i2FKyFBw#N$m7`5ksaPv0GEjH}DVHv)%LG2U4c zj<5$(hFNXt|3lh426x_WYr?TQwrxAZI<=>! z>h~$1QvX|PUF$*;nA^!KIdB&-mNi4BOJEwInOKMlyPV(#ZI$6@eHY=W^9h^-JI#oV z>nm8K(6JEn1*j+uJ19*|XM;-U0?MpUw859)Bk=8Wgp&sWD){~bikwFuau;|-J4Lq> za~^ndh-pI0V+@=KuaN{2yV zMhoHZvO(Ng#AV>|}WFn<)vVL=&j+tmHd&C4S!09nn>uL)lk@I{P$GEL#(oTlcj zc8nWHXA%|PwMOBR?F7C9ehSN06m^#CP?1@ANf2=?k9%!!_9!L-|5Kf>!hK!QN4;cK zDUSKi^wBt3eP>67)X*NLQ|-&7mB_DDG-c5K{NVje|lpAHcq z2i0ktQvQ6o2QN#Oh~TRrm*n5D=`)8gkzR_#6097SZ*KZ}MvvWW?grkD505@)qvvApCS4U62>_JYhf&Ifp*IEt#-U zUn6=?i7x~29(1gjsRYXaykucAIzN*%A3d`{A&uR^1j-KWElN1^gqm@phQxZ}Yik~K zspAQQq!CWDiB$sRFmkm-Z(@3{@;c)}n~f#~*Bn){coK4zF)fr#Xm3YmwF#r3GO}5y zhGDGp=w%sx_sV>0$dC1dZ$N~NE}T`xP{m+&1*U6YqAo5eH8G3Og!F_>#Mf@=LJxxa ztdqo|Gr0kTTg?EyGDr#-0a9R3ZMCG#z!l-VzHw%GR#`D*FYNd)HKd&$I<~ zGwvz0Jpk)B^{Nj48gR`PU38^zYW4|S}MzuN4Y94a8s+#agO-lTh}T?+Q^yN~7jIQ=Iys{j2c{o@EF%5h74=cHyvh8pM1 zJS(Y&5F$3%&h!eWBS}LLAGTz$ma--jSS_F9w7d7bv;6S(;T6xgqmsf`J)iVG(P%3^;f5xkn($yC-8TRSlp>8ryJCxM8_6vb+Yr5 znH}}z*EySqBvX*OTe_H!cxGRkwe=X8hL_>YZE+u*7j57|7M7gOt?lF*OX%O(I1l18 zq*RnPYL);!e@dx+XIqMnAxPbGijAep714YL-9x}Q1wtrn4L~dsClw;5bMpw%$n@#i z*^O0ALEzBKqP_%&3ctRg79dm-;JxMK!xn_D`us!eKe%4NiLSqkj!ko)sZ%iG!xy>< zg_DtZ(j`lv=(kY4<feerfn_i>T%|jmmX5sxW&X#`_>&^!5tzLg= z@1Xx*hK&Cd31_NU{$;x5Wd)(OOiKp})$~wUSSkf{;U`}UlZTuuFEAY^zgBipw@&&a zUF+~N2<^`c+dB$}K1Dv$CxG!gjMwznHhAV~YkFV+JaPT_{^qyw-5b|YhWq5o!IBE^ z2heZq18Ijnfu9})dEiWTE&0Edg*bVXXQF?i+_g}tWS6LRb0;eDD#iBYg>fYzdlYTk zgISK%#20C7HndJ*Y>u_&l~k)>k1f4SlAzy{i4;DXVw zhZ(uqWdOmiVd%5Fk3$CaT17qYJIsZeUE>n0SlxB84bQPwOF9{KP|mQlV%3XVHaQl0wC6 zt}ZAX%e}6w0Ntb+dM_HLux+L|iC!V`5XmSJO!SRlPcmj#@6ul`%0L2rl#(#!+fZ5N zHfzG@!R5ch@!n?UXY^6a&vwdYo>@rSV4ezrS z%d6%W;k#~bZ(Ow(Fa=SKcobfkwL}UU<^-lB{$?qpPaXTu=nvgngnt0ktExm1!qnrD z&uI1SxM0p$HmlSOnsx zz#tt#Q6CbEE4ZQDgk8B54?iBl-0`mVHx9l=#w;+Y=#dah8UWt-M27J=^MaEQ>sgY@ zow4H2S{Gb}si9+I`IQ4)ZSp|}rdB~4)JI?se$o}K(eGqK&^%IS;lmgR2c*VZWE-W7 zW>TD;#}4q4{p+E+ljGxGjJ*EB@^(B*u!p{%nU!xO;^%)*vHc&gynnninF?Cw^S_X} z!?C-Fc+{S~|ALIxw@ z_@nobApWQQW$O_x=^roeFUa3maQe(PY`ww}08fM#!Yz0^zTLuG2`@WYw$`HYiBUm} zbSDd@;zQCHG&T3icYM6bLVSV0?pkL@FQBL$+5~)StYO7|8|E-yB*r7G0RJ4tFolz( zyvuDEy)vhF5D8<+f{B=jvmN1w%*2gXLYkF64CN%$M?o2J-$R#U^p-=WocnAcn|}Sa zDV5n)Fs4r;V;m`*jPo>3oOC;ian5HbtXj&fmn%6aNYgC}{1ARw8>T|b<%iCP^Gi|Qc9=ZOQQtg^{V5Fit@mF&{oM+Fx?xMvNo^Fp-U1Nfyw zKfF&$+ZQYsTN8nzjaC~*)!0pI&&BrXyS;~`toF>PWU8!mA-?m95$>!)g~hOF14D@H zVdw99*4Ri&#AbWO)tlH%HNk134{<3lXs8C|<2|)lJ_K>( zN_jrsSn-tpf#lq ztpOZe>|p2lZE4p{l4NkRYiZY3&Iq@4g3uQct7^`*ya6YN?hbSyi|!j}>|1gmgE)sUf-;TXQ>AEC7!W5aFxMxz7@oBjz*TP`G08`nlFU)^ zROd8pVN0G$50Z{$FoFk)cx0f}BSI1#I?QP+$fP8n5$aZ2YOr3I-9Ix%rG`AFm<}C4 zVr)L#&uV}cCt+7o%XXL!H#vpF;pkbLm!5};3LRuE_4Pl8H^~IEPso8 zKzr0E#j{kzD!t2Lj|x~0ksTQVqB28&#?^nGkP>AsVK2sujoIoK{(g}tS{L3}EFG$u z`$$!!)Wy76Aez@opDZ5!4!*xZD({mKW((Qqm@{q2F+Hv&0Hp!tzlcEA;oun06Bk?x zt=LHF>;uoEI5N?eSyc9`Y3cYyMPkHGQXx+nP_h#TC8U)7Xy9b{Lni#7_RzdQz67e5 z53+u=-)PL*bH#Rz0smC(0Cg}gnVzuR+Spa>4_DxjY#(k-j(5pvvo zJ6Oc?)d5Fw8tLxKPeZ8a$Un3iw&h657Qud9hZIaQ851AWLIT}MJnPnm=P9+53EEoO z=8wgp1DK0?nL$!5vVF>GdUag>bS5sSQ>D*&L3BG~)al7#`CDO%9zuO8H(YBc39hr4 zT|w35&p|=fyBhCZ2f&w)o=$7;Vt@40M|u`8m=M@3YQNSj-nvRc)`*EPyZo=ro^iEv z8is91F9e$~VjJ#@Q-ZGcKy}}J!|=YjG}`mm`YM$&DWet=5IZv03MjmLOZ0TSSd^5{ zt@w>-DrV21UZuM#m|l@vCf`ceA?rzG;BSPB!ZTfj`5o7L`dVb>g>2;m!+YjhSP zEDF7kBDmS9f5w@JIotb(q3+=_i{DN# z+4!y&k*(6I_mSz!cKv>YYnVhy)0RY8>FLrYR;d=)X-qvR8km8OsFHYNl+aV4WG{Rq zX-Bu3Cyl$LoFN{r<>?yit`n8?nVp+098(Rj7ZfOn#Ku;C(2THF z5h{earABBo=SB|@^8$>Xh|2D%u5k0dB^oHa*be9rt`-dKk?dnNSr(Jw=rMRMA3Jd> z+wsZ1)9t;F%H0GP?2)w*Ikmo+0*AW^)VYLJFm$d&{Gkft$p&T85O|?rz?_})9K;<0 zO@{@EyOdz~o%Jp4owBKlPp4s`ZP1{CG5=xL;F%<8@q*eyuwn{V^uy@0qlPD3B}0S6 znX6fbysiMcriOP{eivf`DIV2t*BQ^&v|Dm;30=61{>Y!1hKLu&R8(c=JB#rE0Cg(n zj*Mh@u{=7MZE}(tHG}H$q);v<+nAHd&5v3t@J~%!-JiRHXONFU4-~Y5tvpEcR-2ac z#z4>0 zP|C%-%n`JW&aW@)o_ybkr-oaijhlgzf#L%2wq^{PTm``rh$+Vuv|7v{(4^~(g*jk@ zlzNIA>;!OO87%kbfIe!CG0GHXZYaPG8peZ_*$$&`+;*HJU`45ASU-)4V(x}SatSnX zCcn>BR2>ooLJx;H25pDBt<`U`a)6}fnnN>6;s*Z;*Y}d&5m!qq#N72wJ*W`(Ddtdq zG|jjD+D%i~$9NZZR$EvWA{6d~4{nxYed?E%`0?#FE;TS4D`bmQygw%!+~qn~%N?bU zyI=6!duVs23g9|nQK>Ih@fGk6aUX^WU2=Pw&)R9~#%9e+-nh;7(7 zeMTGL1_BiZP!x_J&_a~7+$1d|MH5rcfYF8&F9?}DMaUhVpzD5t?U42MefV#ed^0jO zG71;O@YhwWS{G3S?DIGLit9lBJ-Hv2{jGhFz_2A>UUQNx>`@Ib+VwB{>f?e{(W|jDD$)2-eE%tT_ z+0F)pu_2p9K>O>GO zI(}|8X0T@%D}bYG1-ryE;cOM$mG<(F_Hx%GmV3;s3w?2ls@zOwjkvr|dSy#fq#r{! zWg=R=ck3L8*?5#CZEkpdZjXV;SLG?`{NCJ)EsbUHt3uf< zn%@n;|B&eLcLVVE1m+*rWnk=>bnh?ZpedVjXTE{4UQtc>(7{2L!G6(DQcAEgEM)=i zB!WKZRA~h5i9on*0Sp-_5UI45loQ^smrwhmi=m@6&hNFV0yYG1!dcdh!L!F8^1qd< zbm!dGzZ9?HZ`O~L)y?EPk^koaCU9srj*Pz$hQ~b~Ktzm0ujYZxo5U4a&ZAact;*G>eqWztgFr0)00=1cctVm%Z%sIyQf|KE749~t5TXc#<6_AD>u^%PCL8yr6>i5fwpa4U8%2Xb!0Fs%VR>u;u& zrmlY(nEka}SZ}9UeBUr7#CJcS{2%lJ-{VU|JFD+xTRsa5ssBm{_+O2i9kG<5gNe1l z-yNN@u7%_OQsyd~f8&?vUea+!0+_T1i}!k38q_<4fME+s+JfXEFvx&%-D`C} zh-|IhhXnHj=*AKQd86Z(&g28s%0!($s9N!6oz?LmJ^JAVel!-!00bF8TQnW zb?~dX-kU5X6n5L;@K>|>q!!(OsLRgUV6)NBOa0#NCohKODl$=!yf2Bk`Q87f1O{;A%m3Nm4*xx=sZEX_D4?XF@S1KF=J!tWg&R!OfDx^4GQ- z%c3ZzNlXoY$RR+nhf20lqY0yIAt~J9Mhz9E%44cVAxyZD*<*FwAZ3pq!0Cg3^J8Qd)0cU2z&= zlA6Mbs4=Fr*1&8^i7P532k-HQ>|KLaBu18ANXd-AD9UD$Yq*Wf;}y{??=@52lxz4l z|I&0642YqBqxwFsL4nuGX}vPPpH-zW z4LtIdBghAe2{&HC)LD3Q@vslaDE+!PyA9c}FShEKKgwUd$X(M_Yc}PadZ9OqE~uRw zNRGYP>`Y$&1%mwR(o$81Cjf^50C*t!2AclgF0FsOIuq)UE{Y4^Ap?v|bdtF6bvuGd z2!sK|=(6*O5Qw6Fs`!fVat%(B+P&TTQW=u)6{u&lO|+I;c}u`ciF`h;pdlD8 z0yvq`_F`xcX)j*7vuxJu2w&rammh&8-S&*n9b8^=s9q!8$^H;~RDmvlbffLnm@X6{ z;;veu#RmK4vmRPT-b5ka-Qn%CrD+#Zzw=EU^A^+f2mUFDFpf4wH{AYHFz9pa`)3P0 ziHmA~r`a|cn3uXwHYfugFWYrE&^u#@-8*H7&K?_>7uBCXNLsk8*KhbqyKsJALcre4 z*JQxn%07Or>rIvYv#JHfL#J}&TBamygKH`xh_SR(rX-6(dYwsre`ru!j|l@$sCGjq z+oU?3nAMVx6BD@|wQiiKl$#e%#mp#vAOro#&!`dA6<&ZioKi2|))?gryrKI3)ytaC zJg90}?Ytt02B>x|W0%`R2`Q&8bLd(b#I>+y12i<+D+L?I>f&Qnwe0dyWCSa-+DfD# zSVb`PYZH?~F4X4MHgLk#LqQ3RG@30|O-WeBS#CB3(_^OP9YsfQ`ONb&orqV`Yf#74 zYbokTYkk9YRD4olmwkmg?%V>e^bnS3Y(^ zn#Rk|D9m4mI&4#nW3oo5gUkiq^cxvdCLak=jmTrx9Ry&D4G!!{1Y0%NsIz-c#o}8x zkfKbEnas1uwKEwRsylXw2!(~lLEkkCR;G;KIg5%ABm~jvI`&sI8DwVdaY(P?ZqCw3 z2T@6Dth#-YR%vdZvzq+QByQQ?Eu$`v%;KdnkYePUs9R^yAjzb%6dzSw)~cS)E=*H> zrkSy7c$|bW!%nr5Bqm&wC${E+&i1&=C?o$$n!_T@^Y5K(HhLl&TLG~v@=p&X5z<)F zkkK%cs1)Fv_Z*d^-OQMWKEw+Q{b|IGVWJo1anP~y;B6l20KzW>c^1NAXVY-9{;dwJ zFAtg!tG6q}9$-m4Y46ulCQB4`cnpKutQ{|%vy(K}2b_!NDJ5Rr1DG!4@0i(KT+OAg zHxqDz9doLyPqjox;F1liKavR4TS>G#y`eUD03wTtARY!*a9ac#%34_AJVQ>jzmpF$ z!?eSk9Z|t{f~jN1MG{~~)^Y(EpuxToqcOlHq0OHnhBG|X#9WF^+uF^r>`R`d!C)%< zytD~KzO@N&Di%zF6Z!Rl1u}$XMS^|^+t+8KO=r##O}=N{pdc0mUYG)5cz5|zg+5Qe z#O_<1MqSi&YD62HxyC11s7Z{3VlOL+|93G0II&uNdvIt0co+i5MfrKWC zluSxEVR_7St%9VoV-5CcwTt&$9Qy4F5V3&ZmJs^2%>rDV&OY4OvEFG!Zdk^ZICVWC ztxY?zWPWrkvL9GmI#`lZ3YBQOi+i7HMy<`Xz&>OC zpu4_JX|JUu)`e+ZLZ~1mJ3x9Vj91AL;h(bXdnUO~K$%#gCy6da~Y9UPA&?1ha8;U-EE(%CzPRkQ~8Fo8#j zf*;%bJr4O|Xnc*mLhWiF0w;E3W=qKIYZPKp8YwO7hGOEW>ZY9VIebwX!4IPd>X8() zqB40^8}zJRVwPKny-HJd>@9=A;p(`u9A=eCJ=&_Y#Qc4=n6UW>IZ%E50^`I+meRn{ zT#K{d*|H3hepU7B`vwUkvB8G<9d55-cxTvmO{8y~u~a}{HO5^iiHZSd?vZTpQn89dSN^ol8sZ5=!E zFTm@uelQd1$R2+ubg1;6m^cU9?Ys!^PE~Gh1`a=6nY#wG5mma; zr}pAj4F$4H%Lka&V$CF8ss_per{B8Cb}oAVm>KlI9^Q^>v$(SSt8#LuNL#@hI5=S|Tj4)=av|$=orHo zeuQIr|DBQ1_9udlP{-13WQ`+7>QFB~I7Sv9EJrPZm-x9La{90g!KVL2 zh^d#e%loCxOX4Q}AH8q?95h4rD?0|uyJ!>+jhkTZ461sxA9L|csXVlirc&DpUXm9A zrWb$#Q-q1Y>_)sr2Rq|h;5y4^t`ZE+zy~rUy_kAjftZk&u9zzZ4(-E-uEVJA|MkJ$ zU>gfwL+7=03*0cLBI8-YBhN9(&3}tGIX>+yI(ZM^nas)sx&X(KjoF`P@dNCnMo7!r zQxgX1vlD3dlYsPNS(P9o&r`~PAn#3n*>nGb!Oa1KlNCrR6%5iZ3!*j=gIldnAfHYH zRaYWyK$^|@DSGeL8o_1n&4Dbvui(?;hwl=o7qQIBp{ghfjE!xpA-u!54s;Q?4I^WtO7R6FR;ro-%gy1QVHH+pxnH2yBeTW?Lz98%?asm3G)mEVCLahNO`KY?V3UrENu?>Rw08>(ceE z3^B2JIGb++C5|R@KXq*uUcP zmcIW5+c^GC-mijR!&h!b@%P7R55iKz=&-K%IIRpJTrr^@U~uf)ZcS{m)mWjoq&l_1oZeE5}i-lJ=+}W zTul54y2FX8I>5Wyx&-tJbYGS(llx$Iof-vB@m99|06^usbigVoXNjeEN&n33mW)q6 z+;qO4$n3w>?Rp`PKhwfAW_eHY(Eb#$(`(XK6#woi~%AfSA+0b?*>I|u$u<)x_A zS@&2g^g{MB>Jjg(XJ?suS)!#dny_{Fom`g#Vs`tS-D(dvnD-YGU(hMr_y0&D#! zP=g{In2bu?sXY{RRNtGUvO()jJS9}W9k$NQBg8t_oo!Bj^aq)N!Oa%yWJrth=muGUzE9$O+hoJEy;`|K4W!^io>12Df>y?um!JDmkyF0rF ziU{nM{``*Zi8-wN*lws(&pUo4zE7IIP zC^}k{3OG8>?t<%cLDm;V1{g)eZAzhr>VX7x1HAy+JKBFEd4CZ-Rw7P8ZoW~x(r;?+ zemEu( zq9e8M)sCBW3C)RusaWBlS+^;JsG&8`8Dz;eW)F8KlbEODw&2$Yk06?3(j5hB*{yQC z_)s(v5Nhd-({D!;?+PbSPUyl=fbD%mbxBF{mMniP1XZ{!pfR(Rvzug7>1O$6-?9U`_=Bxxhg@I zkTzAiI#znyZ|SVWl&_jXZC$ZWH+huI#nNUDY5^k*2sM;Ifd!e(7Nuf*S07Cv) zLTrg**c{wipX;J?Y5@4L2PwH76gUE6r8nB^0K}BSLa#ZOf{Fh8)TF4FcXC^Ui>|kc zKcrGW(i|P;cK4}dob50Hz-^Fr6hhU+dL zZ^m2cVWYJDFIHsM;4DsreIEJ^3hZ*q?=e}>_0G1|2q%4F8G2Gfv4f@=d=bw=83*Eb zGZdRkh$!|3z>8)MBFumgaZaJ z^vK2oYW60C7(d&q_b019QFEp%h(&4qxjE){Hs%YP*o_{A`@p^CZS-=J0E;OyP5)?t|tHazN!ZJ!0FA{6d z(IN6`|gr_JbznYF7R_?yn)_WB-ZH=o4 z4M=n6R&KIiDjX*XpZYbMnxj9$e63LbF~TBKEvb!)-Z5aS)H$GlLNWA%r7BX;@x_M{ zE_Eiw0#_264uWy1228TI<^n?1%MsRrdAxyT)v$p35N+UCJc3jyEC4{q(Mqcdg!;6r}jodycP!*QQgW(PG4zBwVM;lhNb}q6X=X_N_&F1x*~TkT79Mnr zo$6*bEGa9gVq_Yug#kMIH00QsRp$8ho>o>7Ym~(wZY@dzbP&`xnJ>B<_Os*MuDrbo zQp0p8qcifSV0f(Z)LxwBRn^avk(u9CVp_r?-F>ABcw%aqetGDln+6i5!Q3-kqsqz3 zO3?*wq&4R4RI#&?=EHLNRoHE9U~6J~59w`rk?^Op(_QBkf;5F?gOi*l0Mpmd_ZkYt z8ar!Jp~ZmT5D;S1wku@%4B-x`_Ubh44%Tx~K>7`hwl@5YCFE9*b7|ud&?1yacw-+I#=Q70( z{AJAbkC;kbZLd%?p?C4#YJ_}-u5BBOCHedle*MKixic|4Z7i{}2Q8#K&F3Rm^n}0X z{BkoVOdSyD#GbjWbbi&7fSitG0UjLA=XbgSTKigARhMX< z%!q#vctFX+y&1g_wUc#=KW6#6?UsBf^btK+6k63R@!W8-I97~t@+lWq3ofNVW7TcE zcT%cVQL8<%vpH6`xx2XnO$z3w8+y2;nE7C)KA|b9@EbDURzzCgdI|iTTyndOYB!r& zwfHzI13*T@Q`^b3e`4q`DFCx%J@8=2Iy)g`v^WT3sl$XTVmWUT8$lA&(>WS7vJjJb z*``JaE4(I}04f+98z`pP98L zZ{PGLDIC|TD#XOc^2?CP~`q=?JiTzu!(&|ufTsxd)Nihdkw5Huit6_`z z%AKlnE}-BDzjFp6|AFP+iO%!&q@Iflk^s9kq{C)U=($%4ZO6N}*OR7FB38y6#;B4fuM`j#<%1v*L$D+RG7Q0faN||cJB5Muu4;JS!mXR~s z%EOGY=N`x{T`oQdkZppa{eBW57*90asv9{DUgr0Ke$hQ$S>J_2EX-H4u=`QEnU zajoj&-a~)LBud#ySvPfR`o4HdtdDj-HfhC}g+!kWku_8}Xhz^MFWjFizk&1%R8>qY z8uz%$3qhgn)N_2xx|mQBqL(7sj9@B=s40Han;hhJ^7d;m@B`$NT9FBCApTpaJYrPS zj9x@CW`v-pc8g-!Q{c{*dcm^9^9BW64z5@;r@NJijbpNMM1Ex>rr0`?CSK;|j4-#D zQ{QqDbuE^6>e1IS^>>udQ~MIjvTGF>rUj@!dyX$4l&>!hqNJ)a!1oCvZvxA~AN!M7VyDGdn}XifgBQfQ zd1Ru&T9q&|zfG-E%uFy6S72&G;y3wGl?Dk@ZC1wh8XjjDRs*rfaj1qLB$v%_cwS2K z>b!oe{Lq8kW$HDOV7D;U_Lshao59;y%=pD491_tQs7ezpL@MhDMlx4|8zPw(WI#1Y zWT^VnceP#>+ZD0=_ypQ-t|XtRHm$1~?@xe=;V@ls7$7J`wjZIKD&>d=QlJ47DDhr5 zDqD^QHu!DmDPV*Pb`1&m22=Soo)#OOcuu1SU5b^;^FHIYCzVvObg$G3tqV z+xqTPs_}rWnxSuYnRE9L*Bcpp zr{BXK*qwQZfhSaNo38dsx^! z{sfTQCBX$zfTEzG*F2^9H_zgjVrx`o^=ge?SZ(|GX^;J)=B{UBX|Qu{pmS{G9{tkk zVT*%E+G+DL_Xx=)J-*p!w|j^T{&9wSncWx5_^ALXD+}4i#Wi|yO{>BQyqtMl*5j~} zDG~I}Aj#@vz#}-kb)^S7$a4v(V+j~N12|=<*`heG?0%$BX_BJpNWwZFw7u}Pw*u8Q zY}TF^!J}It?j%-4km$_Fd_NKKv%O+7o`>?$xpMK^rJ2RzBKNF0%(L?hB2j&ONe-#i z19l-66LrbJ&A|Rk3=d^CE(q~RJSY+K7yMSPVJI=MrS;B<-o4<+} zKQPbN%5*ppGX6$=ukc)!sGXF!M@9brZ{+N2QeWhO?_obT?6-3H|7LEcU}LCnYGkVa zH(BHFq5nVTX9LQXDo7&eo#_G8#NqOOq792pl*B$2&$G&Ys)D8q@Gl;3w37>vmmVZi2r%rb4y%pCu#US|nI);Ce9!VY^th}weAFZUm-(6*U1EUX)K}`OZ zXWc4&=J9)Tffs^@Qz{^W(5DQ8F3L~oAzB$P8!k%;$EWOL=8F1_`$O*Chpf(((iTeMXyUA#1lFxttI0=nxsrmCz#ERom7jF z+;W%hi5DMx6$RHugXhj_#z<9YMyuZ8C1w}Hp3Ul5(&8euLJI|`rc9RX!Q* zXSKOWjXYR(Qz-LPfRp~N3M1$xawx{JG}pCji7HW&x$?ob++>frSu*S~#GhLZ7Dize zqU+Fmp*R{9L25ynOZ8n6V9=(e0puZU)NOh~ddDcr5s)cpC=M*dtyA|wSE4U`Q{z-E zUdXHKr-^Bomz~HB?Ylyuo1tM)t@%>S8CAX1DPFpx*Y=>3i_Ff<+eK1SG9!wdX1fck z%39ED2lQ>lbowAzF5q7uGnS4QP`5)Zb5~QC`mL5Km&%0$&S*Oc*FT~(!%?X^(}H(S zMfvQePO}mO*|48nQT)Ufc2QMjDwhnL2cKl^r~-*9M6c< ziuVuu3n-{=-#5XhVhnP2sCgD_5R#FhFN*bN9mCexDU+D@YbyAD2eQ=Bn5;WSs?3Uo zW~srM;-CvI>k0PWkI21Zo$Wkl2Bc$AxKY`m;dt3<$@u) z4ebKH^a+B*;IV~f1E9L@Cf`e9A=!VJzrJ7STf&nOLY-={3pV^g(>S9gq?S|+&31;J*0^h z-E?+=82E3M4l!#J*u6Dcl@nBbOMTJ(su5NNYa&oVQ~$tw-GZHpn$$!ngA&o)Br&cc zzlX`Kgp)4|IuK*S4drwSzmYaDO4Cb6mRsB2+F{@T4mJ%5+}L1bgVbEFd8gk@UrC}@ z$X*Izt>Mat$6u<=@&s#WrhemAp+{n_i4KJsYKWOe7Id#UjAeL`#4iSTTXkO0vaE*l z1E>rkW5`&fgYXWc=Yv31*IPz0CK#FnESR>PMhYyaVD1Zz)h&;X1IyOS?JMh5lW?_E z%HN;xQtm}u-kX?vj6twTfV4){bd_#ci*UP@he5k=+M463sFUMT`Pn@}xp{ztLV;(v zfpz^yQd7iS6(_Q7vXj(h4V6-}dBO$XIi|VZ(uI~&B!hKM6RURf8LT_f#Kq|ge7hb> zdz7LUoEV$bDn?vpE@-sL81==de82u`uahBJnqb{Z&S*{iV(11|IJpFYubcAzW0Oje$r^ zE4P-wHC*u)g}$<2mWuY4vt3*PM-9^1b9#2Z`aW5aRg3Cq-wrI#A2d%!D7{?m(w zA*En*(%7cUcI+#a7BsOKt=|BvVaar1ris;gZ$Vy z{^k-TYRTYoO+nKtcfaFDKl_(Wn~7jQb|MV2^?mh*v)!b$meapuJ6i-9pKC-58I5;%)tjU?4)e`%i z-L7aDuIn3kK!L(3CE?$5L!`J2T-i%{L6zQ1m*~*yh^?du-Zp%XF>Xz8WzdtpRNKp0zJBRz9Hcs?>JqWPYUHQh z^mCZq`>yIhj<1T8%e2Q3=Buu}13k8~cZr%e0&r8$o<{$u2`~&RKs{A7q{D+(&udYB z37XASa2_qr@h0J*UMim?<_&x^4RWsCwv4!vcCmEApmOjkEU}VxY87TBzM@i1zDiZ3)>~RiBa4C$JslEY1(XA!f6|oW~FVb z(zb2euH=)pZQHg{Y1_7|Qj_mN_c`4&^G$#M?kj%Yv3JCdwf0`izb@*wzK@t1Gt{5_ zB#m|$f9))If2@f3ux;X2FZB%$_?*V~KD63NK zogZ2B(1elf#20F+A-(<#J~N4nie)+qPFT=-b^pn4ggLtG-j=-2S26I3N6CeZt3@mmTD>YX)kJru(*XndCw}UZh`mJ@$ z_~C@pcC+>VxYVUX$elG?BX!6}dGmEq&84FJeq@{f6JkdP7yPy?sE80h7AY2>6(yclL8;LbwHj19RHuw_ZVuzZM2f4i_cn^n>gS{sy z7c4HNc4EfJK}n?%-d3|bk6$<4Og{#b>lkjc9({95z7g9l$3|&Ar`JKr{@ktcPNzk|Sg1k)41@sQn_^2kes5tUuvkfjq)cP`JMVl07d`E8 zQSx>&$L+IX>5=VV>+}cm&3(fp9n&IN4FTi-RS*Vc^@(ny)opA$L2xU>wlmE-^8w;N zD2z9EBscZgVsQ}=Bbw&N4P6R*{e@En=)>(#mDr-SAbm$QL?^e&Xh;``zha7;mbtGe zL~f4@+eYRQ{h1$)lm@#z>i{?Q3Fo_gpSIB*x9L zufNN%bWqwdA9Nr#&>jz##hfHoyrw#1k)t6Zf5R)nsxe95bZ2F7kB@@O;ZV3sxXpuY zW0r`g3^yo8?*SUaNXJ5TG!I|UagOx9qyNw2?=PY)O4j)@@atYU{36@b{~wOO|II`- z$v+KJ#Y}8X91WaJ{?>f`UtChF6xSs|8IgFEyk?so6|0u0q4?Z^F>Vzo#k+FRkgI%R zSR3P5<78A{wfLaJy-1_nf4W*O=(j)BlF#|)5 zxu@3m6Z3wQXu7+%1P<`~J3q`iv6$-$>g&cZ^9f~e;tIrtKXNe?!*GWoL6AeDl43Ui z_(xP6e#Z8Sx9AbKP?*)QA|Q>=vUkUAzLY@>z}#*6Ex`hvUpSe^Kki>V=KjX8;_TK- zer>$h*T%E|zij+}7+?Ln=8%VKC+-;WF|JNzrEgBA&thG zX@?4(Zz4G=qOTu;N#?f#NJPLO@8ncxnvb2U>o&jcHc;k%YcvxV9fA%nv~mcQqAQ8~ z)uS26l!~_;h>V_yb3)aTaj|1Hmc^?B;iEKm(uiKJ5e5}{>x~hr=R{-}k0!bCLO3yX zlNkmYj!2msd6ae>Df3voFf|kC64cmK;gmUw85!Xb)^jtVq5+AGsrk%v%H0poG?le` z70a}C-!24-I;vD+5Fy9IbK zEK+QmfL>P&)>qJS0bDy!7fg!%_(lk3U$~EK(+WRD=M(vV=H*{c0NPlw2FI_h3I0+o z75P7JkI`4Unf=|F>?`4{U5rhH{$qvYA1h8jZ2vLVUZnix7omXkA*)2Y&JO#Z8{9L%P{AHO zDOZgA($9q5e{WUf15n;PwFi^|YJYd^v<_`Pn@$iH&e*RNH`%odZhdDsB!Gz_dOj<( z0mr+#T=Rjrtg>-xu}#Y!Idy2+ZPnSQAXE*^d1$4MZoAA#o@Mjda?$SN{XSlk^S$Cb zx)t1+2+e?Vrybz;?a`kuJ^1P&!A9E5}~t3o!NZA@xz?B_Pks0W>Pt8RGGE$|J@7GNBKtdX!3J2{=K zL?fbI#-RX?WgUrRG96YQw1NFSe)Q5QpZj1|OiUH!5{1|(+$@y?lTb%qHjWZ8wrC&i z?3h7hu6Ur&yxKzsq<0 zOHfPL{+FQsJLZ=azix@chy?h#n$fz|`fJr@eqKaq6qrg93VwwHOo*_y5Q7q+ONFyb zF{)XxnEa<|twI3Q$B$3>MEtzCOh{r>SDd*ZO|HlEczH1<2WV?wCX$k;#(-25oZix1 zV}KfvCX{ftr+oBkIyl3@BDz-n&4bPfaN5i??t)o8Km&B&4jtO{d!D8tDXzLUtZ zh|Op`FYu2t*L_z5zMn2&C9}(L6@6Ve z0$+Ky=MkzPu+$F@Uz#DTP$1i7%$~tF_~w+j3rwH@-}We_%x9;Q`zI>X(oZ@hzXf=P zCSe%J?w67O6h_T1U%l{>Bhv1D4#YW@SwtR3e5xJ zO-%gMl}JUL;w`?bnW-7y>t-8g563IKKI#Nx@l7Y72ot@tbk_vF2Gi74R#69c+#g5;fBlIt9kx3*ODkXs*Y z35%TamFD?!Z}Uz2ZvjkJnnrsn=FUnI#kXfNK$`@d(0%cr*_%7?3e>jCx#j)`j}ry2 zg84I~yzZJmqOJXkvs;BTKb1FiK73VI7T5z$erZ*C9-qSV2xRTf^J=~ytpT}DS^=uO z^fCF~dj1v-&D4KIL;rt^hKRqSVVH7d`XA8{7Opz`w`d^3pZ!NP=*fRYgI=k(msj{1 zqGLHQ6JEF~NUjE16!4a3qz9K?YryL$YJD~YGT%=|^=Wz70L)cn#{GYx2mWePVK5dj z7XNBfQTu9B`SJgB-~G!)_m58xQ48y@3BkWdMVE$^v$7ichpcIQnzXH-G$9e9zMo%0 zS`e^w97-=Bwt4mj4iU8K(!@~$AZuED-y2lkq*>LZNv&d)E9YHkX<3#`f|R#HwXh`C zw76zjfo|2I{ZaYVUwFQCyw&E!%<=Pia z&ut%rs^^dg1gX=Cp?5e|!+GO!b-jOtg8=9Fb2OL?myYbr*A{=L4KmF$G$X|0B@|RF z^Q9Q}kV8GdZg*YQI|NclmS_Ckt<58dv*)R zeMEiEDAH!oUjd_&V{+bz4tE5)cvxd8rj7Hom+~ry>IYCs+9UY}&t)$&$do(@rmTzA zCdfSZQ`zgH02LMtBv+GhgMfosDS1Abl7o!??BL?!ABIX%Pmn4D);RS`t@Y02Cyu6% z#@_hGi{w#1zZDVYQxVR6h9&UgrgDiYa%_TDE;Lz72jC)Jl-WJS+GM1av&|-MEdwVX zF_taVm6Y(Hc;G7j;vpd)O_DMI=noxraVaoOnR?rN7(q+BsQRl@yu8q6#>Ez~2s@?c zAdBHmWcc!3JWHNIBcr+160*Q9losj&zf>oGXl3a{1|%t|w4{MwzNjnNBLcc@$~f#^ z^d0M&5Cok0G%=^l_c$wQpa+hrEkj~5~cCA%(ei>Ta6 z0$Z|}>5#)kDI9f(CVCId&s*%xllyd5Daa{-mG;|}Bf?cf%+EFbgE3sU5XK*k?Lw{9 zox(KDq;HJakAJrNk1J^z7tW)Vj_>NGzyx;`#SMjRnNw|av5I)#cYTW)QqoQYJ!cL`KQAj?XJuWXW_W(f z1Od&$OV!>Yy7;Bu@B91dxT-=pKd_rkgm0GPz?p{JUxcp_A zi7?yFv7LbqvWonpv}CAqy)^Y#=;7$6_Pm5NhfP|oLU1d zg-z+dui(OqltRe2EkxE*f49ztqVNq_ zPM_D`P_47UQ=yNZj$V0mr0Ol%hpwKtBWc_IBSe!^;&&lehQfiv&M{2(!2QAOrX`1W zSAgD53J9BALCBaM<%v*DfZjehq;J7ai~Fp93fddOH1!LwZgIVPcdW|HK*xHlB9e&o zkN6D!9dt({S$j$jKP_B$l|F)7a&Q8no`B_>_5l8UdXVn2lK24j8#VCb8}@IH#Q{D0 zwEpe5xjvR8Xi~u@^$>IPSsGg#TH$u}fCx^OYS6yiWbp-Bo%Tcmpx;}5tDF}1_1SaK z^Kans=I0TlkOy2t_Hoz|7RY~`EgC^K8_ft*YK}H=*qqGRj+ifa-bi^h>yxfos5;SP zbg6fe-L>&fphz)YJ+du)oiN$SeJs96{x*fpwg%BNt9O!q{J70Qw?G5);l2rH$m1@V z2Fu|}I5{g8Tr$o-4Rzv|SGK!`^ZMus1{PacBl9G3M2I#M+C+z_e(Bp9eXXJnvuVU3 z(yiUeS)U!`*HJ2x*i|vn#okOz%xN7Iv8y76FwYgci60~rZXqf%dk|Q@4psE+dK2TQ z^OO(p(?4y1F6^Ct1oT3hEBhs}bTe5=KSr3dr!bsNIFK)kYg*;a^2N&w_*DIbGej!d zr#Nw37d7}bQ z5c%RgPAVBcAI806MQjj5uT!;%_sdRfN;|el_u04-;iZh&xW%sX$=Sa4d%3PB-?vwB ztao{CeA7j2Uly*l$*Gj9~=cSKqi zyUu9)7rM@6%A8d*m^Ld7!W!9-R-IDt3C^AHvCHG;b;o+f*rA2j9AQfOI7J(z*BHRf z#~1)=#_7W9$)$}KgWx%&6|cy>@N+?ZVp;ftJlxguZRQRQ*sBxFd0Vp?U?hAJ8NP|1 zL8LcGoQbA4XxTF_O9r;bQFQogkz#ov6(&1CmYSsncO$pPNCG0)0W=|s=0M1Af{bk2 zqU9PtCOF1BHkid2C!R@6am9jr2{W(8i8$O1!5X+r=@Vc>?QY8OeNtFLmd(K>+;DzR?a15Z zIAScdB<2ArVfvkI$u=K-gf)Dn$T(g=&c~LUam<{U%nRH(=8h#p^nGa}PG$ zS1G@(QONF+Wps|NKbHxAZ5hpO8Jqr$P4;qrD^6k@7#F+~5EeD&GJ3>{?gsJY#^$_h zjr;D)r0XuQWluE?4 z8~}UZz#!iPy+FSUEiojMYaQL~6qtCK5<9OArz@8V_D;4Ph#c~gI11&Jj4YTdik2(8 zB2ORwVJF)9LTQKT(7=PGzs1q1Q}EDqQj#vs|B)rlQg~XR(W_%0j*jfW-isH+xkeF``ETF7O!}g8nHhcwTgQT|ti%WL@ z$dgllXj5)~#~qaQwA!H5BOom$es_yoQq=4TqsVyJv^gT3K6%XYM7q~JYX2mD_mxm| z+Ye+SezCqD(nS0G7u4*pGL>-NmisS>LH;jjM(}@HrvCf;|j2=HTM%O)iQVQP8B2rTc0sLtWQk#JwYNy`bK&W~lw!s16xRe1Xi3S-` z$T$Y5RF4<`GDGqgga!uFC2IHupT)ucU&TWI1#S4}JK_t#wlFqu{wI-_rK z)*=A_CPre>WK|ymn<>+@0524kO#BwW8XC2%?M*KPhBAP#^Y*u?-R{xP__y=*Vq7PJBV zmdyZ*>00b?WtaBOtu787@pr-?PJc8y=+u!z!mZ=DreHNN?IB2>YUq>x5S!NM823>g zN1i(#7@kx=a5Qk?TJsDlo@Dopomwj@UPf*wB2IP}SI;|7rmXC&f_H1KfjlQq3EjA& z`l3=rfJOnXAXZW7nChxNuARrT`RY?s(O_jE@CwO(iViWq&kXz2un)n$F4Az5c}VN-Tk&dYIGf3-Ayhoe4ds`MdeZv{@ z!5lKFuDfLDd|rnearmehjopmYQKlYI$IR-jObuVs&_<}`-PTW1@wjdnkJvDJe43C2lCyJhF0^8n)JE*J=@8RhGr<@9by+Wy3CY`4n;}+Dn zG4PXQ&urt+evh;mM#X8svWU#ZW$!8dQ)>d3D|}M2UF$-h=a!gvyW2!uNrZCIKu82l z&YC}{U9(8}ETTTmv?7_gxMqf7Hd9FMSJ*jVZ0O^dupkKA(Th)>$of_pC)r>~I=%S4 zLg@ax$q6a9u@yZ^t~lspP<44wfuM40C34Al0CV_-YOclV+~#`ZjjJI~L1MB>a&d?G zRO8nEt|`_p398z7X$RRME!yhlxu&Y^QMTqM@skyp#OgqRT7u`V>m=;XVH!d~ka~?e z9<-lqnCz$u>^ktacpO=_u30bquQUflJHoT_v) z$J?D0x)4X?6I6Q|g=lA=-S0bud`#p%fre=b+!z_H%i0nclE5>}0gZHWbsfi_L--!n zKo^Q$HSbbY$2ABI^6uKjMwayub|4mN{Cfn-q-*o!m$A?0O4`_;jymcDc<1kurEYfm z(?XqhkZ*{Y*cJ;je46BV$7P@Yq6_uc!5s>oBlJJxKK>g_O!AMF{}1kCOC9-|G<9uI zeC|atu&>3&OA$fCHKPmjwdNt1EdJ%I2Wpse9eo^SuL{xW$lJ`c`; zwYplLy_^UF4i(FWT5d(EAZ1`Z4>d}qWKD6eeC<%|7IO2A8`ja|Qrz!Z77#skQ7L!d zuEyzDOD^6ihItgWpE$T~t*=uT>Op9lvdfK6GHRnI)?d`eP{c2I$R6yC z(4niy>tu`PsM>+7J6oR=D&zGpjX~cXMMcW$Npuaxnto&Jj2My3FawtSh|wgQlRpID zlJRh5^DZJG*t#=Ps17#U=&pL@ORgX-6MC>^gL|Y=>?SY+8=Sj1^V}qg@E+Du4K%;L z0}MM~Dg@Mduf~r@3bR51P5Haf*_P^kNh;0*P#S}Ih1c;3*#)XFo&{m!VaW-t3VYgwVfhYcx z0r_{FALfLdnqYS+g+6g3EGVgY>t2PUpm&E#wSnVMVaV}%{k0nPmM^7Bme5WIw9$bI zy-l_1*|EgvowD7c$Cw(#*ATy5vAqOmQYc$2~x=_i$F9%=U-qcB*$uD zgpxSEMxG#eJj})=3BwB-OW&d?L4GfU9fxK*M6P$v6nMui7GHD5Y(`g%p7{2C9PA3< z3J>f2ZFIr_^*;9X0T`e7^}o0_DPZs|(SB8q$X}J?|HU2Xe^ZV89nXx4`y~s)h%{2t z+8U5wN+L>+jVR1H<9<`f$S918@-~`(-lwENCdFRFx=9zOcE1DqB0sDF-49$4B4NhW z^V`kz&)@xlO-6HFo!>Sj2F2}3ohP*<3s12E71f3{TPIQK8-O_N zw2@S<(kDgTY0(XmlI<~ZxNVPU0yhcgWf2$?%PuH87uGm-3uh?<137tb6Lx^P7TUzt z9{FRv3XECEW)Si12-euuddiz0fvTKW$X{xWtS1wsrA913>*+J=crx8zNH+a)=Q*MD z^h({u?O=uq#)43k`0&^=!{v4MKTY7u8+5Ndp+%$nKKh@`A}W~mrLwJtBl1-Yt{M-xN>Gp{<~FNSk`S>pt7t+gGJY!pG$u<{@zEN{ zYERXVty=ROZuSgf=$*rs@|JYJ(!cEKDZZPs3xH4_JzT72aX*i+Z+AJFJ=HA#>;$n# z-NqI-=YcYQg?G+{4>g!# zv;3q6mcP1@?5ApbA?~j{kA-h$fTWUSnMoVcq6z-?lmmhU5x0k z0YN{!FMhb-J^l0L*Pzi|$$s3ae~Cvzsq|Z^X-92m^SNZr z3hLeHU1gUlrQ4FtwBx1edYyO2uB%}vz4*PR$?~6BDz0QL`eeL{#d5Z{CeiiHw$Dzo zjPac4TT?$824+l9;C+rv1-FJ>Vw-K(aP*EtL|F&(`Rb13?I+{dpY)S=7FQF$ljg>E zb|{M%;}7?vkW!~yf7t%XzFdNK3-9c;H@kldQ~{^UCKJpVjEgyoVa~lkoVYIrr}Nof zJ`qn5t)oM#qr_~Yi!aMwOfo&78M@ud-mt@eJXG(=FU!I!Z3dA7O+1O}8#XPtTvQfI z7&G4P?#UCB(H<;~u8~%*HQ2-EV_@{J08#o}uDWQx*K+2{WUR%_tiGC=sNr zeo<-jAh)RT%x@)(JhbWM$fG_s z8+XM&XoNX&Ij!+@ku+M>?s3gL*}6}N_@NX2y<`*Iu&UT7VavKl_H_L!ft<%C=p;Z%kq)5M=CCu6|N-|n3sX$)Bn2j{#6);Kmbe7HM_$wJrHwUc~!^|U(bnUp~ zQ=gwdyyp28{$!`k8cHCzRzx^WW!}?XKWEu-{(1fR@rNDg^@cErLYmW9DAYi-nvW7v z3ZWS{6KQXBY>^dw8GRBk6UzD9M+l*YsuimrVZ(Be%Ucqm1>L(H+2A+wu#Ln$7N<8` z5bcXLRL)42s5fxU*scq>p7ITVr%fe>USdoynLy8CP|ZQCZ@KWGhWbSms^jJtQg^T& z^-FZXHPuVDfRm!r!&oJ&TmL9WJ83RLda*4jbGprWb8q{8Lzy&P)$v#>vw89**em?J zJp$~5NJzE$a-*;)GdXH?Xm?&EYg%jkzDNJK#F(ogSH==^81nPE`P68kO9ed}8It&& z-(3it62X*=+{qHB4e>x$a-Oy1M5IMBQP2A?&w;?WWZdedOe15Ig7*0lAs@D%E5<9J zM;rS7>XFCK(HQ1nhmWd+GSXJXj0qFw(Q&M(1FKH$mn+}@G@7OwFPa^&xqxR<21cJz z?k<~|IZvc6$%svmC}!utZOW3sO5H8$Bq5-z$nP=(oAlpD^k%DY$?NYs(*OE(z}sZi z=JjXd@o@z48L!xH$r2JIFQ5)=oxxH%Jw2g;;@N)4Mhd{H?e4DVc88%9SzJODNTKS` zNA!!OA=-->te$N7nkHhq+tPuWHmqvNP6dd0bgcpw@A+a1Qg8N(RZ}53Wza#OxbhIr z>|UAu;el~e_S7^z;9@>Sk4Y&Q6${&pMG7CvIz|FB;CoX3`Q&$wqzjm(vFq zrF35XbtZ2UPh)Ub;fen8Ggb&XtyK%t!lOGBi7271kCXBMqarACaSbkbqJkg?2XtV1 z@l{0$3VACjA{%ru-Mc3>7(FTTkVa+6mdh-!=c}UK2CoS2*Ul`T4Xj^Bm5EayL=kR` zf?kEv=oq*4Fz~2UC@U3vBoHc@$pgTdinp1#-7y_hTZ4#TPoMOx>bXuu>CB_FLKB$m z+8_JLNlhft1m!QtzLk44q9^&ECGMp!(7xq+W-o2wEjLe^MMkif2Sb_H_+-h}J83Om9uG|^aO*Lw=f_%%Wdt*|hDRm{W5>>}(w8$!>W~Pn5%LYaM z76~;*>}qRDX2r=vRAx{dWhKg0VnTe7I$nHCo)BN#~X=BU35}eUJH}S4K$L(vn%^l9;hA=l4} zN^rTtaZ=q*)fQ=)bnC{In(yT~OPLF3IYu-l3K}>#WzFhq>jgzkmc3s#uS5gM=#1JX zT70nYt^<&>OiS@>3yN(MAk!ZVmD7sCz0M^|=4CD=DE^P45^`L-Y}j1>b8F#2W7cFsi@G>)mZuK_WCIHnHUc8?-4RKt zM*AyMp9qYjIWR=9jF!Jgz==b-C^mRet}i_O)}~0o0GtbWF!pdyOAgAOfw#@=SIs*| zy(niGvkWoCyKb}Yd9T0=&wCN(nu7N}lJNPcyif{v^NA}1Jw!;;Uu}XS1t&ug4nUWC zgw5eXCuq|JVh=<_e;nj-hhg`?d4#f&7ZRug-rbWG*>XXI{DMOt($ilYu0M&f-ID1+TWHr5!h@pTu<%CFzj1_+kOfZjkCm{_v?k_Cm z7gXnhypEqQVQMjvfQaM~v$J+g@LqtsL3-C2pd)BRRXjue0MbfcI|ivHC+=YnS?;$V z5ljs|^@R708nUGgY=gM@r(gS8@NcnC7#g&l#!+iDh_dP(N(XeWAPtbBJfOodki=9( zQWApHZnv#HTzlY7Axe(L!}IHtyT@zHs|(%1sg6=uq+Wh0!4XjXxGk~@A)sX)AcreA z`LPi!!6up{WDJ2Q*d0_FS$nmVjr;_9R{VFyX^cY2Z>7d%w}O}GokRpfd^cG9Gg{k2 z)v$=QUKAg(r$c`0PTlvqSi@=x^tOWNEvX+ZQvIFil!ctj%#AL@_cv(MbQn|d;Ajcw z=V`{MAMd0bQp-z2@0m|mWGA-SE-D@xN{~Y3#P{fbwv6}=GLRx0%tC|9H}F#l+jvL7 z9Tr`*;hE^(S=u?=W;QrpRmiV-C)>Q-K$je@RyS|-{^FOGmpuwz{6|1U@I??}df za0C;wU(+^~ySpIy|Ktd4d8DMFECu)e;s{u(X%VnYe_heU>D})@z9NiW`0lSbfw?VN;qCMV z^3SOft}6+Bw?VVlI!tLk+G2Dw9iH=)qh&@HU&47Op@#L>o{j;DnMyo564cVf{^Os2 zL--+-yA~CxV$`mb*S_3{gb421eLBjy<2n`}rdO%)8t8awbtsc|;%rB6$AwXX&McQvJhxp|2xCx-Z-vU>`{PxU*R5pB}-hjnKwgNqA4ag18) zd&TrnE6D2?M}UeXZa?_N5r8R*J9Q6gIQE91roqdRKZKLx`?m{Z02`--ZLs2dUr;W%!~y{tDnJA?6xii z`C`#lpMkKSpNY*BHtKwOv>y*Tn`R1I zNi(V^itK1T;jh%6`&-Usc3E0!jtLmd_tErEDq&LO*fFfMw_2@|q!`9^_+M74W!RrbAK#0n5j{#v7_OiyjpZ&AlfsR(P^RU%HB_rf z(c188!A5?g3SuYIUHYv^$g{lckYsRNnd)|#OG#OTf|E7=JLc5nC81Q8wu*RUN!fSUhO$TmLQE+o=qKCa zvEEa=kG+-#;*~dA9hh}Irs8(p7JGF#EFqIU9sEjKg!%OWR^95w&5ymX^ua_e7NDA= zY<##yb{g1cDL|WO?XiRSo)xoZv=V0R@>JjW1AIjHP~!h&WfG**8gIaqeqB!iM5WJ65_yJ;uoxJv^1s!?+L97oa)faV2J)wn=!m>GVET?}&#>>g;@z=PJs?rw&LDaLl*v!cp+JkXr@(!#E z(1G?2`R%LY`%|1(96Y4V{hJ5w2-GTu0^E9;{2K$SQ)Ie$+y#n3h`2gAQ3!O6dVOL- z5rjCgBbtg3R)M>}=9wOj#Gr#82eGmPo(i$@!V`48EFk&uzmRiz@}H5HUm553bx@-H zTjnXcSpP%0KUnT>X0Sd^>6KyF1zEwEG>Yx&TF|--v6!54I2FGbalNcv59={T^%`y< zUkV0wVCQi;7?=^aMi}(A337mJ?aAzk8PGULA98e*FnDGG&|Q^`-a2Jb#F=JMkDfy{ zo>eJ;>q-}0kIRd6hIElAmhoi8cVs4`X|{YVL9+sBRN|3O@tn-rAvR3mr@K_SW6It9 z&G?FTV}eArOK(eebf)`D?vd973$6}w=VObHS}6UUGey;?McrX~=mDK^Lk)*r=#;9y zj^zn9^m_Eujq{oRv+KFjY5P}14&MhFa#kr8uw`Dz+k&*-{OLI` zRY3?y>4m|{#9~O>1JpnPT+Hdhd4Z4iB&0cCzSyDLu|~`{k>mI z_R(?6%1auMPewOtuGuLk0dLJbtoBcZl4}Ta8lRZmSFU$Lfh28;>)li+`TlAec2Y3eujNsl6w8oP1DV^x)p)J81?d)%6tck` zWt#L<0-2FEI-Jc_liNtqg7oBL0mb<^K+cu2r-)2O+Srl^GZ`)}`q{OryCjT)kWra7 z)4Ev>G8Z;0lc5E3I_oqebDOYgL0z6iG+(8!JEhcde5$nOS`267W9v-bAB`-8?lp64 zkckGv?Tuw6%iZ5ugJd zBZ`UAN9_llh4-PYYZf_P`*G7*(~o*}XB?O24&{$#`rr7RTrkE>y&U|cUP2H=J#Cw?pacVW$B9hXou8H>gD{|Th?=^JSO(A8a?uBOM71t6!gT~m;~dt; zPK>IH2?pKiV;j?Ld@VaNEo-@GoJ|QX7do|G{Z#Ir-#DR+m;DULQ)~%S!nj|$c z3E(h$Ao59jamTlr;asqsS!Ka!%Xc1TIRVkMo3nn`LaK zcHjdynl)xhf~R8*l&I|a!9Gh1@t*M!`243cplyM)7Jc63&tR_HDf7V{@Et|Jq)zCX zHqWeWah-m$P3^cqsKv^7Iib`^Z`^|I46k#|kIhE;Wo>|}=<#{_`V3DxMnHK$nn{^< ze%7MvVKUhsV-%oF%gns}XrAJZpTt4v-U?WVdKm;898&TK!eurXjx$iz!2&&{-D6d4 zUIZ?MsnVb|(tvgV9ZrqOTE8`X*AifbS#8o9z3U0U!E9!*HffDBz!^Z;%E^FlUj(^W zpmS}D(78IAv!&Y0hPsVvPyObMP8FN3J<8% zzm9R>I~{5X>Ro(ScUPt)XFD#J>*Bu=wC}s!i-t_jfT3b2mNS8g?D9^;IpEzL} z&cUDqR6L}wNt_DMT8a;oipWJIk~yCJ9p9k2(6{G1b95K}twA74%CVI*cs!1L%;R@< zZhi3UXqOmP4h`mYgIU8M{?FpfDC8?rIVFxcsjV+>P`-*WA&ei-DX>RI;&h0o52WER z@1v*jF2%-=q5>5J+BtsaIw1-v81^2QO}A^>j2D>^ZH);E_qjC+Rv>AJ{QSQDUgnlg z2b_1x?3+TnM`vUewB{}Fc6FMON}J|)_?Ncno&0w+9>lNDf{s8++?nIM3<3qWxKb)C zx=U6&)-0MY9w0JBN;A5Fic!2#Lo6Wf@RrMlgJhAbFx@u#7kxT+qSzAaefGT7+3bF1 z)U7T4T_I$-HP}9^jo{u|eO>Suye#mSB?a12+_gmPVMS@sM=)<|$RKnKZKXnqWGgoF z42X1X9u5a6?I&<&!Wp6y!nr%CAj6kKJis{PTJ3rLQ2dhBJn+aBT#3|cz+9Cn0E5f& z^qgE6;dx|qv8OqOjS#URdja~W(Rp#puWl`y80{U$!#bfrYmu$+{=aGNS;P*13m0D=%fPK4E2XMXFeA_op^*#bz0 zbx1}-#Nms9ldiva{)6ZW_fUw8!PY;Z7zcXe%8|Tw^7b z>?@aJ?7R&HxUGDLf�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 TY(h;@!?}i$7z!3V8^-w`q)kqw literal 0 HcmV?d00001 diff --git a/group20/1107837739/1107837739Learning/src/org/korben/Main.java b/group20/1107837739/1107837739Learning/src/org/korben/Main.java new file mode 100644 index 0000000000..671f67a9a7 --- /dev/null +++ b/group20/1107837739/1107837739Learning/src/org/korben/Main.java @@ -0,0 +1,8 @@ +package org.korben; + +public class Main { + + public static void main(String[] args) { + System.out.println("Hello Korben : )"); + } +} diff --git a/group20/1107837739/1107837739Learning/src/org/korben/list/KArrayList.java b/group20/1107837739/1107837739Learning/src/org/korben/list/KArrayList.java new file mode 100644 index 0000000000..4d6236b537 --- /dev/null +++ b/group20/1107837739/1107837739Learning/src/org/korben/list/KArrayList.java @@ -0,0 +1,169 @@ +package org.korben.list; + +import java.util.Objects; + +/** + * Korben's ArrayList + * + * Created by Korben on 18/02/2017. + */ +public class KArrayList implements KList { + + private int size; + private Object[] dataArray = new Object[0]; + + @Override + public int size() { + return this.size; + } + + @Override + public boolean isEmpty() { + return this.size == 0; + } + + @Override + public boolean contains(Object o) { + for (Object obj : dataArray) { + if (Objects.equals(obj, o)) { + return true; + } + } + return false; + } + + @Override + @SuppressWarnings("unchecked") + public Object[] toArray() { + Object[] array = new Object[size]; + System.arraycopy(dataArray, 0, array, 0, size); + return array; + } + + @Override + public boolean add(T o) { + ensureCapacity(size + 1); + dataArray[size] = o; + size++; + return true; + } + + @Override + public boolean remove(T o) { + int index = indexOf(o); + if (index < 0) { + return false; + } + + System.arraycopy(dataArray, index + 1, dataArray, index, size - 1 - index); + dataArray[size - 1] = null; + + size--; + + return true; + } + + @Override + public void clear() { + for (int i = 0; i < size; i++) { + dataArray[i] = null; + } + size = 0; + } + + @Override + @SuppressWarnings("unchecked") + public T get(int index) { + if (index < -1 || index >= size) { + throw new IndexOutOfBoundsException(); + } + + return (T) dataArray[index]; + } + + @Override + public T set(int index, T element) { + if (index < -1 || index >= size) { + throw new IndexOutOfBoundsException(); + } + + dataArray[index] = element; + + return element; + } + + @Override + public void add(int index, T element) { + if (index < -1 || index > size) { + throw new IndexOutOfBoundsException(); + } + + ensureCapacity(size + 1); + + System.arraycopy(dataArray, index, dataArray, index + 1, size - index); + + dataArray[index] = element; + size++; + } + + @Override + @SuppressWarnings("unchecked") + public T remove(int index) { + if (index < -1 || index >= size) { + throw new IndexOutOfBoundsException(); + } + + T removeData = (T) dataArray[index]; + System.arraycopy(dataArray, index + 1, dataArray, index, size - 1 - index); + dataArray[size - 1] = null; + size--; + return removeData; + } + + @Override + public int indexOf(T o) { + for (int i = 0; i < size; i++) { + if (Objects.equals(o, dataArray[i])) { + return i; + } + } + return -1; + } + + @Override + public KIterator iterator() { + return new ArrayListIterator(this); + } + + private void ensureCapacity(int minCapacity) { + if (minCapacity > dataArray.length) { + int newCapacity = Math.max(minCapacity, dataArray.length * 2); + Object[] newDataArray = new Object[newCapacity]; + System.arraycopy(dataArray, 0, newDataArray, 0, dataArray.length); + + dataArray = newDataArray; + } + } + + private class ArrayListIterator implements KIterator { + private int position; + private KArrayList list; + + ArrayListIterator(KArrayList list) { + this.list = list; + } + + @Override + public boolean hasNext() { + return position < list.size(); + } + + @Override + public T next() { + if (hasNext()) { + return list.get(position++); + } + return null; + } + } +} diff --git a/group20/1107837739/1107837739Learning/src/org/korben/list/KIterator.java b/group20/1107837739/1107837739Learning/src/org/korben/list/KIterator.java new file mode 100644 index 0000000000..c29e566178 --- /dev/null +++ b/group20/1107837739/1107837739Learning/src/org/korben/list/KIterator.java @@ -0,0 +1,10 @@ +package org.korben.list; + +/** + * Created by Korben on 24/02/2017. + */ +public interface KIterator { + boolean hasNext(); + + T next(); +} diff --git a/group20/1107837739/1107837739Learning/src/org/korben/list/KLinkedList.java b/group20/1107837739/1107837739Learning/src/org/korben/list/KLinkedList.java new file mode 100644 index 0000000000..e14efad19c --- /dev/null +++ b/group20/1107837739/1107837739Learning/src/org/korben/list/KLinkedList.java @@ -0,0 +1,172 @@ +package org.korben.list; + +import java.util.Objects; + +/** + * Korben's LinkedList + * + * Created by Korben on 18/02/2017. + */ +public class KLinkedList implements KList { + + private int size; + + private Node head; + + private Node last; + + public KLinkedList() { + this.head = new Node<>(null); + } + + @Override + public int size() { + return this.size; + } + + @Override + public boolean isEmpty() { + return this.size == 0; + } + + @Override + public boolean contains(Object o) { + Node node = this.head; + while (node.next != null) { + node = node.next; + if (Objects.equals(node.data, o)) { + return true; + } + } + return false; + } + + @Override + public Object[] toArray() { + return new Object[0]; + } + + @Override + public boolean add(T o) { + if (this.last == null) { + this.last = new Node<>(o); + this.last.pre = this.head; + this.head.next = this.last; + } else { + Node oldLast = this.last; + this.last = new Node<>(o); + this.last.pre = oldLast; + oldLast.next = this.last; + } + this.size++; + return true; + } + + @Override + public boolean remove(T o) { + Node node = this.head; + while (node.next != null) { + node = node.next; + if (Objects.equals(node.data, o)) { + node.pre.next = node.next; + if (node.next != null) { + node.next.pre = node.pre; + } + this.size--; + return true; + } + } + return false; + } + + @Override + public void clear() { + this.head.next = null; + this.last = null; + + this.size = 0; + } + + @Override + public T get(int index) { + return getNode(index).data; + } + + @Override + public T set(int index, T element) { + Node node = getNode(index); + node.data = element; + return element; + } + + @Override + public void add(int index, T element) { + Node node = this.head; + for (int i = 0; i <= index; i++) { + node = node.next; + } + Node pre = node.pre; + Node newNode = new Node<>(element); + pre.next = newNode; + newNode.pre = pre; + newNode.next = node; + node.pre = newNode; + + this.size++; + } + + @Override + public T remove(int index) { + Node node = getNode(index); + Node pre = node.pre; + Node next = node.next; + pre.next = next; + if (next != null) { + next.pre = pre; + } + + this.size--; + return node.data; + } + + @Override + public int indexOf(T o) { + Node node = this.head; + int index = 0; + while (node.next != null) { + node = node.next; + if (Objects.equals(node.data, o)) { + return index; + } + index++; + } + return -1; + } + + @Override + public KIterator iterator() { + throw new IllegalStateException("方法未实现"); + } + + private Node getNode(int index) { + if (index < 0 || index >= size) { + throw new IndexOutOfBoundsException(); + } + + Node node = this.head; + for (int i = 0; i <= index; i++) { + node = node.next; + } + return node; + } + + private static class Node { + T data; + Node pre; + Node next; + + Node(T data) { + this.data = data; + } + } +} diff --git a/group20/1107837739/1107837739Learning/src/org/korben/list/KList.java b/group20/1107837739/1107837739Learning/src/org/korben/list/KList.java new file mode 100644 index 0000000000..e5d33b984b --- /dev/null +++ b/group20/1107837739/1107837739Learning/src/org/korben/list/KList.java @@ -0,0 +1,35 @@ +package org.korben.list; + +/** + * Korben's List + * + * Created by Korben on 18/02/2017. + */ +public interface KList { + + int size(); + + boolean isEmpty(); + + boolean contains(Object o); + + Object[] toArray(); + + boolean add(T o); + + boolean remove(T o); + + void clear(); + + T get(int index); + + T set(int index, T element); + + void add(int index, T element); + + T remove(int index); + + int indexOf(T o); + + KIterator iterator(); +} diff --git a/group20/1107837739/1107837739Learning/src/org/korben/list/KListIteratorTest.java b/group20/1107837739/1107837739Learning/src/org/korben/list/KListIteratorTest.java new file mode 100644 index 0000000000..994538732f --- /dev/null +++ b/group20/1107837739/1107837739Learning/src/org/korben/list/KListIteratorTest.java @@ -0,0 +1,36 @@ +package org.korben.list; + +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; + +/** + * Iterator测试 + * + * Created by Korben on 24/02/2017. + */ +public class KListIteratorTest { + + private KList list; + + @Before + public void init() { + this.list = new KArrayList<>(); + + for (int i = 0; i < 5; i++) { + list.add(i); + } + } + + @Test + public void testIterator() { + KIterator iterator = list.iterator(); + Assert.assertTrue(iterator.hasNext()); + int count = 0; + while (iterator.hasNext()) { + int value = iterator.next(); + Assert.assertEquals(count, value); + count++; + } + } +} diff --git a/group20/1107837739/1107837739Learning/src/org/korben/list/KListTest.java b/group20/1107837739/1107837739Learning/src/org/korben/list/KListTest.java new file mode 100644 index 0000000000..ed3055b74e --- /dev/null +++ b/group20/1107837739/1107837739Learning/src/org/korben/list/KListTest.java @@ -0,0 +1,142 @@ +package org.korben.list; + +import java.util.Objects; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; + +/** + * KList测试 + * + * Created by Korben on 18/02/2017. + */ +public class KListTest { + + private KList list; + + private int initTestSize; + + @Before + public void init() { + // 测试KArrayList + //list = new KArrayList<>(); + + // 测试KLinkedList + list = new KLinkedList<>(); + + initTestSize = 5; + + for (int i = 0; i < initTestSize; i++) { + list.add(i); + } + } + + @Test + public void size() throws Exception { + Assert.assertEquals(initTestSize, list.size()); + } + + @Test + public void isEmpty() throws Exception { + Assert.assertFalse(list.isEmpty()); + + KList list = new KArrayList<>(); + Assert.assertTrue(list.isEmpty()); + } + + @Test + public void contains() throws Exception { + Assert.assertTrue(list.contains(1)); + Assert.assertFalse(list.contains(5)); + } + + @Test + public void toArray() throws Exception { + //Object[] array = list.toArray(); + //Assert.assertEquals(initTestSize, array.length); + //for (int i = 0; i < array.length; i++) { + // Assert.assertEquals(i, array[i]); + //} + } + + @Test + public void add() throws Exception { + Assert.assertTrue(list.add(6)); + Assert.assertTrue(list.contains(6)); + Assert.assertEquals(initTestSize + 1, list.size()); + } + + @Test + public void remove() throws Exception { + Assert.assertEquals(0, list.remove(0).intValue()); + Assert.assertEquals(initTestSize - 1, list.size()); + Assert.assertFalse(list.contains(0)); + } + + @Test + public void clear() throws Exception { + list.clear(); + Assert.assertTrue(list.isEmpty()); + Assert.assertTrue(list.size() == 0); + } + + @Test + public void get() throws Exception { + for (int i = 0; i < initTestSize; i++) { + Assert.assertTrue(Objects.equals(i, list.get(i))); + } + } + + @Test + public void set() throws Exception { + for (int i = 0; i < initTestSize; i++) { + list.set(i, initTestSize); + Assert.assertEquals(initTestSize, list.get(i).intValue()); + } + } + + @Test + public void addByIndex() throws Exception { + // test add by first index + list.add(0, 6); + Assert.assertEquals(initTestSize + 1, list.size()); + Assert.assertEquals(6, list.get(0).intValue()); + for (int i = 0; i < initTestSize; i++) { + Assert.assertEquals(i, list.get(i + 1).intValue()); + } + + // test add by last index + init(); + list.add(initTestSize - 1, 6); + Assert.assertEquals(initTestSize + 1, list.size()); + Assert.assertEquals(initTestSize - 1, list.get(initTestSize).intValue()); + Assert.assertEquals(6, list.get(initTestSize - 1).intValue()); + for (int i = 0; i < initTestSize - 1; i++) { + Assert.assertEquals(i, list.get(i).intValue()); + } + + // test add by middle index + init(); + list.add(3, 90); + Assert.assertEquals(initTestSize + 1, list.size()); + Assert.assertEquals(list.get(0).intValue(), 0); + Assert.assertEquals(list.get(1).intValue(), 1); + Assert.assertEquals(list.get(2).intValue(), 2); + Assert.assertEquals(list.get(3).intValue(), 90); + Assert.assertEquals(list.get(4).intValue(), 3); + Assert.assertEquals(list.get(5).intValue(), 4); + } + + @Test + public void removeByObject() throws Exception { + Assert.assertTrue(list.remove(new Integer(3))); + Assert.assertEquals(initTestSize - 1, list.size()); + } + + @Test + public void indexOf() throws Exception { + for (int i = 0; i < initTestSize; i++) { + Assert.assertEquals(i, list.indexOf(i)); + } + } +} diff --git a/group20/1107837739/1107837739Learning/src/org/korben/queue/KArrayQueue.java b/group20/1107837739/1107837739Learning/src/org/korben/queue/KArrayQueue.java new file mode 100644 index 0000000000..3e975058f4 --- /dev/null +++ b/group20/1107837739/1107837739Learning/src/org/korben/queue/KArrayQueue.java @@ -0,0 +1,111 @@ +package org.korben.queue; + +import java.util.NoSuchElementException; + +/** + * Created by Korben on 18/02/2017. + */ +public class KArrayQueue implements KQueue { + + private int size; + private Object[] dataArray = {}; + private int front = 0; + private int end = -1; + + public KArrayQueue() { + + } + + @Override + public boolean add(T t) { + ensureCapacity(size + 1); + dataArray[end + 1] = t; + end++; + size++; + return true; + } + + @Override + public boolean offer(T t) { + ensureCapacity(size + 1); + dataArray[end + 1] = t; + end++; + size++; + return true; + } + + @Override + @SuppressWarnings("unchecked") + public T remove() { + if (end == -1) { + throw new NoSuchElementException(); + } + T value = (T) dataArray[front]; + dataArray[front] = null; + size--; + front++; + if (front == dataArray.length) { + front = 0; + } + if (size == 0) { + end = -1; + } + + return value; + } + + @Override + @SuppressWarnings("unchecked") + public T poll() { + if (end == -1) { + return null; + } + T value = (T) dataArray[front]; + dataArray[front] = null; + size--; + front++; + if (front == dataArray.length) { + front = 0; + } + + return value; + } + + @Override + @SuppressWarnings("unchecked") + public T element() { + if (end == -1) { + throw new NoSuchElementException(); + } + return (T) dataArray[front]; + } + + @Override + @SuppressWarnings("unchecked") + public T peek() { + if (end == -1) { + return null; + } + return (T) dataArray[front]; + } + + private void ensureCapacity(int minSize) { + if (end == -1) { + dataArray = new Object[8]; + } else if (minSize >= dataArray.length) { + int newLength = dataArray.length * 2; + Object[] newDataArray = new Object[newLength]; + if (front != 0) { + System.arraycopy(dataArray, front, + newDataArray, newLength - dataArray.length + front, + dataArray.length - 1 - front); + + front += newLength - dataArray.length; + } else { + System.arraycopy(dataArray, front, newDataArray, front, size); + } + + dataArray = newDataArray; + } + } +} diff --git a/group20/1107837739/1107837739Learning/src/org/korben/queue/KQueue.java b/group20/1107837739/1107837739Learning/src/org/korben/queue/KQueue.java new file mode 100644 index 0000000000..14763efd99 --- /dev/null +++ b/group20/1107837739/1107837739Learning/src/org/korben/queue/KQueue.java @@ -0,0 +1,20 @@ +package org.korben.queue; + +/** + * Korben's Queue Interface + * + * Created by Korben on 18/02/2017. + */ +public interface KQueue { + boolean add(T t); + + boolean offer(T t); + + T remove(); + + T poll(); + + T element(); + + T peek(); +} diff --git a/group20/1107837739/1107837739Learning/src/org/korben/queue/KQueueTest.java b/group20/1107837739/1107837739Learning/src/org/korben/queue/KQueueTest.java new file mode 100644 index 0000000000..3d9557748f --- /dev/null +++ b/group20/1107837739/1107837739Learning/src/org/korben/queue/KQueueTest.java @@ -0,0 +1,78 @@ +package org.korben.queue; + +import java.util.NoSuchElementException; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; + +/** + * KQueue Test + * + * Created by Korben on 19/02/2017. + */ +public class KQueueTest { + private KQueue queue; + + @Before + public void init() { + queue = new KArrayQueue<>(); + } + + @Test + public void add() throws Exception { + for (int i = 0; i < 5; i++) { + queue.add(i); + } + } + + @Test + public void offer() throws Exception { + for (int i = 0; i < 100; i++) { + queue.offer(i); + } + } + + @Test(expected = NoSuchElementException.class) + public void remove() throws Exception { + for (int i = 0; i < 9; i++) { + queue.add(i); + } + for (int i = 0; i < 9; i++) { + Assert.assertEquals(i, queue.remove().intValue()); + } + queue.remove(); + } + + @Test + public void poll() throws Exception { + for (int i = 0; i < 5; i++) { + queue.add(i); + } + for (int i = 0; i < 5; i++) { + Assert.assertEquals(i, queue.poll().intValue()); + } + Assert.assertNull(queue.poll()); + } + + @Test(expected = NoSuchElementException.class) + public void element() throws Exception { + for (int i = 0; i < 5; i++) { + queue.add(i); + Assert.assertEquals(queue.element().intValue(), 0); + } + init(); + + queue.element(); + } + + @Test + public void peek() throws Exception { + for (int i = 0; i < 5; i++) { + queue.add(i); + Assert.assertEquals(queue.peek().intValue(), 0); + } + init(); + + Assert.assertNull(queue.peek()); + } +} diff --git a/group20/1107837739/1107837739Learning/src/org/korben/stack/KStack.java b/group20/1107837739/1107837739Learning/src/org/korben/stack/KStack.java new file mode 100644 index 0000000000..8dc39e4efd --- /dev/null +++ b/group20/1107837739/1107837739Learning/src/org/korben/stack/KStack.java @@ -0,0 +1,72 @@ +package org.korben.stack; + +import java.util.EmptyStackException; +import java.util.Objects; + +/** + * Korben's Stack + * + * Created by Korben on 18/02/2017. + */ +public class KStack { + + private int size; + private Object[] dataArray = {}; + + public KStack() { + } + + public int size() { + return size; + } + + public T push(T item) { + ensureCapacity(size + 1); + this.dataArray[size] = item; + this.size++; + return item; + } + + @SuppressWarnings("unchecked") + public T pop() { + if (size == 0) { + throw new EmptyStackException(); + } + + T data = (T) this.dataArray[size - 1]; + this.dataArray[size - 1] = null; + this.size--; + return data; + } + + @SuppressWarnings("unchecked") + public T peek() { + if (size == 0) { + throw new EmptyStackException(); + } + return (T) dataArray[size - 1]; + } + + public boolean empty() { + return size == 0; + } + + public synchronized int search(Object o) { + for (int i = 0; i < size; i++) { + if (Objects.equals(o, dataArray[i])) { + return i; + } + } + return -1; + } + + private void ensureCapacity(int minCapacity) { + if (minCapacity > dataArray.length) { + int newCapacity = Math.max(minCapacity, dataArray.length * 2); + Object[] newDataArray = new Object[newCapacity]; + System.arraycopy(dataArray, 0, newDataArray, 0, dataArray.length); + + this.dataArray = newDataArray; + } + } +} diff --git a/group20/1107837739/1107837739Learning/src/org/korben/stack/KStackTest.java b/group20/1107837739/1107837739Learning/src/org/korben/stack/KStackTest.java new file mode 100644 index 0000000000..e3f173eb3f --- /dev/null +++ b/group20/1107837739/1107837739Learning/src/org/korben/stack/KStackTest.java @@ -0,0 +1,71 @@ +package org.korben.stack; + +import java.util.EmptyStackException; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; + +/** + * KStack测试 + * + * Created by Korben on 18/02/2017. + */ +public class KStackTest { + private KStack stack; + private int initTestSize; + + @Before + public void init() { + stack = new KStack<>(); + initTestSize = 5; + + for (int i = 0; i < initTestSize; i++) { + stack.push(i); + } + } + + @Test + public void size() throws Exception { + Assert.assertEquals(initTestSize, stack.size()); + } + + @Test + public void push() throws Exception { + stack.push(9); + } + + @Test(expected = EmptyStackException.class) + public void pop() throws Exception { + for (int i = 0; i < initTestSize; i++) { + Integer value = stack.pop(); + Assert.assertEquals(value.intValue(), initTestSize - 1 - i); + } + + stack.pop(); + } + + @Test(expected = EmptyStackException.class) + public void peek() throws Exception { + Assert.assertEquals(initTestSize - 1, stack.peek().intValue()); + for (int i = 0; i < initTestSize; i++) { + stack.pop(); + } + stack.peek(); + } + + @Test + public void empty() throws Exception { + Assert.assertFalse(stack.empty()); + for (int i = 0; i < initTestSize; i++) { + stack.pop(); + } + Assert.assertTrue(stack.empty()); + } + + @Test + public void search() throws Exception { + for (int i = 0; i < initTestSize; i++) { + Assert.assertEquals(i, stack.search(i)); + } + } +} \ No newline at end of file diff --git a/group20/1107837739/1107837739Learning/src/org/korben/tree/BinaryTreeNode.java b/group20/1107837739/1107837739Learning/src/org/korben/tree/BinaryTreeNode.java new file mode 100644 index 0000000000..30c613edd0 --- /dev/null +++ b/group20/1107837739/1107837739Learning/src/org/korben/tree/BinaryTreeNode.java @@ -0,0 +1,127 @@ +package org.korben.tree; + +/** + * Korben's BinaryTreeNode + * + * Created by Korben on 21/02/2017. + */ +public class BinaryTreeNode { + + private T data; + private BinaryTreeNode left; + private BinaryTreeNode right; + private int size; + + public T getData() { + return data; + } + + public void setData(T 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; + } + + @SuppressWarnings("unchecked") + public BinaryTreeNode insert(T data) { + if (this.data == null) { + this.data = data; + return this; + } + int compareResult = this.data.compareTo(data); + if (compareResult > 0) { + if (this.left == null) { + this.left = new BinaryTreeNode(); + this.left.data = data; + return this.left; + } else { + return this.left.insert(data); + } + } else if (compareResult < 0) { + if (this.right == null) { + this.right = new BinaryTreeNode(); + this.right.data = data; + return this.right; + } else { + return this.right.insert(data); + } + } else { + return this; + } + } + + @SuppressWarnings("unchecked") + public BinaryTreeNode delete(T data) { + BinaryTreeNode treeNode = search(data); + if (treeNode == null) { + return null; + } + int compareResult = this.data.compareTo(data); + if (compareResult > 0) { + return this.left.delete(data); + } else if (compareResult < 0) { + return this.right.delete(data); + } else { + if (treeNode.right == null) { + if (this.left == null) { + this.data = null; + } else { + this.left = this; + } + } else { + this.data = (T) this.right.findMin().data; + + this.right.delete(this.data); + } + } + + return this; + } + + private BinaryTreeNode findMin() { + if (this.data == null) { + return null; + } + if (this.left == null) { + return this; + } + return this.left.findMin(); + } + + @SuppressWarnings("unchecked") + public BinaryTreeNode search(T data) { + if (this.data == null) { + return null; + } + int compareResult = this.data.compareTo(data); + if (compareResult > 0) { + if (this.left == null) { + return null; + } else { + return this.left.search(data); + } + } else if (compareResult < 0) { + if (this.right == null) { + return null; + } else { + return this.right.search(data); + } + } else { + return this; + } + } +} \ No newline at end of file diff --git a/group20/1107837739/1107837739Learning/src/org/korben/tree/BinaryTreeNodeTest.java b/group20/1107837739/1107837739Learning/src/org/korben/tree/BinaryTreeNodeTest.java new file mode 100644 index 0000000000..a6fb4ed4e9 --- /dev/null +++ b/group20/1107837739/1107837739Learning/src/org/korben/tree/BinaryTreeNodeTest.java @@ -0,0 +1,59 @@ +package org.korben.tree; + +import org.junit.Assert; + +/** + * Korben's BinaryTreeNode Test + * + * Created by Korben on 21/02/2017. + */ +public class BinaryTreeNodeTest { + + private BinaryTreeNode treeNode; + + @org.junit.Before + public void setUp() throws Exception { + treeNode = new BinaryTreeNode<>(); + treeNode.insert(5); + treeNode.insert(3); + treeNode.insert(7); + treeNode.insert(1); + treeNode.insert(4); + treeNode.insert(2); + treeNode.insert(8); + treeNode.insert(6); + } + + @org.junit.Test + public void insert() { + Assert.assertEquals(treeNode.getData().intValue(), 5); + Assert.assertEquals(treeNode.getLeft().getData(), 3); + Assert.assertEquals(treeNode.getRight().getData(), 7); + Assert.assertEquals(treeNode.getLeft().getLeft().getData(), 1); + Assert.assertEquals(treeNode.getLeft().getRight().getData(), 4); + Assert.assertEquals(treeNode.getLeft().getLeft().getRight().getData(), 2); + Assert.assertEquals(treeNode.getRight().getRight().getData(), 8); + Assert.assertEquals(treeNode.getRight().getLeft().getData(), 6); + } + + @org.junit.Test + public void delete() throws Exception { + treeNode.delete(3); + for (int i = 1; i < 9; i++) { + if (i != 3) { + Assert.assertNotNull(treeNode.search(i)); + } else { + Assert.assertNull(treeNode.search(i)); + } + } + } + + @org.junit.Test + public void search() throws Exception { + for (int i = 1; i < 9; i++) { + Assert.assertNotNull(treeNode.search(i)); + } + Assert.assertNull(treeNode.search(0)); + Assert.assertNull(treeNode.search(9)); + } +} \ No newline at end of file From 75cda5d685e638ce2862d8c497efd66aa023fcae Mon Sep 17 00:00:00 2001 From: Korben_CHY Date: Sun, 26 Feb 2017 01:22:43 +0800 Subject: [PATCH 168/216] commit Korben's blog --- group20/1107837739/korben.md | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 group20/1107837739/korben.md diff --git a/group20/1107837739/korben.md b/group20/1107837739/korben.md new file mode 100644 index 0000000000..3d592c4403 --- /dev/null +++ b/group20/1107837739/korben.md @@ -0,0 +1,7 @@ +## Korben's Blog Here + + +Title | Address | Date +---|--- +初窥计算机程序的运行 | http://korben-chy.github.io/2017/02/26/%E5%88%9D%E7%AA%A5%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%A8%8B%E5%BA%8F%E7%9A%84%E8%BF%90%E8%A1%8C/ | 2017/02/26 + From 11d662272efbb958e9174e6e397397870de5a1b1 Mon Sep 17 00:00:00 2001 From: Korben-CHY Date: Sun, 26 Feb 2017 01:36:14 +0800 Subject: [PATCH 169/216] Update Korben.md to format blog address --- group20/1107837739/korben.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/group20/1107837739/korben.md b/group20/1107837739/korben.md index 3d592c4403..983f6f47b6 100644 --- a/group20/1107837739/korben.md +++ b/group20/1107837739/korben.md @@ -1,7 +1,7 @@ ## Korben's Blog Here - -Title | Address | Date ----|--- -初窥计算机程序的运行 | http://korben-chy.github.io/2017/02/26/%E5%88%9D%E7%AA%A5%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%A8%8B%E5%BA%8F%E7%9A%84%E8%BF%90%E8%A1%8C/ | 2017/02/26 +-------- +| Blog Title | Date| +| ---------- | -----------| +| [初窥计算机程序的运行](http://korben-chy.github.io/2017/02/26/%E5%88%9D%E7%AA%A5%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%A8%8B%E5%BA%8F%E7%9A%84%E8%BF%90%E8%A1%8C/) | 2017/02/26 | From c53e09daf1f84d2f60ea6b383b1481919a118ef1 Mon Sep 17 00:00:00 2001 From: zoakerc Date: Sun, 26 Feb 2017 02:00:44 +0800 Subject: [PATCH 170/216] =?UTF-8?q?=E4=BA=8C=E5=8F=89=E6=A0=91=E5=AE=9E?= =?UTF-8?q?=E7=8E=B0MyBinaryTree?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../homework/c0226/MyBinaryTreeNode.java | 25 +++++++++++--- .../homework/c0226/MyBinaryTreeNodeTest.java | 34 +++++++++++++++++++ 2 files changed, 54 insertions(+), 5 deletions(-) create mode 100644 group07/562247675/homework/homework-0226/src/test/java/com/coding2017/group7/homework/c0226/MyBinaryTreeNodeTest.java diff --git a/group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/MyBinaryTreeNode.java b/group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/MyBinaryTreeNode.java index 56963a0b8d..334dcd06de 100644 --- a/group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/MyBinaryTreeNode.java +++ b/group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/MyBinaryTreeNode.java @@ -2,15 +2,15 @@ public class MyBinaryTreeNode { - private Object data; + private Comparable data; private MyBinaryTreeNode left; private MyBinaryTreeNode right; - public Object getData() { + public Comparable getData() { return data; } - public void setData(Object data) { + public void setData(Comparable data) { this.data = data; } @@ -30,8 +30,23 @@ public void setRight(MyBinaryTreeNode right) { this.right = right; } - public MyBinaryTreeNode insert(Object o) { - return null; + public MyBinaryTreeNode insert(Comparable o) { + if (data == null) { + data = o; + } + int compare = o.compareTo(data); + if (compare < 0) { + if (left == null) { + left = new MyBinaryTreeNode(); + } + left.insert(o); + } else if (compare > 0) { + if (right == null) { + right = new MyBinaryTreeNode(); + } + right.insert(o); + } + return this; } } diff --git a/group07/562247675/homework/homework-0226/src/test/java/com/coding2017/group7/homework/c0226/MyBinaryTreeNodeTest.java b/group07/562247675/homework/homework-0226/src/test/java/com/coding2017/group7/homework/c0226/MyBinaryTreeNodeTest.java new file mode 100644 index 0000000000..9766b03947 --- /dev/null +++ b/group07/562247675/homework/homework-0226/src/test/java/com/coding2017/group7/homework/c0226/MyBinaryTreeNodeTest.java @@ -0,0 +1,34 @@ +package com.coding2017.group7.homework.c0226; + +import org.junit.Assert; +import org.junit.Test; + +public class MyBinaryTreeNodeTest { + + + @Test + public void insert() throws Exception { + MyBinaryTreeNode node = new MyBinaryTreeNode(); + node.insert(5) + .insert(2) + .insert(7) + .insert(1) + .insert(6) + .insert(4) + .insert(8) + .insert(3); + Comparable data1 = node.getLeft().getLeft().getData(); + Comparable data4 = node.getLeft().getRight().getData(); + Comparable data6 = node.getRight().getLeft().getData(); + Comparable data8 = node.getRight().getRight().getData(); + Comparable data3 = node.getLeft().getRight().getLeft().getData(); + Assert.assertEquals(1, data1); + Assert.assertEquals(4, data4); + Assert.assertEquals(6, data6); + Assert.assertEquals(8, data8); + Assert.assertEquals(3, data3); + + } + + +} \ No newline at end of file From e57495b66200b2549598147fb83e9f8b7a797c21 Mon Sep 17 00:00:00 2001 From: zoakerc Date: Sun, 26 Feb 2017 02:03:33 +0800 Subject: [PATCH 171/216] =?UTF-8?q?=E6=B5=8B=E8=AF=95ArrayList=E5=AE=9E?= =?UTF-8?q?=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/coding2017/group7/homework/c0226/MyArrayListTest.java | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename group07/562247675/homework/homework-0226/src/{test => main}/java/com/coding2017/group7/homework/c0226/MyArrayListTest.java (100%) diff --git a/group07/562247675/homework/homework-0226/src/test/java/com/coding2017/group7/homework/c0226/MyArrayListTest.java b/group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/MyArrayListTest.java similarity index 100% rename from group07/562247675/homework/homework-0226/src/test/java/com/coding2017/group7/homework/c0226/MyArrayListTest.java rename to group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/MyArrayListTest.java From 88727f1803e78a5c5b3ff8684e203ba977988665 Mon Sep 17 00:00:00 2001 From: zoakerc Date: Sun, 26 Feb 2017 02:03:57 +0800 Subject: [PATCH 172/216] =?UTF-8?q?=E6=B5=8B=E8=AF=95LinkedList=E5=AE=9E?= =?UTF-8?q?=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/coding2017/group7/homework/c0226/MyLinkedListTest.java | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename group07/562247675/homework/homework-0226/src/{test => main}/java/com/coding2017/group7/homework/c0226/MyLinkedListTest.java (100%) diff --git a/group07/562247675/homework/homework-0226/src/test/java/com/coding2017/group7/homework/c0226/MyLinkedListTest.java b/group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/MyLinkedListTest.java similarity index 100% rename from group07/562247675/homework/homework-0226/src/test/java/com/coding2017/group7/homework/c0226/MyLinkedListTest.java rename to group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/MyLinkedListTest.java From 61d594fbf2e61a6e7c75ea03a5fe3a3c64af0952 Mon Sep 17 00:00:00 2001 From: zoakerc Date: Sun, 26 Feb 2017 02:04:13 +0800 Subject: [PATCH 173/216] =?UTF-8?q?=E6=B5=8B=E8=AF=95Stack=E5=AE=9E?= =?UTF-8?q?=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/coding2017/group7/homework/c0226/MyStackTest.java | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename group07/562247675/homework/homework-0226/src/{test => main}/java/com/coding2017/group7/homework/c0226/MyStackTest.java (100%) diff --git a/group07/562247675/homework/homework-0226/src/test/java/com/coding2017/group7/homework/c0226/MyStackTest.java b/group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/MyStackTest.java similarity index 100% rename from group07/562247675/homework/homework-0226/src/test/java/com/coding2017/group7/homework/c0226/MyStackTest.java rename to group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/MyStackTest.java From a2a804717b514d8436294106b8c94006e33d2a8c Mon Sep 17 00:00:00 2001 From: zoakerc Date: Sun, 26 Feb 2017 02:04:24 +0800 Subject: [PATCH 174/216] =?UTF-8?q?=E6=B5=8B=E8=AF=95Queue=E5=AE=9E?= =?UTF-8?q?=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/coding2017/group7/homework/c0226/MyQueueTest.java | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename group07/562247675/homework/homework-0226/src/{test => main}/java/com/coding2017/group7/homework/c0226/MyQueueTest.java (100%) diff --git a/group07/562247675/homework/homework-0226/src/test/java/com/coding2017/group7/homework/c0226/MyQueueTest.java b/group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/MyQueueTest.java similarity index 100% rename from group07/562247675/homework/homework-0226/src/test/java/com/coding2017/group7/homework/c0226/MyQueueTest.java rename to group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/MyQueueTest.java From 5befa49c5e26b55b9f7495b8953dd33b06305333 Mon Sep 17 00:00:00 2001 From: zoakerc Date: Sun, 26 Feb 2017 02:04:38 +0800 Subject: [PATCH 175/216] =?UTF-8?q?=E6=B5=8B=E8=AF=95BinaryTree=E5=AE=9E?= =?UTF-8?q?=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../coding2017/group7/homework/c0226/MyBinaryTreeNodeTest.java | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename group07/562247675/homework/homework-0226/src/{test => main}/java/com/coding2017/group7/homework/c0226/MyBinaryTreeNodeTest.java (100%) diff --git a/group07/562247675/homework/homework-0226/src/test/java/com/coding2017/group7/homework/c0226/MyBinaryTreeNodeTest.java b/group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/MyBinaryTreeNodeTest.java similarity index 100% rename from group07/562247675/homework/homework-0226/src/test/java/com/coding2017/group7/homework/c0226/MyBinaryTreeNodeTest.java rename to group07/562247675/homework/homework-0226/src/main/java/com/coding2017/group7/homework/c0226/MyBinaryTreeNodeTest.java From 57e6b7a4b0cc4edc2a6b1cfea3406b4e3e03990e Mon Sep 17 00:00:00 2001 From: 51075907 <51075907@qq.com> Date: Sun, 26 Feb 2017 08:51:18 +0800 Subject: [PATCH 176/216] day1_homeawork --- group17/51075907/HomeWork/.classpath | 6 + group17/51075907/HomeWork/.project | 17 +++ .../.settings/org.eclipse.jdt.core.prefs | 11 ++ .../HomeWork/src/day1_HomeWork/ArrayList.java | 75 +++++++++++++ .../src/day1_HomeWork/LinkedList.java | 103 ++++++++++++++++++ .../HomeWork/src/day1_HomeWork/List.java | 9 ++ .../HomeWork/src/day1_HomeWork/Queue.java | 19 ++++ .../HomeWork/src/day1_HomeWork/Stack.java | 23 ++++ 8 files changed, 263 insertions(+) create mode 100644 group17/51075907/HomeWork/.classpath create mode 100644 group17/51075907/HomeWork/.project create mode 100644 group17/51075907/HomeWork/.settings/org.eclipse.jdt.core.prefs create mode 100644 group17/51075907/HomeWork/src/day1_HomeWork/ArrayList.java create mode 100644 group17/51075907/HomeWork/src/day1_HomeWork/LinkedList.java create mode 100644 group17/51075907/HomeWork/src/day1_HomeWork/List.java create mode 100644 group17/51075907/HomeWork/src/day1_HomeWork/Queue.java create mode 100644 group17/51075907/HomeWork/src/day1_HomeWork/Stack.java diff --git a/group17/51075907/HomeWork/.classpath b/group17/51075907/HomeWork/.classpath new file mode 100644 index 0000000000..10b13d9f7a --- /dev/null +++ b/group17/51075907/HomeWork/.classpath @@ -0,0 +1,6 @@ + + + + + + diff --git a/group17/51075907/HomeWork/.project b/group17/51075907/HomeWork/.project new file mode 100644 index 0000000000..c27db84883 --- /dev/null +++ b/group17/51075907/HomeWork/.project @@ -0,0 +1,17 @@ + + + HomeWork + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git a/group17/51075907/HomeWork/.settings/org.eclipse.jdt.core.prefs b/group17/51075907/HomeWork/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000000..43785549a2 --- /dev/null +++ b/group17/51075907/HomeWork/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,11 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=disabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.2 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.4 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=warning +org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning +org.eclipse.jdt.core.compiler.source=1.3 diff --git a/group17/51075907/HomeWork/src/day1_HomeWork/ArrayList.java b/group17/51075907/HomeWork/src/day1_HomeWork/ArrayList.java new file mode 100644 index 0000000000..5a164ce8ca --- /dev/null +++ b/group17/51075907/HomeWork/src/day1_HomeWork/ArrayList.java @@ -0,0 +1,75 @@ +package day1_HomeWork; + + + public class ArrayList implements List { + + private int size = 0; + + private Object[] elementData = new Object[100]; + + //ռ䳬ǰС,֤ + public void ensureCapacity( int newCapacity) + { + if ( newCapacity < size) + return; + + Object [] old =elementData; + elementData =(Object []) new Object[newCapacity]; + for (int i=0; i index; i--) + elementData[i] =elementData [i-1]; + elementData[index]= o; + size ++; + + } + + public Object get(int index){ + if ( index<0 || index >=size()) + throw new ArrayIndexOutOfBoundsException(); + return elementData[index]; + } + + public Object remove(int index){ + Object remove_elementData=elementData[index]; + for ( int i=index;i size()) + throw new IndexOutOfBoundsException(); + + if (index < size()/2) + { + p=beginMarker.next; + for (int i =0;iindex;i--) + p=p.prev; + } + return p; + } + public Object remove(Node p){ + p.next.prev =p.prev; + p.prev.next=p.next; + int size; + size--; + int modCount; + modCount++; + return p.data; + } + + public int size(){ + return -1; + } + + public void addFirst(Node p,Object o){ + Node newNode= new Node (o,p.prev,p); + newNode.prev.next= newNode; + p.prev =newNode; + size++; + modCount++; + } + public void addLast(Object o){ + + } + public Object removeFirst(int index){ + return remove( get(index)); + } + public Object removeLast(){ + return null; + } + public java.util.Iterator iterator(){ + return new LinkedListIterator(); + } + + private class LinkedListIterator implements java.util.Iterator{ + private Node current=beginMarker.next; + private int expectedModCount=modCount; + private boolean okTORemove=false; + + public boolean haNext() + { + return current!= endMarker; + } + public Object next() + { + if (modCount !=expectedModCount) + throw new java.util.ConcurrentModificationException(); + if (!=hasNext()) + throw new java.util.NoSuchElementException(); + + + } + } + + + private static class Node{ + public Node(Object o, Node p, Node n) + { + data =o; next=n; prev=p; + } + public Object data; + public Node next; + public Node prev; + + } +} diff --git a/group17/51075907/HomeWork/src/day1_HomeWork/List.java b/group17/51075907/HomeWork/src/day1_HomeWork/List.java new file mode 100644 index 0000000000..4fce964dce --- /dev/null +++ b/group17/51075907/HomeWork/src/day1_HomeWork/List.java @@ -0,0 +1,9 @@ +package day1_HomeWork; + +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(); +} diff --git a/group17/51075907/HomeWork/src/day1_HomeWork/Queue.java b/group17/51075907/HomeWork/src/day1_HomeWork/Queue.java new file mode 100644 index 0000000000..9a0468c683 --- /dev/null +++ b/group17/51075907/HomeWork/src/day1_HomeWork/Queue.java @@ -0,0 +1,19 @@ +package day1_HomeWork; + +public class Queue { + + public void enQueue(Object o){ + } + + public Object deQueue(){ + return null; + } + + public boolean isEmpty(){ + return false; + } + + public int size(){ + return -1; + } +} diff --git a/group17/51075907/HomeWork/src/day1_HomeWork/Stack.java b/group17/51075907/HomeWork/src/day1_HomeWork/Stack.java new file mode 100644 index 0000000000..259c5f0910 --- /dev/null +++ b/group17/51075907/HomeWork/src/day1_HomeWork/Stack.java @@ -0,0 +1,23 @@ +package day1_HomeWork; + + +public class Stack { + private ArrayList elementData = new ArrayList(); + + public void push(Object o){ + } + + public Object pop(){ + return null; + } + + public Object peek(){ + return null; + } + public boolean isEmpty(){ + return false; + } + public int size(){ + return -1; + } +} From 7ff39a461d6df1080a7f514150db95a70bf610c4 Mon Sep 17 00:00:00 2001 From: hzc1234567 <956647478@qq.com> Date: Sun, 26 Feb 2017 10:11:25 +0800 Subject: [PATCH 177/216] githubDesktop --- group16/956647478/ArrayList/.classpath | 6 ++++++ group16/956647478/ArrayList/.gitignore | 1 + group16/956647478/ArrayList/.project | 17 +++++++++++++++++ .../.settings/org.eclipse.jdt.core.prefs | 11 +++++++++++ .../956647478/RemoteSystemsTempFiles/.project | 12 ++++++++++++ 5 files changed, 47 insertions(+) create mode 100644 group16/956647478/ArrayList/.classpath create mode 100644 group16/956647478/ArrayList/.gitignore create mode 100644 group16/956647478/ArrayList/.project create mode 100644 group16/956647478/ArrayList/.settings/org.eclipse.jdt.core.prefs create mode 100644 group16/956647478/RemoteSystemsTempFiles/.project diff --git a/group16/956647478/ArrayList/.classpath b/group16/956647478/ArrayList/.classpath new file mode 100644 index 0000000000..fb565a588d --- /dev/null +++ b/group16/956647478/ArrayList/.classpath @@ -0,0 +1,6 @@ + + + + + + diff --git a/group16/956647478/ArrayList/.gitignore b/group16/956647478/ArrayList/.gitignore new file mode 100644 index 0000000000..ae3c172604 --- /dev/null +++ b/group16/956647478/ArrayList/.gitignore @@ -0,0 +1 @@ +/bin/ diff --git a/group16/956647478/ArrayList/.project b/group16/956647478/ArrayList/.project new file mode 100644 index 0000000000..6e2da91f56 --- /dev/null +++ b/group16/956647478/ArrayList/.project @@ -0,0 +1,17 @@ + + + ArrayList + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git a/group16/956647478/ArrayList/.settings/org.eclipse.jdt.core.prefs b/group16/956647478/ArrayList/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000000..7341ab1683 --- /dev/null +++ b/group16/956647478/ArrayList/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,11 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.7 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.7 diff --git a/group16/956647478/RemoteSystemsTempFiles/.project b/group16/956647478/RemoteSystemsTempFiles/.project new file mode 100644 index 0000000000..5447a64fa9 --- /dev/null +++ b/group16/956647478/RemoteSystemsTempFiles/.project @@ -0,0 +1,12 @@ + + + RemoteSystemsTempFiles + + + + + + + org.eclipse.rse.ui.remoteSystemsTempNature + + From 0a04395219417638fe3835f01dd12775b37fbbfd Mon Sep 17 00:00:00 2001 From: GUK0 <1685605435@qq.com> Date: Sun, 26 Feb 2017 10:48:50 +0800 Subject: [PATCH 178/216] add 5 soc files as homework --- group12/247565311/week1/ArrayList.java | 249 +++++++++++++++++++++++++ group12/247565311/week1/Deque.java | 34 ++++ group12/247565311/week1/Stack.java | 24 +++ 3 files changed, 307 insertions(+) create mode 100644 group12/247565311/week1/ArrayList.java create mode 100644 group12/247565311/week1/Deque.java create mode 100644 group12/247565311/week1/Stack.java diff --git a/group12/247565311/week1/ArrayList.java b/group12/247565311/week1/ArrayList.java new file mode 100644 index 0000000000..3e4c12d7a7 --- /dev/null +++ b/group12/247565311/week1/ArrayList.java @@ -0,0 +1,249 @@ +package week1; + +import java.util.Arrays; +import java.util.Collection; +import java.util.Iterator; +import java.util.List; +import java.util.ListIterator; + + +public class ArrayList implements List { + private int size=0,offset=10; + private Object[] data = null; + public ArrayList(){ + data = new Object[offset]; + } + public ArrayList(int arg0){ + if(arg0<0) arg0=0; + size = arg0; + data = new Object[size]; + } + @Override + public boolean add(E arg0) { + if(arg0 == null) return false; + size += 1; + int leng = data.length; + if(size>leng){ + Object[] newdata = new Object[size + offset]; + for(int i=0;isize+1 || 0>arg0) return ; + size += 1; + int leng = data.length; + if(size>leng){ + Object[] newdata = new Object[size + offset]; + for(int i=0;i arg0) { + if (arg0 == null) return false; + int leng = data.length,newobjnum = arg0.size(),lastsize=size; + size += newobjnum; + if(size>leng){ + Object[] newdata = new Object[size + offset]; + for(int i=0;i arg1) { + int newobjnum = arg1.size(),lastsize = size; + if(arg1 == null || arg0>size+1 || 0>arg0 || newobjnum==0) return false; + size += newobjnum; + int leng = data.length; + if(size>leng){ + Object[] newdata = new Object[size + offset]; + for(int i=0;i arg0) { + for(Object o:arg0){ + if(!this.contains(o)) return false; + } + return true; + } + + @Override + public E get(int arg0) { + if(arg0 >-1 && arg0-1;i--){ + if(this.data[i].equals(arg0)) return i; + } + return -1; + } + + @Override + public Iterator iterator() { + + return null; + } + + @Override + public ListIterator listIterator() { + + return null; + } + + @Override + public ListIterator listIterator(int arg0) { + + return null; + } + + @Override + public boolean remove(Object arg0) { + for(int i=0;ithis.size-1) return null; + E res = (E)data[arg0]; + for(int i=arg0;i arg0) { + int toberemovednums = arg0.size(); + if(!this.containsAll(arg0)) return false; + int index=0; + for(int i=0;i arg0) { + // what does this mean? + return false; + } + + @Override + public E set(int arg0, E arg1) { + if(arg0<0||arg0>this.size-1) return null; + this.data[arg0] = arg1; + return arg1; + } + + @Override + public int size() { + return this.size; + } + + @Override + public List subList(int arg0, int arg1) { + if(arg0>=arg1 || arg0<0 || arg1>this.size-1) return null; + List res = new ArrayList(); + for(int i=arg0;i T[] toArray(T[] arg0) { + T[] res = (T[])(new Object[this.size]); + for(int i=0;i { + private LinkedList data = new LinkedList(); + private int size = 0; + + + public Deque(){ + + } + public Deque(int arg0){ + data = new LinkedList(arg0); + } + public boolean push(E arg0){ + data.add(arg0); + size += 1; + return true; + } + public E pop(){ + size -= 1; + E res = data.get(size); + data.remove(size); + return res; + } + public E peek(){ + return data.get(size-1); + } + public int size(){ + return this.size; + } + public boolean isEmpty(){ + return this.size==0; + } + +} diff --git a/group12/247565311/week1/Stack.java b/group12/247565311/week1/Stack.java new file mode 100644 index 0000000000..2d4692f05b --- /dev/null +++ b/group12/247565311/week1/Stack.java @@ -0,0 +1,24 @@ +package week1; + +import java.util.List; + +public class Stack { + private List data = new ArrayList(); + private int size = 0; + + public Stack(){ + + } + + public Stack(int arg0){ + if(arg0 < 0) arg0 = 0; + size = arg0; + data = new ArrayList(size); + + } + public boolean push(E arg0){ + size += 1; + data.add(arg0); + } + public E pop() +} From d4aad3d9f3b4c45dc19396a0800c3e27ee190116 Mon Sep 17 00:00:00 2001 From: GUK0 <1685605435@qq.com> Date: Sun, 26 Feb 2017 10:49:42 +0800 Subject: [PATCH 179/216] add to list files --- group12/247565311/week1/Link.java | 5 + group12/247565311/week1/LinkedList.java | 204 ++++++++++++++++++++++++ 2 files changed, 209 insertions(+) create mode 100644 group12/247565311/week1/Link.java create mode 100644 group12/247565311/week1/LinkedList.java diff --git a/group12/247565311/week1/Link.java b/group12/247565311/week1/Link.java new file mode 100644 index 0000000000..e2910e53d3 --- /dev/null +++ b/group12/247565311/week1/Link.java @@ -0,0 +1,5 @@ +package week1; + +public class Link { + +} diff --git a/group12/247565311/week1/LinkedList.java b/group12/247565311/week1/LinkedList.java new file mode 100644 index 0000000000..debd53d8d2 --- /dev/null +++ b/group12/247565311/week1/LinkedList.java @@ -0,0 +1,204 @@ +package week1; + +import java.util.Collection; +import java.util.Iterator; +import java.util.List; +import java.util.ListIterator; + +public class LinkedList implements List { + private Node head = null; + private Node tail = null; + private int size = 0; + + public LinkedList(){ + head = new Node(null); + tail = new Node(null); + head.next = tail; + tail.ahead = head; + size = 0; + } + public LinkedList(int arg0){ + head = new Node(null); + tail = new Node(null); + head.next = tail; + tail.ahead = head; + size = 0; + } + @Override + public boolean add(E arg0) { + Node n = new Node(arg0); + n.next = tail; + n.ahead = tail.ahead; + tail.ahead.next = n; + tail.ahead = n; + size += 1; + return true; + } + + @Override + public void add(int arg0, E arg1) { + if(arg0<0) arg0=0; + Node n=new Node(arg1),p=head; + for(int i=0;i arg0) { + for(E o:arg0){ + this.add(o); + } + return true; + } + + @Override + public boolean addAll(int arg0, Collection arg1) { + for(E e:arg1){ + this.add(arg0,e); + arg0+=1; + } + return true; + } + + @Override + public void clear() { + head = new Node(null); + tail = new Node(null); + head.next = tail; + tail.ahead = head; + size = 0; + } + + @Override + public boolean contains(Object arg0) { + boolean flag = arg0==null; + Node n = head; + for(int i=0;i arg0) { + for(Object e:arg0){ + if(!this.contains(e)) return false; + } + return true; + } + + @Override + public E get(int arg0) { + E res = null; + if(arg0>-1 && arg0 < size){ + + } + return res; + } + + @Override + public int indexOf(Object arg0) { + + return 0; + } + + @Override + public boolean isEmpty() { + + return false; + } + + @Override + public Iterator iterator() { + + return null; + } + + @Override + public int lastIndexOf(Object arg0) { + + return 0; + } + + @Override + public ListIterator listIterator() { + + return null; + } + + @Override + public ListIterator listIterator(int arg0) { + + return null; + } + + @Override + public boolean remove(Object arg0) { + + return false; + } + + @Override + public E remove(int arg0) { + + return null; + } + + @Override + public boolean removeAll(Collection arg0) { + + return false; + } + + @Override + public boolean retainAll(Collection arg0) { + + return false; + } + + @Override + public E set(int arg0, E arg1) { + + return null; + } + + @Override + public int size() { + + return 0; + } + + @Override + public List subList(int arg0, int arg1) { + + return null; + } + + @Override + public Object[] toArray() { + + return null; + } + + @Override + public T[] toArray(T[] arg0) { + + return null; + } + private static class Node{ + Object val = null; + Node next = null,ahead=null; + public Node(Object arg0){val = arg0;} + } +} From c078bfb361acd92293b335dbb02a861b1495e8d5 Mon Sep 17 00:00:00 2001 From: hzc1234567 <956647478@qq.com> Date: Sun, 26 Feb 2017 10:53:51 +0800 Subject: [PATCH 180/216] Revert "githubDesktop" --- group16/956647478/ArrayList/.classpath | 6 ------ group16/956647478/ArrayList/.gitignore | 1 - group16/956647478/ArrayList/.project | 17 ----------------- .../.settings/org.eclipse.jdt.core.prefs | 11 ----------- .../956647478/RemoteSystemsTempFiles/.project | 12 ------------ 5 files changed, 47 deletions(-) delete mode 100644 group16/956647478/ArrayList/.classpath delete mode 100644 group16/956647478/ArrayList/.gitignore delete mode 100644 group16/956647478/ArrayList/.project delete mode 100644 group16/956647478/ArrayList/.settings/org.eclipse.jdt.core.prefs delete mode 100644 group16/956647478/RemoteSystemsTempFiles/.project diff --git a/group16/956647478/ArrayList/.classpath b/group16/956647478/ArrayList/.classpath deleted file mode 100644 index fb565a588d..0000000000 --- a/group16/956647478/ArrayList/.classpath +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/group16/956647478/ArrayList/.gitignore b/group16/956647478/ArrayList/.gitignore deleted file mode 100644 index ae3c172604..0000000000 --- a/group16/956647478/ArrayList/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/bin/ diff --git a/group16/956647478/ArrayList/.project b/group16/956647478/ArrayList/.project deleted file mode 100644 index 6e2da91f56..0000000000 --- a/group16/956647478/ArrayList/.project +++ /dev/null @@ -1,17 +0,0 @@ - - - ArrayList - - - - - - org.eclipse.jdt.core.javabuilder - - - - - - org.eclipse.jdt.core.javanature - - diff --git a/group16/956647478/ArrayList/.settings/org.eclipse.jdt.core.prefs b/group16/956647478/ArrayList/.settings/org.eclipse.jdt.core.prefs deleted file mode 100644 index 7341ab1683..0000000000 --- a/group16/956647478/ArrayList/.settings/org.eclipse.jdt.core.prefs +++ /dev/null @@ -1,11 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 -org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.7 -org.eclipse.jdt.core.compiler.debug.lineNumber=generate -org.eclipse.jdt.core.compiler.debug.localVariable=generate -org.eclipse.jdt.core.compiler.debug.sourceFile=generate -org.eclipse.jdt.core.compiler.problem.assertIdentifier=error -org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.source=1.7 diff --git a/group16/956647478/RemoteSystemsTempFiles/.project b/group16/956647478/RemoteSystemsTempFiles/.project deleted file mode 100644 index 5447a64fa9..0000000000 --- a/group16/956647478/RemoteSystemsTempFiles/.project +++ /dev/null @@ -1,12 +0,0 @@ - - - RemoteSystemsTempFiles - - - - - - - org.eclipse.rse.ui.remoteSystemsTempNature - - From d4970d055c00e3e3e267d0c9ece4ca1dd1fb0590 Mon Sep 17 00:00:00 2001 From: gaodekui <13526428940@163.com> Date: Thu, 23 Feb 2017 17:57:06 +0800 Subject: [PATCH 181/216] =?UTF-8?q?=E5=86=8D=E6=AC=A1=E6=8F=90=E4=BA=A4?= =?UTF-8?q?=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- group16/1154151360/src/com/list/ArrayList.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/group16/1154151360/src/com/list/ArrayList.java b/group16/1154151360/src/com/list/ArrayList.java index bf19212fbf..733dc0f341 100644 --- a/group16/1154151360/src/com/list/ArrayList.java +++ b/group16/1154151360/src/com/list/ArrayList.java @@ -1,7 +1,7 @@ package com.list; - +//ArrayList public class ArrayList { private int size; From d833bb6a49b497bcc90da78ec60ad4b59c6716ac Mon Sep 17 00:00:00 2001 From: gaodekui <13526428940@163.com> Date: Sat, 25 Feb 2017 10:49:46 +0800 Subject: [PATCH 182/216] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E9=98=9F=E5=88=97?= =?UTF-8?q?=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- group16/1154151360/src/com/list/Queue.java | 51 ++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 group16/1154151360/src/com/list/Queue.java diff --git a/group16/1154151360/src/com/list/Queue.java b/group16/1154151360/src/com/list/Queue.java new file mode 100644 index 0000000000..c2cf67b05d --- /dev/null +++ b/group16/1154151360/src/com/list/Queue.java @@ -0,0 +1,51 @@ +package com.list; + +public class Queue { + + Object [] element; + + private static int DEFAULT_SIZE = 10; + + int front;//头指针 + + int rear;//尾指针 + + public Queue(){ + this(DEFAULT_SIZE); + } + public Queue(int size){ + element = new Object[size]; + this.front = 0; + this.rear = 0; + } + + public boolean enQueue(Object object){ + + if ((rear + 1) % element.length == front){ + return false; + }else{ + element[rear] = object; + rear = (rear + 1) % element.length; + return true; + } + } + + public Object deQueue(){ + if (front == rear){ + return null; + }else{ + Object object = element[front]; + front = (front + 1) % element.length; + return object; + } + + } + + public int size(){ + return (rear -front) & (element.length - 1); + } + + public boolean isEmpty(){ + return rear == front; + } +} From c2028b71cb3fb7416d1934f298dd668844d89aee Mon Sep 17 00:00:00 2001 From: gaodekui <13526428940@163.com> Date: Sun, 26 Feb 2017 10:47:27 +0800 Subject: [PATCH 183/216] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E9=98=9F=E5=88=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- group16/1154151360/src/com/list/Queue.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/group16/1154151360/src/com/list/Queue.java b/group16/1154151360/src/com/list/Queue.java index c2cf67b05d..faa3e87381 100644 --- a/group16/1154151360/src/com/list/Queue.java +++ b/group16/1154151360/src/com/list/Queue.java @@ -1,5 +1,5 @@ package com.list; - +//队列 public class Queue { Object [] element; From 3fb5fa2b9e43243dec4889c49c80bb57e45f753a Mon Sep 17 00:00:00 2001 From: mengxz <82427129@qq.com> Date: Sun, 26 Feb 2017 11:23:27 +0800 Subject: [PATCH 184/216] First Homework at 17/2/26 --- group17/82427129/JavaUtil/.gitignore | 1 + group17/82427129/JavaUtil/pom.xml | 52 ++-- .../java/com/coding/basic/LinkedList.java | 275 ++++++++++++------ .../src/main/java/com/coding/basic/Queue.java | 40 +-- .../src/main/java/com/coding/basic/Stack.java | 54 ++-- 5 files changed, 259 insertions(+), 163 deletions(-) create mode 100644 group17/82427129/JavaUtil/.gitignore diff --git a/group17/82427129/JavaUtil/.gitignore b/group17/82427129/JavaUtil/.gitignore new file mode 100644 index 0000000000..b83d22266a --- /dev/null +++ b/group17/82427129/JavaUtil/.gitignore @@ -0,0 +1 @@ +/target/ diff --git a/group17/82427129/JavaUtil/pom.xml b/group17/82427129/JavaUtil/pom.xml index 6c95dbb077..974fb14110 100644 --- a/group17/82427129/JavaUtil/pom.xml +++ b/group17/82427129/JavaUtil/pom.xml @@ -1,27 +1,27 @@ - - 4.0.0 - com.coding.basic - JavaUtil - 0.0.1-SNAPSHOT - - - - org.apache.maven.plugins - maven-compiler-plugin - - 1.7 - 1.7 - - - - - - - junit - junit - 4.7 - test - - + + 4.0.0 + com.coding.basic + JavaUtil + 0.0.1-SNAPSHOT + + + + org.apache.maven.plugins + maven-compiler-plugin + + 1.7 + 1.7 + + + + + + + junit + junit + 4.7 + test + + \ No newline at end of file diff --git a/group17/82427129/JavaUtil/src/main/java/com/coding/basic/LinkedList.java b/group17/82427129/JavaUtil/src/main/java/com/coding/basic/LinkedList.java index f651ddabe0..601c803f74 100644 --- a/group17/82427129/JavaUtil/src/main/java/com/coding/basic/LinkedList.java +++ b/group17/82427129/JavaUtil/src/main/java/com/coding/basic/LinkedList.java @@ -1,97 +1,180 @@ -package com.coding.basic; - -public class LinkedList implements List { - private int size = 0; - - private Node first; - - private Node last; - - public static int getFirst(LinkedList l){ - return l.size; - } - - public void add(Object o){ - - } - public void add(int index , Object o){ - rangeCheck(index); - - final Node succ = indexOf(index); - Node newNode = new Node(succ.prev, o, succ); - succ.prev = newNode; - if(index == size){ - last = newNode; - }else{ - newNode.next = indexOf(index); - indexOf(index).prev = newNode; - } - size++; - } - private void rangeCheck(int index) { - if(index > size|| index < 0 ) - throw new IndexOutOfBoundsException("Size"+size+":index"+index); - } - /** - * ѭȡindex± - * @param index - * @return - */ - private Node indexOf(int index){ - if(index < (this.size>>1) ){ - Node x = first; - for (int i = 0; i < index; i++) { - x = x.next; - } - return x; - }else{ - Node x = last; - for (int i = this.size-1; i > index; i--) { - x = x.prev; - } - return x; - } - } - - public Object get(int index){ - return null; - } - public Object remove(int index){ - return null; - } - - public int size(){ - return size; - } - - public void addFirst(Object o){ - - } - - public void addLast(Object o){ - - } - - public Object removeFirst(){ - return null; - } - - public Object removeLast(){ - return null; - } - - public Iterator iterator(){ - return null; - } - - private class Node{ - Object data; - Node next; - Node prev; - Node(Node prev,Object data,Node next){ - this.data = data; - this.next = next; - this.prev = prev; - } - } +package com.coding.basic; + +import java.util.NoSuchElementException; + +public class LinkedList implements List { + private int size = 0; + + private Node first; + + private Node last; + + public void add(Object o){ + add(size,o); + } + public void add(int index , Object o){ + rangeCheck(index); + + if(index == size){ + linkLast(o); + }else{ + linkBefore(o, indexOf(index)); + } + } + private void linkBefore(Object o ,Node succ){ + final Node prev = succ.prev; + final Node newNode = new Node(prev, o, succ); + succ.prev = newNode; + if(prev == null){ + first = newNode; + }else{ + prev.next = newNode; + } + size++; + } + private void linkLast(Object o){ + final Node succ = last; + final Node newNode = new Node(succ, o, null); + last = newNode; + if(succ == null){ + first = newNode; + }else{ + succ.next = newNode; + } + size++; + } + private void rangeCheck(int index) { + if(index > size|| index < 0 ) + throw new IndexOutOfBoundsException("Size"+size+":index"+index); + } + private void elementIndexCheck(int index){ + if(index >=size||index < 0) + throw new IndexOutOfBoundsException("Size"+size+":index"+index); + } + /** + * ȡ±ꡱΪindexֵ, + * indexΪsizeʱnull + * @param index + * @return + */ + private Node indexOf(int index){ + if(index < (this.size>>1) ){ + Node x = first; + for (int i = 0; i < index; i++) { + x = x.next; + } + return x; + }else{ + Node x = last; + for (int i = this.size-1; i > index; i--) { + x = x.prev; + } + return x; + } + } + + public Object get(int index){ + elementIndexCheck(index); + + return indexOf(index); + } + public Object remove(int index){ + elementIndexCheck(index); + + if(index == 0){ + return removeFirst(); + }else if(index == size) { + return removeLast(); + }else{ + return unlinkNode(indexOf(index)); + } + } + + private Object unlinkNode(Node node) { + final Node next = node.next; + final Node prev = node.prev; + final Object element = node.data; + if(next == null){ + last = node; + }else{ + next.prev = node; + node.next = next; + } + if(prev == null){ + first = node; + }else{ + prev.next = node; + node.prev = prev; + } + size--; + node.data = null; + + return element; + } + public int size(){ + return size; + } + + public void addFirst(Object o){ + linkBefore(o, first); + } + + public void addLast(Object o){ + linkLast(o); + } + + public Object removeFirst(){ + if(first == null) + throw new NoSuchElementException("first is null"); + + Object oldData = first.data; + final Node next = first.next; + first.data = null; + first.next = null;//GC + first = next; + + if(next == null){ + last = null; + }else{ + next.prev = null; + } + size--; + + return oldData; + } + + public Object removeLast(){ + if(last == null) + throw new NoSuchElementException("last is null"); + + Object oldData = last.data; + final Node prev = last.prev; + last.prev = null; + last.data = null;//GC + last = prev; + + if(prev == null){ + first = null; + }else{ + prev.next = null; + } + size--; + + return oldData; + } + + public Iterator iterator(){ + return null; + } + + private static class Node{ + Object data; + Node next; + Node prev; + Node(Node prev,Object data,Node next){ + this.data = data; + this.next = next; + this.prev = prev; + } + } } \ No newline at end of file diff --git a/group17/82427129/JavaUtil/src/main/java/com/coding/basic/Queue.java b/group17/82427129/JavaUtil/src/main/java/com/coding/basic/Queue.java index 36e516e266..ffed2d52c4 100644 --- a/group17/82427129/JavaUtil/src/main/java/com/coding/basic/Queue.java +++ b/group17/82427129/JavaUtil/src/main/java/com/coding/basic/Queue.java @@ -1,19 +1,21 @@ -package com.coding.basic; - -public class Queue { - - public void enQueue(Object o){ - } - - public Object deQueue(){ - return null; - } - - public boolean isEmpty(){ - return false; - } - - public int size(){ - return -1; - } -} +package com.coding.basic; + +public class Queue { + private LinkedList elementData = new LinkedList(); + + public void enQueue(Object o){ + elementData.addLast(o); + } + + public Object deQueue(){ + return elementData.removeLast(); + } + + public boolean isEmpty(){ + return size() == 0; + } + + public int size(){ + return elementData.size(); + } +} diff --git a/group17/82427129/JavaUtil/src/main/java/com/coding/basic/Stack.java b/group17/82427129/JavaUtil/src/main/java/com/coding/basic/Stack.java index a5a04de76d..2d47d3eaea 100644 --- a/group17/82427129/JavaUtil/src/main/java/com/coding/basic/Stack.java +++ b/group17/82427129/JavaUtil/src/main/java/com/coding/basic/Stack.java @@ -1,22 +1,32 @@ -package com.coding.basic; - -public class Stack { - private ArrayList elementData = new ArrayList(); - - public void push(Object o){ - } - - public Object pop(){ - return null; - } - - public Object peek(){ - return null; - } - public boolean isEmpty(){ - return false; - } - public int size(){ - return -1; - } -} +package com.coding.basic; + +import java.util.EmptyStackException; + +public class Stack { + private ArrayList elementData = new ArrayList(); + + public void push(Object o){ + elementData.add(o); + } + + public Object pop(){ + int length = size(); + Object lastData = peek(); + elementData.remove(length - 1); + + return lastData; + } + + public Object peek(){ + if(size()<=0) + throw new EmptyStackException(); + + return elementData.get(size()-1); + } + public boolean isEmpty(){ + return size() == 0; + } + public int size(){ + return elementData.size(); + } +} From 40c9e4f52e3fc63a190f79785f313a7b84a10f43 Mon Sep 17 00:00:00 2001 From: mengxz <82427129@qq.com> Date: Sun, 26 Feb 2017 11:38:05 +0800 Subject: [PATCH 185/216] update from upstream --- .gitignore | 7 +- .../1204187480/code/homework/basic/pom.xml | 12 ++ .../main/java/com/coding/basic/ArrayList.java | 108 +++++++++++++++ .../java/com/coding/basic/BinaryTreeNode.java | 32 +++++ .../main/java/com/coding/basic/Iterator.java | 7 + .../java/com/coding/basic/LinkedList.java | 125 ++++++++++++++++++ .../src/main/java/com/coding/basic/List.java | 9 ++ .../src/main/java/com/coding/basic/Queue.java | 19 +++ .../src/main/java/com/coding/basic/Stack.java | 22 +++ .../java/com/coding/api/ArrayListTest.java | 25 ++++ .../test/java/com/coding/api/ArraysTest.java | 22 +++ .../test/java/com/coding/api/SystemTest.java | 24 ++++ .../java/com/coding/basic/ArrayListTest.java | 35 +++++ .../1204187480/code/homework/parent/pom.xml | 95 +++++++++++++ group17/1204187480/code/homework/pom.xml | 14 ++ ...2\204\345\205\263\347\263\273_20170226.md" | 56 ++++++++ 16 files changed, 611 insertions(+), 1 deletion(-) create mode 100644 group17/1204187480/code/homework/basic/pom.xml create mode 100644 group17/1204187480/code/homework/basic/src/main/java/com/coding/basic/ArrayList.java create mode 100644 group17/1204187480/code/homework/basic/src/main/java/com/coding/basic/BinaryTreeNode.java create mode 100644 group17/1204187480/code/homework/basic/src/main/java/com/coding/basic/Iterator.java create mode 100644 group17/1204187480/code/homework/basic/src/main/java/com/coding/basic/LinkedList.java create mode 100644 group17/1204187480/code/homework/basic/src/main/java/com/coding/basic/List.java create mode 100644 group17/1204187480/code/homework/basic/src/main/java/com/coding/basic/Queue.java create mode 100644 group17/1204187480/code/homework/basic/src/main/java/com/coding/basic/Stack.java create mode 100644 group17/1204187480/code/homework/basic/src/test/java/com/coding/api/ArrayListTest.java create mode 100644 group17/1204187480/code/homework/basic/src/test/java/com/coding/api/ArraysTest.java create mode 100644 group17/1204187480/code/homework/basic/src/test/java/com/coding/api/SystemTest.java create mode 100644 group17/1204187480/code/homework/basic/src/test/java/com/coding/basic/ArrayListTest.java create mode 100644 group17/1204187480/code/homework/parent/pom.xml create mode 100644 group17/1204187480/code/homework/pom.xml create mode 100644 "group17/article/\345\206\231\344\270\200\347\257\207\346\226\207\347\253\240\344\273\213\347\273\215cpu, \345\206\205\345\255\230, \347\243\201\347\233\230, \346\214\207\344\273\244\344\273\245\345\217\212\344\273\226\344\273\254\344\271\213\351\227\264\347\232\204\345\205\263\347\263\273_20170226.md" diff --git a/.gitignore b/.gitignore index ec55baf87d..2a5296f902 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,4 @@ *.class - # Mobile Tools for Java (J2ME) .mtj.tmp/ @@ -14,3 +13,9 @@ hs_err_pid* #ide config .metadata .recommenders +.idea/ +*.iml +rebel.* +.rebel.* + +target diff --git a/group17/1204187480/code/homework/basic/pom.xml b/group17/1204187480/code/homework/basic/pom.xml new file mode 100644 index 0000000000..039af72d42 --- /dev/null +++ b/group17/1204187480/code/homework/basic/pom.xml @@ -0,0 +1,12 @@ + + 4.0.0 + basic + + com.coding + parent + 1.0-SNAPSHOT + ../parent/pom.xml + + + \ No newline at end of file diff --git a/group17/1204187480/code/homework/basic/src/main/java/com/coding/basic/ArrayList.java b/group17/1204187480/code/homework/basic/src/main/java/com/coding/basic/ArrayList.java new file mode 100644 index 0000000000..6ddf8cef58 --- /dev/null +++ b/group17/1204187480/code/homework/basic/src/main/java/com/coding/basic/ArrayList.java @@ -0,0 +1,108 @@ +package com.coding.basic; + +import java.util.Arrays; + +public class ArrayList implements List { + + private int size = 0; + + private Object[] elementData = new Object[100]; + + private Iterator iterator = new ArrayListIterator(); + + private int length() { + return elementData.length; + } + + private static final int ENLARGE_LENGTH = 100; + + private Object[] enlarge(Object[] origin) { + return Arrays.copyOf(origin, origin.length + ENLARGE_LENGTH); + } + + private void enLargeElementData() { + if (size == length()) { + elementData = enlarge(elementData); + } + } + + public void add(Object o) { + enLargeElementData(); + elementData[size] = o; + size++; + } + + public void add(int index, Object o) { + checkForAdd(index); + enLargeElementData(); + // 备份 index 处及后面的数据 + Object[] elementsBehindIndex = backBehindElements(elementData, index); + // 给index处 设值 + elementData[index] = o; + // 追加 备份的数据 + appendElement(elementData, index, elementsBehindIndex); + size++; + } + + private void appendElement(Object[] origin, int pos, Object[] append) { + System.arraycopy(append, 0, origin, pos, append.length); + } + + private Object[] backBehindElements(Object[] elementData, int index) { + int backSize = size - index; + Object[] back = new Object[backSize]; + System.arraycopy(elementData, index, back, 0, backSize); + return back; + } + + public Object get(int index) { + checkIndex(index); + return elementData[index]; + } + + private void checkIndex(int index) { + if (index < 0 || index >= size) { + throw new ArrayIndexOutOfBoundsException(String.format("index=%s, size=%s", index, size)); + } + } + + private void checkForAdd(int index) { + if (index < 0 || index > size) { + throw new ArrayIndexOutOfBoundsException(String.format("index=%s, size=%s", index, size)); + } + } + + public Object remove(int index) { + checkIndex(index); + Object[] back = backBehindElements(elementData, index + 1); + System.arraycopy(back, 0, elementData, index, back.length); + Object ret = elementData[index]; + elementData[index] = null; + size--; + return ret; + } + + public int size() { + return size; + } + + public Iterator iterator() { + return iterator; + } + + private class ArrayListIterator implements Iterator { + + int next = 0; + + @Override + public boolean hasNext() { + return next < size; + } + + @Override + public Object next() { + return elementData[next++]; + } + } + +} diff --git a/group17/1204187480/code/homework/basic/src/main/java/com/coding/basic/BinaryTreeNode.java b/group17/1204187480/code/homework/basic/src/main/java/com/coding/basic/BinaryTreeNode.java new file mode 100644 index 0000000000..d7ac820192 --- /dev/null +++ b/group17/1204187480/code/homework/basic/src/main/java/com/coding/basic/BinaryTreeNode.java @@ -0,0 +1,32 @@ +package com.coding.basic; + +public class BinaryTreeNode { + + private Object data; + private BinaryTreeNode left; + private BinaryTreeNode right; + + 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){ + return null; + } + +} diff --git a/group17/1204187480/code/homework/basic/src/main/java/com/coding/basic/Iterator.java b/group17/1204187480/code/homework/basic/src/main/java/com/coding/basic/Iterator.java new file mode 100644 index 0000000000..06ef6311b2 --- /dev/null +++ b/group17/1204187480/code/homework/basic/src/main/java/com/coding/basic/Iterator.java @@ -0,0 +1,7 @@ +package com.coding.basic; + +public interface Iterator { + public boolean hasNext(); + public Object next(); + +} diff --git a/group17/1204187480/code/homework/basic/src/main/java/com/coding/basic/LinkedList.java b/group17/1204187480/code/homework/basic/src/main/java/com/coding/basic/LinkedList.java new file mode 100644 index 0000000000..706dafe820 --- /dev/null +++ b/group17/1204187480/code/homework/basic/src/main/java/com/coding/basic/LinkedList.java @@ -0,0 +1,125 @@ +package com.coding.basic; + +public class LinkedList implements List { + + private Node head; + private int size = 0; + + public void add(Object o) { + Node newNode = new Node(o, null); + if (head == null) { + head = newNode; + } else { + node(size - 1).next = newNode; + } + size++; + } + + public void add(int index, Object o) { + checkForAdd(index); + if (index == size) { + add(o); + }else { + Node newNode = new Node(o, null); + if (index == 0){ + addFirst(o); + } else { + Node preNode = node(index - 1); + Node now = preNode.next; + preNode.next = newNode; + newNode.next = now; + size++; + } + } + + } + + private Node node(int index) { + Node x = head; + for (int i = 0; i < index; i++) { + x = x.next; + } + return x; + } + + public Object get(int index) { + checkIndex(index); + return node(index).data; + } + + /** + * 让被删除的引用的持有者指向下一个节点 + * @param index + * @return + */ + public Object remove(int index) { + final Object ret; + checkIndex(index); + if (index == 0) { + Node removeNode = head; + ret = head.data; + head = removeNode.next; + } else { + Node pre = node(index - 1); + Node removeNode = pre.next; + ret = removeNode.data; + pre.next = removeNode.next; + } + size--; + return ret; + } + + public int size() { + return size; + } + + public void addFirst(Object o) { + head = new Node(o, head);; + size++; + } + + public void addLast(Object o) { + add(o); + } + + public Object removeFirst() { + if (size == 0){ + return null; + }else { + return remove(0); + } + } + + public Object removeLast() { + return remove(size - 1); + } + + public Iterator iterator() { + return null; + } + + private void checkIndex(int index) { + if (index < 0 || index >= size) { + throw new ArrayIndexOutOfBoundsException(String.format("index=%s, size=%s", index, size)); + } + } + + private void checkForAdd(int index) { + if (index < 0 || index > size) { + throw new ArrayIndexOutOfBoundsException(String.format("index=%s, size=%s", index, size)); + } + } + + private static class Node { + Object data; + Node next; + + public Node() { + } + + public Node(Object data, Node next) { + this.data = data; + this.next = next; + } + } +} diff --git a/group17/1204187480/code/homework/basic/src/main/java/com/coding/basic/List.java b/group17/1204187480/code/homework/basic/src/main/java/com/coding/basic/List.java new file mode 100644 index 0000000000..10d13b5832 --- /dev/null +++ b/group17/1204187480/code/homework/basic/src/main/java/com/coding/basic/List.java @@ -0,0 +1,9 @@ +package com.coding.basic; + +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(); +} diff --git a/group17/1204187480/code/homework/basic/src/main/java/com/coding/basic/Queue.java b/group17/1204187480/code/homework/basic/src/main/java/com/coding/basic/Queue.java new file mode 100644 index 0000000000..36e516e266 --- /dev/null +++ b/group17/1204187480/code/homework/basic/src/main/java/com/coding/basic/Queue.java @@ -0,0 +1,19 @@ +package com.coding.basic; + +public class Queue { + + public void enQueue(Object o){ + } + + public Object deQueue(){ + return null; + } + + public boolean isEmpty(){ + return false; + } + + public int size(){ + return -1; + } +} diff --git a/group17/1204187480/code/homework/basic/src/main/java/com/coding/basic/Stack.java b/group17/1204187480/code/homework/basic/src/main/java/com/coding/basic/Stack.java new file mode 100644 index 0000000000..a5a04de76d --- /dev/null +++ b/group17/1204187480/code/homework/basic/src/main/java/com/coding/basic/Stack.java @@ -0,0 +1,22 @@ +package com.coding.basic; + +public class Stack { + private ArrayList elementData = new ArrayList(); + + public void push(Object o){ + } + + public Object pop(){ + return null; + } + + public Object peek(){ + return null; + } + public boolean isEmpty(){ + return false; + } + public int size(){ + return -1; + } +} diff --git a/group17/1204187480/code/homework/basic/src/test/java/com/coding/api/ArrayListTest.java b/group17/1204187480/code/homework/basic/src/test/java/com/coding/api/ArrayListTest.java new file mode 100644 index 0000000000..85d3cf6901 --- /dev/null +++ b/group17/1204187480/code/homework/basic/src/test/java/com/coding/api/ArrayListTest.java @@ -0,0 +1,25 @@ +package com.coding.api; + +import org.junit.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +/** + * Created by luoziyihao on 2/25/17. + */ +public class ArrayListTest { + + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Test + public void testAdd(){ + List list = new ArrayList(Arrays.asList(0, 1, 2, 3)); + logger.info("list={}", list); + list.add(5, 2); + logger.info("list={}", list); + } +} diff --git a/group17/1204187480/code/homework/basic/src/test/java/com/coding/api/ArraysTest.java b/group17/1204187480/code/homework/basic/src/test/java/com/coding/api/ArraysTest.java new file mode 100644 index 0000000000..eb41a7e262 --- /dev/null +++ b/group17/1204187480/code/homework/basic/src/test/java/com/coding/api/ArraysTest.java @@ -0,0 +1,22 @@ +package com.coding.api; + +import org.junit.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.Arrays; + +/** + * Created by luoziyihao on 2/25/17. + */ +public class ArraysTest { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + + @Test + public void testCopyOf(){ + Object[] a = new Object[]{1, 2, 3, 4}; + Object[] b = Arrays.copyOf(a, 10); + logger.info("a={}, b={}", Arrays.toString(a), Arrays.toString(b)); + } +} diff --git a/group17/1204187480/code/homework/basic/src/test/java/com/coding/api/SystemTest.java b/group17/1204187480/code/homework/basic/src/test/java/com/coding/api/SystemTest.java new file mode 100644 index 0000000000..efc4022378 --- /dev/null +++ b/group17/1204187480/code/homework/basic/src/test/java/com/coding/api/SystemTest.java @@ -0,0 +1,24 @@ +package com.coding.api; + +import org.junit.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.Arrays; + +/** + * Created by luoziyihao on 2/25/17. + */ +public class SystemTest { + + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Test + public void testArrayCopy() { + int[] a = new int[]{1, 2, 3, 4, 5, 6, 7}; + int[] b = new int[]{11, 22, 33, 44, 55, 66, 77}; + System.arraycopy(a, 2, b, 4, 3); + logger.info("b={}", Arrays.toString(b)); + + } +} diff --git a/group17/1204187480/code/homework/basic/src/test/java/com/coding/basic/ArrayListTest.java b/group17/1204187480/code/homework/basic/src/test/java/com/coding/basic/ArrayListTest.java new file mode 100644 index 0000000000..9241fe72da --- /dev/null +++ b/group17/1204187480/code/homework/basic/src/test/java/com/coding/basic/ArrayListTest.java @@ -0,0 +1,35 @@ +package com.coding.basic; + +import org.junit.Before; +import org.junit.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + + +/** + * Created by luoziyihao on 2/25/17. + */ +public class ArrayListTest { + + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + + private List list = new ArrayList(); + + @Before + public void before() { + + } + + @Test + public void add() throws Exception { + list.add(1); + } + + @Test + public void get() throws Exception { + add(); + logger.info("{}", list.get(0)); + } + +} \ No newline at end of file diff --git a/group17/1204187480/code/homework/parent/pom.xml b/group17/1204187480/code/homework/parent/pom.xml new file mode 100644 index 0000000000..9d29a4d93e --- /dev/null +++ b/group17/1204187480/code/homework/parent/pom.xml @@ -0,0 +1,95 @@ + + 4.0.0 + + com.coding + parent + pom + 1.0-SNAPSHOT + https://github.com/luoziyihao/coding2017 + + + UTF-8 + UTF-8 + UTF-8 + 1.8 + 1.8 + 1.8 + 3.0 + 1.1.7 + 1.2 + 1.2.17 + 4.12 + + + + + + ch.qos.logback + logback-classic + ${logback-classic.version} + + + + commons-logging + commons-logging + ${commons-logging.version} + + + log4j + log4j + ${log4j.version} + + + + + junit + junit + ${junit.version} + + + + + + alimaven + aliyun maven + http://maven.aliyun.com/nexus/content/groups/public/ + + true + + + true + + + + + + alimaven + aliyun maven + http://maven.aliyun.com/nexus/content/groups/public/ + + true + + + true + + + + + + ${project.artifactId} + + + + org.apache.maven.plugins + maven-compiler-plugin + ${maven-compiler-plugin.version} + + ${maven.compiler.source} + ${maven.compiler.target} + + + + + + \ No newline at end of file diff --git a/group17/1204187480/code/homework/pom.xml b/group17/1204187480/code/homework/pom.xml new file mode 100644 index 0000000000..e939b51bd0 --- /dev/null +++ b/group17/1204187480/code/homework/pom.xml @@ -0,0 +1,14 @@ + + + 4.0.0 + com.coding + coding2017 + 1.0-SNAPSHOT + pom + + parent + basic + + + diff --git "a/group17/article/\345\206\231\344\270\200\347\257\207\346\226\207\347\253\240\344\273\213\347\273\215cpu, \345\206\205\345\255\230, \347\243\201\347\233\230, \346\214\207\344\273\244\344\273\245\345\217\212\344\273\226\344\273\254\344\271\213\351\227\264\347\232\204\345\205\263\347\263\273_20170226.md" "b/group17/article/\345\206\231\344\270\200\347\257\207\346\226\207\347\253\240\344\273\213\347\273\215cpu, \345\206\205\345\255\230, \347\243\201\347\233\230, \346\214\207\344\273\244\344\273\245\345\217\212\344\273\226\344\273\254\344\271\213\351\227\264\347\232\204\345\205\263\347\263\273_20170226.md" new file mode 100644 index 0000000000..eee6b340dd --- /dev/null +++ "b/group17/article/\345\206\231\344\270\200\347\257\207\346\226\207\347\253\240\344\273\213\347\273\215cpu, \345\206\205\345\255\230, \347\243\201\347\233\230, \346\214\207\344\273\244\344\273\245\345\217\212\344\273\226\344\273\254\344\271\213\351\227\264\347\232\204\345\205\263\347\263\273_20170226.md" @@ -0,0 +1,56 @@ +# 写一篇文章介绍cpu, 内存, 磁盘, 指令以及他们之间的关系 + +## 须知 +--- + +交作业时请在QQ 号后面填上各自的文章链接, 比如: + +51075907 http://m.blog.csdn.net/article/details?id=57083764 + +## 文章 +--- + +1204187480 + +102228177 + +876385982 + +785396327 + +1059107701 + +240094626 + +82427129 + +296910598 + +1264835468 + +516886559 + +1282579502 + +614982500 + +865797761 + +1540186032 + +176653813 + +116665530 + +51075907 http://m.blog.csdn.net/article/details?id=57083764 + +1158154002 + +345450234 + +919764878 + +1368331120 + +517970312 + From d2ab3e8284001e4019677eadaebbe009ceb9cfa9 Mon Sep 17 00:00:00 2001 From: Ren650119726 <102228177@qq.com> Date: Sun, 26 Feb 2017 12:22:29 +0800 Subject: [PATCH 186/216] =?UTF-8?q?Update=20=E5=86=99=E4=B8=80=E7=AF=87?= =?UTF-8?q?=E6=96=87=E7=AB=A0=E4=BB=8B=E7=BB=8Dcpu,=20=E5=86=85=E5=AD=98,?= =?UTF-8?q?=20=E7=A3=81=E7=9B=98,=20=E6=8C=87=E4=BB=A4=E4=BB=A5=E5=8F=8A?= =?UTF-8?q?=E4=BB=96=E4=BB=AC=E4=B9=8B=E9=97=B4=E7=9A=84=E5=85=B3=E7=B3=BB?= =?UTF-8?q?=5F20170226.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...351\227\264\347\232\204\345\205\263\347\263\273_20170226.md" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/group17/article/\345\206\231\344\270\200\347\257\207\346\226\207\347\253\240\344\273\213\347\273\215cpu, \345\206\205\345\255\230, \347\243\201\347\233\230, \346\214\207\344\273\244\344\273\245\345\217\212\344\273\226\344\273\254\344\271\213\351\227\264\347\232\204\345\205\263\347\263\273_20170226.md" "b/group17/article/\345\206\231\344\270\200\347\257\207\346\226\207\347\253\240\344\273\213\347\273\215cpu, \345\206\205\345\255\230, \347\243\201\347\233\230, \346\214\207\344\273\244\344\273\245\345\217\212\344\273\226\344\273\254\344\271\213\351\227\264\347\232\204\345\205\263\347\263\273_20170226.md" index eee6b340dd..902b5c5cc9 100644 --- "a/group17/article/\345\206\231\344\270\200\347\257\207\346\226\207\347\253\240\344\273\213\347\273\215cpu, \345\206\205\345\255\230, \347\243\201\347\233\230, \346\214\207\344\273\244\344\273\245\345\217\212\344\273\226\344\273\254\344\271\213\351\227\264\347\232\204\345\205\263\347\263\273_20170226.md" +++ "b/group17/article/\345\206\231\344\270\200\347\257\207\346\226\207\347\253\240\344\273\213\347\273\215cpu, \345\206\205\345\255\230, \347\243\201\347\233\230, \346\214\207\344\273\244\344\273\245\345\217\212\344\273\226\344\273\254\344\271\213\351\227\264\347\232\204\345\205\263\347\263\273_20170226.md" @@ -12,7 +12,7 @@ 1204187480 -102228177 +102228177 http://note.youdao.com/noteshare?id=74a51e7f93461dfb77c69a1cf4755624&sub=004F10FA5D2046ABAA060F19C0D2A18F 876385982 From a9f1a9cc0e3bd112ae030d4c2301517c11005356 Mon Sep 17 00:00:00 2001 From: Mengxz Date: Sun, 26 Feb 2017 12:22:54 +0800 Subject: [PATCH 187/216] =?UTF-8?q?Update=20=E5=86=99=E4=B8=80=E7=AF=87?= =?UTF-8?q?=E6=96=87=E7=AB=A0=E4=BB=8B=E7=BB=8Dcpu,=20=E5=86=85=E5=AD=98,?= =?UTF-8?q?=20=E7=A3=81=E7=9B=98,=20=E6=8C=87=E4=BB=A4=E4=BB=A5=E5=8F=8A?= =?UTF-8?q?=E4=BB=96=E4=BB=AC=E4=B9=8B=E9=97=B4=E7=9A=84=E5=85=B3=E7=B3=BB?= =?UTF-8?q?=5F20170226.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...351\227\264\347\232\204\345\205\263\347\263\273_20170226.md" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/group17/article/\345\206\231\344\270\200\347\257\207\346\226\207\347\253\240\344\273\213\347\273\215cpu, \345\206\205\345\255\230, \347\243\201\347\233\230, \346\214\207\344\273\244\344\273\245\345\217\212\344\273\226\344\273\254\344\271\213\351\227\264\347\232\204\345\205\263\347\263\273_20170226.md" "b/group17/article/\345\206\231\344\270\200\347\257\207\346\226\207\347\253\240\344\273\213\347\273\215cpu, \345\206\205\345\255\230, \347\243\201\347\233\230, \346\214\207\344\273\244\344\273\245\345\217\212\344\273\226\344\273\254\344\271\213\351\227\264\347\232\204\345\205\263\347\263\273_20170226.md" index eee6b340dd..63ea5c7f2c 100644 --- "a/group17/article/\345\206\231\344\270\200\347\257\207\346\226\207\347\253\240\344\273\213\347\273\215cpu, \345\206\205\345\255\230, \347\243\201\347\233\230, \346\214\207\344\273\244\344\273\245\345\217\212\344\273\226\344\273\254\344\271\213\351\227\264\347\232\204\345\205\263\347\263\273_20170226.md" +++ "b/group17/article/\345\206\231\344\270\200\347\257\207\346\226\207\347\253\240\344\273\213\347\273\215cpu, \345\206\205\345\255\230, \347\243\201\347\233\230, \346\214\207\344\273\244\344\273\245\345\217\212\344\273\226\344\273\254\344\271\213\351\227\264\347\232\204\345\205\263\347\263\273_20170226.md" @@ -22,7 +22,7 @@ 240094626 -82427129 +82427129 http://blog.csdn.net/walk_er/article/details/57406278 296910598 From 9679cac6b5f12b21a3ebae7a3d9089c56d928afc Mon Sep 17 00:00:00 2001 From: honokaBiu Date: Sat, 25 Feb 2017 23:44:09 -0500 Subject: [PATCH 188/216] honoka.md --- group20/1040154728/1040154728Learning/src/honoka.md | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 group20/1040154728/1040154728Learning/src/honoka.md diff --git a/group20/1040154728/1040154728Learning/src/honoka.md b/group20/1040154728/1040154728Learning/src/honoka.md new file mode 100644 index 0000000000..efb14ee60a --- /dev/null +++ b/group20/1040154728/1040154728Learning/src/honoka.md @@ -0,0 +1,3 @@ +Honoka's blog link is down below. +https://honokabiu.github.io/ +Super simple... From a85c46fd966f2b356e1b67698f6bfe909e4b4bb7 Mon Sep 17 00:00:00 2001 From: honokaBiu Date: Sat, 25 Feb 2017 23:44:56 -0500 Subject: [PATCH 189/216] Update honoka.md --- group20/1040154728/1040154728Learning/src/honoka.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/group20/1040154728/1040154728Learning/src/honoka.md b/group20/1040154728/1040154728Learning/src/honoka.md index efb14ee60a..ff92a7f300 100644 --- a/group20/1040154728/1040154728Learning/src/honoka.md +++ b/group20/1040154728/1040154728Learning/src/honoka.md @@ -1,3 +1,5 @@ -Honoka's blog link is down below. +##Honoka's blog link is down below. + https://honokabiu.github.io/ + Super simple... From 3ea180fc331621bbeff3684cc9ee023009682e6c Mon Sep 17 00:00:00 2001 From: unknown Date: Sun, 26 Feb 2017 13:04:07 +0800 Subject: [PATCH 190/216] commit --- group12/382266293/.classpath | 7 + group12/382266293/.gitignore | 1 + group12/382266293/.project | 17 ++ .../src/Collection/AbstractList.java | 43 ++++ .../src/Collection/Concrete/ArrayList.java | 148 ++++++++++++ .../Collection/Concrete/BinaryTreeNode.java | 126 +++++++++++ .../src/Collection/Concrete/LinkedList.java | 196 ++++++++++++++++ .../src/Collection/Concrete/Queue.java | 84 +++++++ .../src/Collection/Concrete/Stack.java | 106 +++++++++ .../382266293/src/Collection/Iterator.java | 7 + group12/382266293/src/Collection/List.java | 16 ++ .../src/TestCollection/AllTests.java | 11 + .../src/TestCollection/ArrayListTest.java | 173 ++++++++++++++ .../TestCollection/BinaryTreeNodeTest.java | 54 +++++ .../src/TestCollection/LinkedListTest.java | 212 ++++++++++++++++++ .../src/TestCollection/QueueTest.java | 98 ++++++++ .../src/TestCollection/StackTest.java | 129 +++++++++++ group12/382266293/src/test.java | 15 ++ group12/382266293/src/util/Print.java | 14 ++ group12/382266293/src/util/TestUtil.java | 78 +++++++ 20 files changed, 1535 insertions(+) create mode 100644 group12/382266293/.classpath create mode 100644 group12/382266293/.gitignore create mode 100644 group12/382266293/.project create mode 100644 group12/382266293/src/Collection/AbstractList.java create mode 100644 group12/382266293/src/Collection/Concrete/ArrayList.java create mode 100644 group12/382266293/src/Collection/Concrete/BinaryTreeNode.java create mode 100644 group12/382266293/src/Collection/Concrete/LinkedList.java create mode 100644 group12/382266293/src/Collection/Concrete/Queue.java create mode 100644 group12/382266293/src/Collection/Concrete/Stack.java create mode 100644 group12/382266293/src/Collection/Iterator.java create mode 100644 group12/382266293/src/Collection/List.java create mode 100644 group12/382266293/src/TestCollection/AllTests.java create mode 100644 group12/382266293/src/TestCollection/ArrayListTest.java create mode 100644 group12/382266293/src/TestCollection/BinaryTreeNodeTest.java create mode 100644 group12/382266293/src/TestCollection/LinkedListTest.java create mode 100644 group12/382266293/src/TestCollection/QueueTest.java create mode 100644 group12/382266293/src/TestCollection/StackTest.java create mode 100644 group12/382266293/src/test.java create mode 100644 group12/382266293/src/util/Print.java create mode 100644 group12/382266293/src/util/TestUtil.java diff --git a/group12/382266293/.classpath b/group12/382266293/.classpath new file mode 100644 index 0000000000..3e0fb272a8 --- /dev/null +++ b/group12/382266293/.classpath @@ -0,0 +1,7 @@ + + + + + + + diff --git a/group12/382266293/.gitignore b/group12/382266293/.gitignore new file mode 100644 index 0000000000..ae3c172604 --- /dev/null +++ b/group12/382266293/.gitignore @@ -0,0 +1 @@ +/bin/ diff --git a/group12/382266293/.project b/group12/382266293/.project new file mode 100644 index 0000000000..1282023911 --- /dev/null +++ b/group12/382266293/.project @@ -0,0 +1,17 @@ + + + 382266293Learning + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git a/group12/382266293/src/Collection/AbstractList.java b/group12/382266293/src/Collection/AbstractList.java new file mode 100644 index 0000000000..a81e76b587 --- /dev/null +++ b/group12/382266293/src/Collection/AbstractList.java @@ -0,0 +1,43 @@ +package Collection; + +public abstract class AbstractList implements List { + + protected static final String PREFIX = "["; + protected static final String SUFFIX = "]"; + protected static final String SEPERATOR = ", "; + protected static final int MAX_SIZE = Integer.MAX_VALUE/3; + + protected void checkIndex(int i) { + if( i < 0 || i > Math.min(size(), MAX_SIZE)) + throw new IndexOutOfBoundsException("Size :" + size()+", Index: " + i); + } + + public boolean isEmpty() { + return size() == 0; + } + + + public int indexOf(E e) { + for (int i = 0; i < size()-1; i++) { + if (get(i).equals(e)) + return i; + } + return -1; + } + + protected abstract Iterator iterator(); + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append(PREFIX); + for (int i = 0; i < size(); i++) { + sb.append(get(i)); + if (i < size()-1) + sb.append(SEPERATOR); + } + sb.append(SUFFIX); + return sb.toString(); + } + +} diff --git a/group12/382266293/src/Collection/Concrete/ArrayList.java b/group12/382266293/src/Collection/Concrete/ArrayList.java new file mode 100644 index 0000000000..3db5ab47e6 --- /dev/null +++ b/group12/382266293/src/Collection/Concrete/ArrayList.java @@ -0,0 +1,148 @@ +package Collection.Concrete; + +import java.util.Arrays; +import java.util.NoSuchElementException; + +import Collection.AbstractList; +import Collection.Iterator; + +public class ArrayList extends AbstractList { + + private E[] elements; + private int size; + private static final int INITIAL_SIZE = 16; + + + public ArrayList() { + elements = (E[]) new Object[INITIAL_SIZE]; + size = 0; + } + + @Override + public void add(E e) { + checkCapacity(); + elements[size++] = e; + } + + private void checkCapacity() { + if (size >= MAX_SIZE) + throw new IndexOutOfBoundsException("Reached max size"); + + if (elements.length - size < INITIAL_SIZE) + grow(); + } + + synchronized private void grow() { + + int newCapacity = size * 2; + newCapacity = (newCapacity < 0 || newCapacity - MAX_SIZE > 0) ? MAX_SIZE : newCapacity; + E[] target = (E[]) new Object[newCapacity]; + System.arraycopy(elements, 0, target, 0, size); + elements = target; + + } + + public void add(int index, E e) { + checkCapacity(); + if (index == size) { + add(e); + return; + } + checkIndex(index); + synchronized (this) { + System.arraycopy(elements, index, elements, index+1, size-index+1); + elements[index] = e; + size++; + } + } + + @Override + public E get(int index) { + checkIndex(index); + return elements[index]; + } + + + public E getLast() { + return get(size-1); + } + + public void addLast(E e) { + add(e); + } + + public E removeLast() { + return elements[--size]; + } + + public E remove(int index) { + checkIndex(index); + E result = elements[index]; + synchronized (this) { + System.arraycopy(elements, index+1, elements, index, size-index-1); + elements[--size] = null; + } + return result; + } + + @Override + public int size() { + return size; + } + + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + Arrays.hashCode(elements); + result = prime * result + size; + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + ArrayList other = (ArrayList) obj; + if (!Arrays.equals(elements, other.elements)) + return false; + if (size != other.size) + return false; + return true; + } + + public Iterator iterator(){ + return new ArrayListIterator(this); + } + + private class ArrayListIterator implements Iterator { + + private ArrayList myArrayList; + private int pos; + + public ArrayListIterator(ArrayList arrayList) { + myArrayList = arrayList; + pos = 0; + } + + @Override + public boolean hasNext() { + return pos < size; + } + + @Override + public E next() { + if (hasNext()) + return (E) elements[pos++]; + throw new NoSuchElementException(); + } + } + + + +} diff --git a/group12/382266293/src/Collection/Concrete/BinaryTreeNode.java b/group12/382266293/src/Collection/Concrete/BinaryTreeNode.java new file mode 100644 index 0000000000..34a9d4253e --- /dev/null +++ b/group12/382266293/src/Collection/Concrete/BinaryTreeNode.java @@ -0,0 +1,126 @@ +package Collection.Concrete; + +public class BinaryTreeNode> { + + private E data; + private BinaryTreeNode left; + private BinaryTreeNode right; + private int size; + private ArrayList myList; + + + + public BinaryTreeNode() { + this.data = null; + this.left = null; + this.right = null; + } + + public BinaryTreeNode(E data) { + this.data = data; + this.left = null; + this.right = null; + } + + public boolean isEmpty() { + return data == null; + } + + public int size() { + return size; + } + + public BinaryTreeNode insert(E o) { + BinaryTreeNode res; + if (isEmpty()) { + data = o; + size++; + return this; + } else { + BinaryTreeNode p = this; + res = new BinaryTreeNode(o); + while (true) { + if (res.getData().compareTo(p.getData()) < 0) { + if (p.left == null) { + p.setLeft(res); + break; + } + p = p.left; + } else if (res.getData().compareTo(p.getData()) > 0) { + if (p.right == null) { + p.setRight(res); + break; + } + p = p.right; + } else { + return null; + } + } + size++; + } + return res; + } + + + + public ArrayList preOrderTraversal(BinaryTreeNode node) { + + if (node != null) { + preOrderTraversal(node.left); + myList.add(node.data); + preOrderTraversal(node.right); + } + return myList; + } + + @Override + public String toString() { + myList = new ArrayList(); + return preOrderTraversal(this).toString(); + } + + public E getData() { + return data; + } + public void setData(E 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; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((data == null) ? 0 : data.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + BinaryTreeNode other = (BinaryTreeNode) obj; + if (data == null) { + if (other.data != null) + return false; + } else if (!data.equals(other.data)) + return false; + return true; + } + +} \ No newline at end of file diff --git a/group12/382266293/src/Collection/Concrete/LinkedList.java b/group12/382266293/src/Collection/Concrete/LinkedList.java new file mode 100644 index 0000000000..66dbd9d8d0 --- /dev/null +++ b/group12/382266293/src/Collection/Concrete/LinkedList.java @@ -0,0 +1,196 @@ +package Collection.Concrete; + +import java.util.NoSuchElementException; +import Collection.AbstractList; +import Collection.Iterator; + + +public class LinkedList extends AbstractList { + + private Node head; + private int size; + + public LinkedList() { + this.head = new Node(null); + this.size = 0; + } + + @Override + public void add(E e) { + addLast(e); + } + + + @Override + public E get(int index) { + checkIndex(index); + return getNode(index).data; + } + + public E getFirst() { + return get(0); + } + + public E getLast() { + return get(size-1); + } + + + public void add(int index, E e) { + if (index == size) { + addLast(e); + return; + } + + if (index == 0) { + addFirst(e); + return; + } + + checkIndex(index); + Node pNode = new Node(e); + Node p = getNode(index); + synchronized (this) { + getNode(index-1).next = pNode; + pNode.next = p; + size++; + } + } + + public void addFirst(E e){ + checkCapacity(); + Node pNode = new Node(e); + Node oldHead = head; + head = pNode; + pNode.next = oldHead; + size++; + return; + } + + public void addLast(E e){ + if (size == 0) { + addFirst(e); + return; + } + + checkCapacity(); + Node res = new Node(e); + setLastNode(res); + size++; + return; + } + + public E removeFirst(){ + return remove(0); + } + public E removeLast(){ + return remove(size-1); + } + + public E remove(int index) { + checkIndex(index); + Node pNode = getNode(index); + if (index == 0) { + head = head.next; + } else if (index == size-1 ) { + getNode(index-1).next = null; + } else { + getNode(index-1).next = getNode(index+1); + } + size--; + return pNode.data; + } + + @Override + public int size() { + return size; + } + + public Iterator iterator(){ + return new LinkedListIterator(this); + } + + private void checkCapacity() { + if (size > MAX_SIZE) + throw new IndexOutOfBoundsException("Reached max capacity: "+ MAX_SIZE); + } + + private Node getNode(int index) { + if (size == 0) + return head; + + Node pNode = head; + for ( int i = 0; i < index ; i++) { + pNode = pNode.next; + } + return pNode; + } + + private void setLastNode(Node res) { + getNode(size-1).next = res; + } + + private static class Node { + E data; + Node next; + + public Node(E data) { + this.data = data; + this.next = null; + } + + @Override + public String toString() { + return data.toString(); + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((data == null) ? 0 : data.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + Node other = (Node) obj; + if (data == null) { + if (other.data != null) + return false; + } else if (!data.equals(other.data)) + return false; + return true; + } + } + + @SuppressWarnings("hiding") + private class LinkedListIterator implements Iterator { + + private LinkedList myLinkedList; + private int pos; + + public LinkedListIterator(LinkedList linkedList) { + myLinkedList = linkedList; + pos = 0; + } + + @Override + public boolean hasNext() { + return pos < size; + } + + @Override + public E next() { + if (hasNext()) + return (E) get(pos++); + throw new NoSuchElementException(); + } + } +} diff --git a/group12/382266293/src/Collection/Concrete/Queue.java b/group12/382266293/src/Collection/Concrete/Queue.java new file mode 100644 index 0000000000..300fb633af --- /dev/null +++ b/group12/382266293/src/Collection/Concrete/Queue.java @@ -0,0 +1,84 @@ +package Collection.Concrete; +import java.util.NoSuchElementException; + +import Collection.AbstractList; +import Collection.Iterator; + +public class Queue extends AbstractList { + + private LinkedList myList; + + public Queue() { + this.myList = new LinkedList(); + } + + public void enQueue(E e){ + myList.addLast(e); + } + + public E deQueue(){ + if (0 == size()) + return null; + return myList.removeFirst(); + } + + @Override + public void add(E e) { + enQueue(e); + } + + @Override + public E get(int index) { + if (0 == size()) + return null; + return myList.get(index); + } + + public E element() { + if (0 == size()) + return null; + return myList.getFirst(); + } + + + @Override + public int size() { + return myList.size(); + } + + @Override + protected Iterator iterator() { + return myList.iterator(); + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((myList == null) ? 0 : myList.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + Queue other = (Queue) obj; + if (myList == null) { + if (other.myList != null) + return false; + } else if (!myList.equals(other.myList)) + return false; + return true; + } + + + + + + +} diff --git a/group12/382266293/src/Collection/Concrete/Stack.java b/group12/382266293/src/Collection/Concrete/Stack.java new file mode 100644 index 0000000000..17ec4364fa --- /dev/null +++ b/group12/382266293/src/Collection/Concrete/Stack.java @@ -0,0 +1,106 @@ +package Collection.Concrete; + +import java.util.EmptyStackException; +import java.util.NoSuchElementException; + +import Collection.AbstractList; +import Collection.Iterator; + +public class Stack extends AbstractList { + + private ArrayList myList; + + public Stack() { + this.myList = new ArrayList(); + } + + public void push(E e){ + myList.addLast(e); + } + + public E pop(){ + checkEmpty(); + return myList.removeLast(); + } + + private void checkEmpty() { + if (0 == size()) + throw new EmptyStackException(); + } + + public E peek(){ + checkEmpty(); + return myList.getLast(); + } + + public int size(){ + return myList.size(); + } + + @Override + public void add(E e) { + push(e); + } + + @Override + public E get(int index) { + checkEmpty(); + return myList.get(size() - index - 1); + } + + @Override + protected Iterator iterator() { + return new StackIterator(myList); + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((myList == null) ? 0 : myList.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + Stack other = (Stack) obj; + if (myList == null) { + if (other.myList != null) + return false; + } else if (!myList.equals(other.myList)) + return false; + return true; + } + + private class StackIterator implements Iterator { + + private ArrayList myArrayList; + private int pos; + + public StackIterator(ArrayList myList) { + myArrayList = myList; + pos = 0; + } + + @Override + public boolean hasNext() { + return pos < size(); + } + + @Override + public E next() { + if (hasNext()) + return (E) get(pos); + throw new NoSuchElementException(); + } + } + + + +} diff --git a/group12/382266293/src/Collection/Iterator.java b/group12/382266293/src/Collection/Iterator.java new file mode 100644 index 0000000000..d51656a3a8 --- /dev/null +++ b/group12/382266293/src/Collection/Iterator.java @@ -0,0 +1,7 @@ +package Collection; + +public interface Iterator { + + public boolean hasNext(); + public E next(); +} diff --git a/group12/382266293/src/Collection/List.java b/group12/382266293/src/Collection/List.java new file mode 100644 index 0000000000..7ddb685cac --- /dev/null +++ b/group12/382266293/src/Collection/List.java @@ -0,0 +1,16 @@ +package Collection; + +public interface List { + + public void add(E e); + + public int size(); + + public E get(int index); + + public boolean isEmpty(); + + public int indexOf(E e); + + +} diff --git a/group12/382266293/src/TestCollection/AllTests.java b/group12/382266293/src/TestCollection/AllTests.java new file mode 100644 index 0000000000..cd4eeadb58 --- /dev/null +++ b/group12/382266293/src/TestCollection/AllTests.java @@ -0,0 +1,11 @@ +package TestCollection; + +import org.junit.runner.RunWith; +import org.junit.runners.Suite; +import org.junit.runners.Suite.SuiteClasses; + +@RunWith(Suite.class) +@SuiteClasses({ ArrayListTest.class, BinaryTreeNodeTest.class, LinkedListTest.class, QueueTest.class, StackTest.class }) +public class AllTests { + +} diff --git a/group12/382266293/src/TestCollection/ArrayListTest.java b/group12/382266293/src/TestCollection/ArrayListTest.java new file mode 100644 index 0000000000..f29580616f --- /dev/null +++ b/group12/382266293/src/TestCollection/ArrayListTest.java @@ -0,0 +1,173 @@ +package TestCollection; + +import static util.Print.*; +import static util.TestUtil.*; +import java.util.Date; +import java.util.NoSuchElementException; +import java.util.Random; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + + +import Collection.Iterator; +import Collection.List; +import Collection.Concrete.ArrayList; +import junit.framework.TestCase; + +public class ArrayListTest extends TestCase { + + + private ArrayList myAL; + private static Random rnd = new Random(); + + @Before + public void setUp() throws Exception { + + myAL = new ArrayList(); + assertEquals(true,myAL.isEmpty()); + + } + + @After + public void tearDown() throws Exception { + myAL = null; + } + + @Test + public void testRawTypeArrayList() { + + List rawList = new ArrayList(); + assertEquals(rawList.size(), 0); + rawList.add(new Date()); + assertEquals(1, rawList.size()); + } + + @Test + public void testEmpty() { + + assertEquals(true,myAL.isEmpty()); + + myAL.add(5); + assertEquals(false,myAL.isEmpty()); + + int num = getRandomNumber(); + addIntWithNatureOrder(myAL, num); + assertEquals(false,myAL.isEmpty()); + + } + + @Test + public void testAddIntAutoBoxing() { + + myAL.add(5); + myAL.add(5); + myAL.add(5); + myAL.add(1,10); + int c = myAL.get(1); + assertEquals(10,c); + + assertEquals(4,myAL.size()); + myAL.add(4,15); + int a = myAL.get(0); + Integer b = myAL.get(1); + c = myAL.get(2); + int d = myAL.get(3); + int e = myAL.get(4); + assertEquals(5,a); + assertEquals(new Integer(10),b); + assertEquals(5,c); + assertEquals(5,d); + assertEquals(15,e); + } + + @Test + public void testGet() { + + int[] result = addRandomInt(myAL, getRandomNumber()); + + int actual,expected; + + for (int i = 0; i < result.length; i++) { + actual = myAL.get(i); + expected = result[i]; + assertEquals(expected, actual); + } + + } + + @Test + public void testRemove() { + + addIntWithNatureOrder(myAL, 100); + + testRemoveAndGetFromTail(myAL); + try { + myAL.remove(10); + fail("no exception thrown"); + } catch (Exception e) { + assertEquals(IndexOutOfBoundsException.class, e.getClass()); + } + + } + + @Test + public void testSize() { + + assertEquals(0,myAL.size()); + int num = getRandomNumber(); + addIntWithNatureOrder(myAL, num); + assertEquals(num,myAL.size()); + } + + + + @Test + public void testGrow() { + + int actualSize = 12345; + + addIntWithNatureOrder(myAL, actualSize); + + assertEquals(actualSize,myAL.size()); + } + + + @Test + public void testIterator() { + + addIntWithNatureOrder(myAL,100); + + Iterator it = myAL.iterator(); + + for(int i = 0; it.hasNext(); i++){ + int actual = it.next(); + assertEquals(i,actual); + } + + try { + it.next(); + } catch (NoSuchElementException ex) { + assertEquals(ex.getClass(),NoSuchElementException.class); + } + } + + @Test + public void testIndexOf() { + + int num = 200; + addIntWithNatureOrder(myAL,num); + + int expected,actual; + for (int i = 0; i < num-1; i++) { + expected = i; + actual = myAL.indexOf(i); + assertEquals(expected, actual); + } + + assertEquals(-1, myAL.indexOf(-1*getRandomNumber())); + + } + +} diff --git a/group12/382266293/src/TestCollection/BinaryTreeNodeTest.java b/group12/382266293/src/TestCollection/BinaryTreeNodeTest.java new file mode 100644 index 0000000000..275ef59484 --- /dev/null +++ b/group12/382266293/src/TestCollection/BinaryTreeNodeTest.java @@ -0,0 +1,54 @@ +package TestCollection; + +import static util.Print.*; +import java.util.Random; +import java.util.Set; +import java.util.TreeSet; +import static util.TestUtil.*; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +import Collection.Concrete.BinaryTreeNode; +import junit.framework.TestCase; + +public class BinaryTreeNodeTest extends TestCase { + + private BinaryTreeNode myTree; + + @Before + public void setUp() throws Exception { + myTree = new BinaryTreeNode(); + assertEquals(0, myTree.size()); + } + + @After + public void tearDown() throws Exception { + myTree = null; + } + + @Test + public void testInsert() { + Set expected = new TreeSet(); + int size = getRandomNumber(); + int j = 0 ; + while (expected.size() != size) { + j = getRandomNumber(); + expected.add(j); + myTree.insert(j); + } + + assertEquals(size,myTree.size()); + assertEquals(expected.toString(),myTree.toString()); + } + + public void testSize() { + + for (int i = 0; i < getRandomNumber(); i++) { + myTree.insert(18); + myTree.insert(-19); + myTree.insert(1); + assertEquals(3,myTree.size()); + } + } +} \ No newline at end of file diff --git a/group12/382266293/src/TestCollection/LinkedListTest.java b/group12/382266293/src/TestCollection/LinkedListTest.java new file mode 100644 index 0000000000..8b9fad15eb --- /dev/null +++ b/group12/382266293/src/TestCollection/LinkedListTest.java @@ -0,0 +1,212 @@ +package TestCollection; + +import static util.Print.*; +import static util.TestUtil.*; +import java.util.Date; +import java.util.NoSuchElementException; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +import Collection.Iterator; +import Collection.List; +import Collection.Concrete.LinkedList; +import junit.framework.TestCase; + + +public class LinkedListTest extends TestCase { + + LinkedList myLL; + + @Before + public void setUp() throws Exception { + myLL = new LinkedList(); + assertEquals(0,myLL.size()); + } + + @After + public void tearDown() throws Exception { + myLL = null; + } + + @Test + public void testLinkedList() { + List rawList = new LinkedList(); + assertEquals(rawList.size(), 0); + rawList.add(new Date()); + assertEquals(1, rawList.size()); + + } + + @Test + public void testAddE() { + myLL.add("s"); + assertEquals(1,myLL.size()); + assertEquals(false,myLL.isEmpty()); + } + + @Test + public void testAddStringE() { + String a; + + addString(myLL,30); + println(myLL.get(0)); + +// for (int i = 0 ; i < 29; i++) { +// a = "" + i; +// assertEquals(myLL.get(i),a); +// } + } + + @Test + public void testAddIndex() { + String a; + for (int i = 0 ; i < 30; i++) { + a = "" + i; + myLL.add(a); + } + + String ss = "ss"; + myLL.add(3,ss); + assertEquals(myLL.get(3), ss); + assertEquals(myLL.get(2), "2"); + assertEquals(myLL.get(4), "3"); + + } + + public void testAddFirst() { + String a; + for (int i = 0 ; i < 20; i++) { + a = "" + i; + myLL.add(a); + } + + String ss = "bba"; + myLL.addFirst(ss); + assertEquals(ss,myLL.get(0)); + assertEquals(21, myLL.size()); + + ; + for (int i = 1 ; i < myLL.size(); i++) { + a = (i-1) + ""; + assertEquals(a, myLL.get(i)); + } + } + + public void testAddLast() { + String a; + for (int i = 0 ; i < 25; i++) { + a = "" + i; + myLL.add(a); + } + + String ss = "25"; + myLL.addLast(ss); + int size = myLL.size(); + assertEquals(26, size); + + for (int i = 0 ; i < size; i++) { + a = i + ""; + assertEquals(a, myLL.get(i)); + } + } + + @Test + public void testRemoveFirst() { + + String a = ""; + String result = ""; + for(int i = 0; i < 10; i++) { + myLL.add(i+""); + } + + myLL.removeFirst(); + assertEquals(9, myLL.size()); + + for(int i = 0; i < myLL.size(); i++) { + a = i+1 + ""; + assertEquals(a, myLL.get(i)); + } + + int size = myLL.size(); + for(int i = 0; i < size; i++) { + a = i+1 +""; + result = myLL.removeFirst(); + assertEquals(a, result); + } + + assertEquals(0, myLL.size()); + } + + @Test + public void testRemoveLast() { + + String a = ""; + String result = ""; + for(int i = 0; i < 10; i++) { + myLL.add(i+""); + } + + myLL.removeLast(); + assertEquals(9, myLL.size()); + + for(int i = 0; i < myLL.size(); i++) { + a = i + ""; + assertEquals(a, myLL.get(i)); + } + + int size = myLL.size(); + for(int i = 0; i < size; i++) { + a = myLL.size()-1 +""; + result = myLL.removeLast(); + assertEquals(a, result); + } + + assertEquals(0, myLL.size()); + + } + + + @Test + public void testRemove() { + + String res = ""; + String a = ""; + for(int i = 0; i < 10; i++) { + myLL.add(i+""); + } + + for(int i = myLL.size()-1; i >= 0; i--) { + a = myLL.get(i); + res = myLL.remove(i); + assertEquals(i, myLL.size()); + assertEquals(a,res); + } + } + + @Test + public void testSize() { + assertEquals(0,myLL.size()); + } + + @Test + public void testIterator() { + for(int i = 0; i<10; i++) { + myLL.add(i+""); + } + Iterator it = myLL.iterator(); + + for(int i = 0; it.hasNext(); i++){ + String res = it.next(); + assertEquals(i+"",res); + } + + try { + it.next(); + } catch (NoSuchElementException ex) { + assertEquals(ex.getClass(),NoSuchElementException.class); + } + } + + +} diff --git a/group12/382266293/src/TestCollection/QueueTest.java b/group12/382266293/src/TestCollection/QueueTest.java new file mode 100644 index 0000000000..01a9aa31f2 --- /dev/null +++ b/group12/382266293/src/TestCollection/QueueTest.java @@ -0,0 +1,98 @@ +package TestCollection; + +import static util.Print.*; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import static util.TestUtil.*; +import Collection.Concrete.Queue; +import junit.framework.TestCase; + +public class QueueTest extends TestCase { + + private Queue myQueue; + + @Before + public void setUp() throws Exception { + myQueue= new Queue(); + } + + @After + public void tearDown() throws Exception { + myQueue = null; + } + + @Test + public void testIsEmpty() { + assertEquals(true, myQueue.isEmpty()); + myQueue.enQueue(getRandomNumber()); + assertEquals(false, myQueue.isEmpty()); + } + + @Test + public void testEnQueue() { + + enQueueIntWithNatureOrder(myQueue, getRandomNumber()); + + } + + @Test + public void testDeQueue() { + enQueueIntWithNatureOrder(myQueue, getRandomNumber()); + int size = myQueue.size(); + for (int i = 0; i < size ; i++) { + assertEquals(size-i, myQueue.size()); + int expect = i; + int actual = myQueue.deQueue(); + assertEquals(expect, actual); + } + + assertEquals(null, myQueue.deQueue()); + assertEquals(null, myQueue.element()); + assertEquals(null, myQueue.get(0)); + + } + + @Test + public void testelement() { + + int expected = 0; + int element1 = 0; + int repeated = 0; + + for (int i = 0; i < 10; i++) { + myQueue.enQueue(i); + expected = i; + + element1 = myQueue.element(); + assertEquals(expected, element1); + + for (int j = 0; j < i; j++) { + repeated = myQueue.element(); + assertEquals(expected, repeated); + } + myQueue.deQueue(); + } + + } + + @Test + public void testSize() { + for (int i = 0; i < 10000; i++) { + assertEquals(i, myQueue.size()); + myQueue.enQueue(i); + } + } + + @Test + public void testAdd() { + for (int i = 0; i < 10; i++) { + myQueue.add(i); + Integer actual = new Integer(myQueue.get(i)); + Integer expected = new Integer(i); + assertEquals(expected, actual); + } + } + + +} diff --git a/group12/382266293/src/TestCollection/StackTest.java b/group12/382266293/src/TestCollection/StackTest.java new file mode 100644 index 0000000000..3784a9b972 --- /dev/null +++ b/group12/382266293/src/TestCollection/StackTest.java @@ -0,0 +1,129 @@ +package TestCollection; + +import static util.Print.*; + +import java.util.EmptyStackException; +import static util.TestUtil.*; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +import Collection.Concrete.Stack; +import junit.framework.TestCase; + +public class StackTest extends TestCase { + + Stack myStack; + + @Before + public void setUp() throws Exception { + myStack= new Stack(); + } + + @After + public void tearDown() throws Exception { + myStack = null; + } + + @Test + public void testIsEmpty() { + assertEquals(true, myStack.isEmpty()); + myStack.push(getRandomNumber()); + assertEquals(false, myStack.isEmpty()); + } + + @Test + public void testPush() { + for (int i = 0; i < 10; i++) { + assertEquals(i, myStack.size()); + myStack.push(i); + } + } + + @Test + public void testPop() { + testPush(); + int size = myStack.size(); + for (int i = size; i > 0; i--) { + assertEquals(i, myStack.size()); + int expect = i-1; + assertEquals(i, myStack.size()); + int actual = myStack.pop(); + assertEquals(expect, actual); + } + + try { + myStack.pop(); + fail("no exception throw"); + } catch (Exception e) { + assertEquals(EmptyStackException.class, e.getClass()); + } + } + + @Test + public void testPeek() { + + int expected = 0; + int peek1 = 0; + int repeated = 0; + + for (int i = 0; i < 10; i++) { + myStack.push(i); + expected = i; + + peek1 = myStack.peek(); + assertEquals(expected, peek1); + + for (int j = 0; j < i; j++) { + repeated = myStack.peek(); + assertEquals(expected, repeated); + } + } + + } + + + public void testGet() { + + try { + myStack.get(getRandomNumber()); + fail("no exception throw"); + } catch (Exception e) { + assertEquals(EmptyStackException.class, e.getClass()); + } + + } + + @Test + public void testSize() { + for (int i = 0; i < 10000; i++) { + assertEquals(i, myStack.size()); + myStack.push(i); + } + } + + @Test + public void testAdd() { + myStack.push(5); + myStack.push(10); + myStack.push(15); + println(myStack.get(0)); + println(myStack.get(1)); + println(myStack.get(2)); + + } + + @Test + public void testPopPushAndPeek() { + for (int i = 0; i < 10; i++) { + int expected = i; + myStack.push(i); + int a = 0; + myStack.push(a); + myStack.pop(); + int actual = myStack.peek(); + assertEquals(expected, actual); + } + } + +} diff --git a/group12/382266293/src/test.java b/group12/382266293/src/test.java new file mode 100644 index 0000000000..e4e7fead2d --- /dev/null +++ b/group12/382266293/src/test.java @@ -0,0 +1,15 @@ +import java.util.ArrayList; +import java.util.Queue; +import java.util.Stack; +import java.util.concurrent.PriorityBlockingQueue; +import static util.Print.*; + +public class test { + + public static void main(String[] args) { + Queue queue = new PriorityBlockingQueue(); + println(queue.poll()); + + } + +} diff --git a/group12/382266293/src/util/Print.java b/group12/382266293/src/util/Print.java new file mode 100644 index 0000000000..b2ae48552b --- /dev/null +++ b/group12/382266293/src/util/Print.java @@ -0,0 +1,14 @@ +package util; + + +public class Print { + + public static void print(Object o){ + System.out.print(o); + } + + public static void println(Object o){ + System.out.println(o); + } + +} diff --git a/group12/382266293/src/util/TestUtil.java b/group12/382266293/src/util/TestUtil.java new file mode 100644 index 0000000000..2dfeeade7f --- /dev/null +++ b/group12/382266293/src/util/TestUtil.java @@ -0,0 +1,78 @@ +package util; + +import java.util.Random; + +import Collection.List; +import Collection.Concrete.ArrayList; +import Collection.Concrete.LinkedList; +import Collection.Concrete.Queue; +import junit.framework.TestCase; + + +public class TestUtil extends TestCase { + + private static Random random = new Random(); + private static final int RANDOM_BOUND = 2<<15; + private static final int RANDOM_SIZE = 500; + + + public static int getRandomNumber() { + return random.nextInt(RANDOM_SIZE); + } + + public static void addIntWithNatureOrder(List myList, int numbers) { + + for (int acutal = 0; acutal < numbers ; acutal++) { + myList.add(acutal); + } + } + + public static int[] addRandomInt(List myList, int numbers) { + + int actual = 0; + int[] result = new int[numbers]; + for (int i = 0; i < numbers ; i++) { + actual = random.nextInt(RANDOM_BOUND); + result[i] = actual; + myList.add(actual); + } + return result; + } + + public static void addString(List myList, int num) { + + String actual; + for (int index = 0; index < num ; index++) { + actual = index + ""; + myList.add(actual); + } + } + + public static void testRemoveAndGetFromTail(ArrayList myList) { + E get; + E remove; + for(int i = myList.size()-1; i >= 0; i--) { + get = myList.get(i); + remove = myList.remove(i); + assertEquals(get,remove); + } + } + + public static void testRemoveAndGetFromTail(LinkedList myList) { + E get; + E remove; + for(int i = myList.size()-1; i >= 0; i--) { + get = myList.get(i); + remove = myList.remove(i); + assertEquals(get,remove); + } + } + + public static void enQueueIntWithNatureOrder(Queue myQueue, int numbers) { + + for (int acutal = 0; acutal < numbers ; acutal++) { + myQueue.enQueue(acutal); + } + } + +} From a9c6a64d73872d1c693fbc5ec10f35d67d8a2895 Mon Sep 17 00:00:00 2001 From: duxl Date: Sun, 26 Feb 2017 13:09:16 +0800 Subject: [PATCH 191/216] =?UTF-8?q?0226=E4=BD=9C=E4=B8=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 实现了ArrayList,LinkedList,Queue,Stack --- .../0226/src/com/coding/basic/ArrayList.java | 63 +++++++++++ .../0226/src/com/coding/basic/Iterator.java | 6 ++ .../0226/src/com/coding/basic/LinkedList.java | 101 ++++++++++++++++++ .../0226/src/com/coding/basic/List.java | 9 ++ .../0226/src/com/coding/basic/Queue.java | 28 +++++ .../0226/src/com/coding/basic/Stack.java | 38 +++++++ 6 files changed, 245 insertions(+) create mode 100644 group16/1287642108/0226/src/com/coding/basic/ArrayList.java create mode 100644 group16/1287642108/0226/src/com/coding/basic/Iterator.java create mode 100644 group16/1287642108/0226/src/com/coding/basic/LinkedList.java create mode 100644 group16/1287642108/0226/src/com/coding/basic/List.java create mode 100644 group16/1287642108/0226/src/com/coding/basic/Queue.java create mode 100644 group16/1287642108/0226/src/com/coding/basic/Stack.java diff --git a/group16/1287642108/0226/src/com/coding/basic/ArrayList.java b/group16/1287642108/0226/src/com/coding/basic/ArrayList.java new file mode 100644 index 0000000000..e287419dc0 --- /dev/null +++ b/group16/1287642108/0226/src/com/coding/basic/ArrayList.java @@ -0,0 +1,63 @@ +package com.coding.basic; + +public class ArrayList implements List { + + private int size = 0; + + private Object[] elementData = new Object[100]; + + public void add(Object o) { + IncrementsCapacity(size + 1); + elementData[size++] = o; + + } + + public void add(int index, Object o) { + checkIndex(index); + IncrementsCapacity(size + 1); + System.arraycopy(elementData, index, elementData, index + 1, size - index); + elementData[index] = o; + size++; + } + + public Object get(int index) { + checkIndex(index); + return elementData[index]; + } + + public Object remove(int index) { + checkIndex(index); + Object o = elementData[index]; + System.arraycopy(elementData, index + 1, elementData, index, size - index - 1); + elementData[--size] = null; + return o; + } + + public int size() { + return size; + } + + public int length() { + return elementData.length; + } + + // + private void IncrementsCapacity(int num) { + if (num > elementData.length) { + int oldCapacity = elementData.length; // ǰ鳤 + int newCapacity = ((num + oldCapacity) * 3) >> 2; // ǰ鳤ȵ1.5 + if (newCapacity - num < 0) { + newCapacity = num; // Dz,ֱΪֵ + } + Object[] oldelements = elementData; + elementData = new Object[newCapacity]; + System.arraycopy(oldelements, 0, elementData, 0, size); + } + } + + // ±Խж + private void checkIndex(int index) { + if (index >= size || index < 0) + throw new IndexOutOfBoundsException("±Խ"); + } +} diff --git a/group16/1287642108/0226/src/com/coding/basic/Iterator.java b/group16/1287642108/0226/src/com/coding/basic/Iterator.java new file mode 100644 index 0000000000..e7cbd474ec --- /dev/null +++ b/group16/1287642108/0226/src/com/coding/basic/Iterator.java @@ -0,0 +1,6 @@ +package com.coding.basic; + +public interface Iterator { + public boolean hasNext(); + public Object next(); +} diff --git a/group16/1287642108/0226/src/com/coding/basic/LinkedList.java b/group16/1287642108/0226/src/com/coding/basic/LinkedList.java new file mode 100644 index 0000000000..99c92fb9f1 --- /dev/null +++ b/group16/1287642108/0226/src/com/coding/basic/LinkedList.java @@ -0,0 +1,101 @@ +package com.coding.basic; + +public class LinkedList implements List { + + private Node head; + private Node tail; + private int size = 0 ; + + public void add(Object o){ + addLast(o); + } + + public void add(int index, Object o) { + if (index == 0) { + addFirst(o); + } else if (index >= size) { + addLast(o); + } else { + Node node = new Node(); + node.data = o; + node.next = getNode(index); + getNode(index - 1).next = node; + size++; + } + } + + public Object get(int index) { + Node node = getNode(index); + return node.data; + } + + public Object remove(int index){ + Node currentNode = getNode(index); + Node prevNode = getNode(index - 1); + Node lastNode = getNode(index + 1); + prevNode.next = lastNode; + size--; + return currentNode.data; + } + + public int size(){ + return size; + } + + public void addFirst(Object o){ + Node node=new Node(); + node.data = o; + node.next = head; + head = node; + size++; + } + public void addLast(Object o){ + Node node=new Node(); + node.data = o; + node.next = null; + Node lastNode = getNode(size-1); + lastNode.next = node; + size++; + } + public Object removeFirst(){ + Object obj = getNode(0).data; + Node node = getNode(1); + node.next = head; + size--; + return obj; + } + public Object removeLast(){ + Object obj = getNode(size - 1).data; + Node node = getNode(size - 2); + node.next = null; + size--; + return obj; + } + + //ȡڵ + public Node getNode(int index){ + checkIndex(index); + if(index == 0 ){ + return head; + }else if(index == size -1 ){ + return tail; + }else{ + Node node = head; + for(int i=0;i= size || index < 0) + throw new IndexOutOfBoundsException("±Խ"); + } + + private static class Node { + Object data; + Node next; + } +} diff --git a/group16/1287642108/0226/src/com/coding/basic/List.java b/group16/1287642108/0226/src/com/coding/basic/List.java new file mode 100644 index 0000000000..10d13b5832 --- /dev/null +++ b/group16/1287642108/0226/src/com/coding/basic/List.java @@ -0,0 +1,9 @@ +package com.coding.basic; + +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(); +} diff --git a/group16/1287642108/0226/src/com/coding/basic/Queue.java b/group16/1287642108/0226/src/com/coding/basic/Queue.java new file mode 100644 index 0000000000..95dee3d81b --- /dev/null +++ b/group16/1287642108/0226/src/com/coding/basic/Queue.java @@ -0,0 +1,28 @@ +package com.coding.basic; + +public class Queue { + private LinkedList elementData = new LinkedList(); + + public void enQueue(Object o){ + elementData.addLast(o); + } + + public Object deQueue(){ + if (isEmpty()) { + return null; + }else{ + return elementData.removeFirst(); + } + } + + public boolean isEmpty(){ + if (elementData.size() == 0) { + return true; + } + return false; + } + + public int size(){ + return elementData.size(); + } +} diff --git a/group16/1287642108/0226/src/com/coding/basic/Stack.java b/group16/1287642108/0226/src/com/coding/basic/Stack.java new file mode 100644 index 0000000000..c0b7da89f8 --- /dev/null +++ b/group16/1287642108/0226/src/com/coding/basic/Stack.java @@ -0,0 +1,38 @@ +package com.coding.basic; + +public class Stack { + private ArrayList elementData = new ArrayList(); + + public void push(Object o) { + if (isEmpty()) { + elementData.add(elementData.length() - 1, o); + } + elementData.add(elementData.length() - elementData.size() - 1, o); + } + + public Object pop() { + if (isEmpty()) { + return null; + } + return elementData.remove(elementData.length() - elementData.size() - 1); + } + + public Object peek() { + if (isEmpty()) { + return null; + } + return elementData.get(elementData.length() - elementData.size() - 1); + } + + public boolean isEmpty() { + if (elementData.size() == 0) { + return true; + } + return false; + } + + public int size() { + return elementData.size(); + } + +} From 1c4c321667ea4ed52ed8df39802925eb44e1a530 Mon Sep 17 00:00:00 2001 From: luoziyihao Date: Sun, 26 Feb 2017 13:48:31 +0800 Subject: [PATCH 192/216] rm spare .gitignore --- group17/.gitignore | 16 ---------------- 1 file changed, 16 deletions(-) delete mode 100644 group17/.gitignore diff --git a/group17/.gitignore b/group17/.gitignore deleted file mode 100644 index 4e10476e66..0000000000 --- a/group17/.gitignore +++ /dev/null @@ -1,16 +0,0 @@ -*.class - -# Mobile Tools for Java (J2ME) -.mtj.tmp/ - -# Package Files # -*.jar -*.war -*.ear - -# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml -hs_err_pid* - -#ide config -.metadata -.recommenders From cf6ea465b53bea972f6ae5007c7dcc6a4d49f8cc Mon Sep 17 00:00:00 2001 From: luoziyihao Date: Sun, 26 Feb 2017 14:02:02 +0800 Subject: [PATCH 193/216] ok LinkedList --- .../java/com/coding/basic/LinkedList.java | 24 ++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/group17/1204187480/code/homework/basic/src/main/java/com/coding/basic/LinkedList.java b/group17/1204187480/code/homework/basic/src/main/java/com/coding/basic/LinkedList.java index 706dafe820..175d3adb74 100644 --- a/group17/1204187480/code/homework/basic/src/main/java/com/coding/basic/LinkedList.java +++ b/group17/1204187480/code/homework/basic/src/main/java/com/coding/basic/LinkedList.java @@ -4,6 +4,8 @@ public class LinkedList implements List { private Node head; private int size = 0; + private Iterator iterator = new LinkedListIterator(); + public void add(Object o) { Node newNode = new Node(o, null); @@ -95,7 +97,7 @@ public Object removeLast() { } public Iterator iterator() { - return null; + return iterator; } private void checkIndex(int index) { @@ -122,4 +124,24 @@ public Node(Object data, Node next) { this.next = next; } } + + private class LinkedListIterator implements Iterator{ + + private Node next; + + @Override + public boolean hasNext() { + return next != null; + } + + @Override + public Object next() { + if (next == null) { + throw new IndexOutOfBoundsException("there is no node in list"); + } + Node ret = next; + next = next.next; + return ret.data; + } + } } From 306b41b325671fb7420952ad0788ea6be114d674 Mon Sep 17 00:00:00 2001 From: luoziyihao Date: Sun, 26 Feb 2017 14:23:37 +0800 Subject: [PATCH 194/216] ok queue, Stack --- .../src/main/java/com/coding/basic/Queue.java | 15 ++++++++++----- .../src/main/java/com/coding/basic/Stack.java | 18 +++++++++++++----- 2 files changed, 23 insertions(+), 10 deletions(-) diff --git a/group17/1204187480/code/homework/basic/src/main/java/com/coding/basic/Queue.java b/group17/1204187480/code/homework/basic/src/main/java/com/coding/basic/Queue.java index 36e516e266..0f6caaec6f 100644 --- a/group17/1204187480/code/homework/basic/src/main/java/com/coding/basic/Queue.java +++ b/group17/1204187480/code/homework/basic/src/main/java/com/coding/basic/Queue.java @@ -1,19 +1,24 @@ package com.coding.basic; +import java.util.Arrays; + public class Queue { - - public void enQueue(Object o){ + + private LinkedList elementData = new LinkedList(); + + public void enQueue(Object o){ + elementData.add(o); } public Object deQueue(){ - return null; + return elementData.remove(0); } public boolean isEmpty(){ - return false; + return size() == 0; } public int size(){ - return -1; + return elementData.size(); } } diff --git a/group17/1204187480/code/homework/basic/src/main/java/com/coding/basic/Stack.java b/group17/1204187480/code/homework/basic/src/main/java/com/coding/basic/Stack.java index a5a04de76d..7d91c326e0 100644 --- a/group17/1204187480/code/homework/basic/src/main/java/com/coding/basic/Stack.java +++ b/group17/1204187480/code/homework/basic/src/main/java/com/coding/basic/Stack.java @@ -3,20 +3,28 @@ public class Stack { private ArrayList elementData = new ArrayList(); - public void push(Object o){ + public void push(Object o){ + elementData.add(o); } public Object pop(){ - return null; + if (isEmpty()) { + throw new IllegalStateException("the stack is empty"); + } + return elementData.remove(elementData.size() - 1); } public Object peek(){ - return null; + if (isEmpty()) { + throw new IllegalStateException("the stack is empty"); + } + return elementData.get(elementData.size() - 1); } + public boolean isEmpty(){ - return false; + return size() == 0; } public int size(){ - return -1; + return elementData.size(); } } From 22d30e299d5006d7c59306d5112b389160a3eee9 Mon Sep 17 00:00:00 2001 From: Lucifer Date: Sun, 26 Feb 2017 14:39:45 +0800 Subject: [PATCH 195/216] 441908378 week1 homework --- group12/441908378/ArrayList.java | 50 +++++++++++ group12/441908378/BinaryTreeNode.java | 47 ++++++++++ group12/441908378/LinkedList.java | 121 ++++++++++++++++++++++++++ group12/441908378/Queue.java | 39 +++++++++ group12/441908378/Stack.java | 30 +++++++ 5 files changed, 287 insertions(+) create mode 100755 group12/441908378/ArrayList.java create mode 100755 group12/441908378/BinaryTreeNode.java create mode 100755 group12/441908378/LinkedList.java create mode 100755 group12/441908378/Queue.java create mode 100755 group12/441908378/Stack.java diff --git a/group12/441908378/ArrayList.java b/group12/441908378/ArrayList.java new file mode 100755 index 0000000000..45e495867c --- /dev/null +++ b/group12/441908378/ArrayList.java @@ -0,0 +1,50 @@ +import java.util.Arrays; + +public class ArrayList { + +private int size = 0; + +private Object[] elementData = new Object[100]; + +public void enlargeCapacity(int minCapacity){ + int oldCapacity=elementData.length; + if(oldCapacityb){ + return left; + }else{ + return right; + } + } + + +} diff --git a/group12/441908378/LinkedList.java b/group12/441908378/LinkedList.java new file mode 100755 index 0000000000..0d0339bc01 --- /dev/null +++ b/group12/441908378/LinkedList.java @@ -0,0 +1,121 @@ +public class LinkedList { + +private Node head; + +private static class Node{ + Object data; + Node next; +} + +public boolean hasNext(Node a){ + if(a.next!=null){ + return true; + } + return false; +} + +public Node getIndex(int index){ + Node a=head.next; + for(int i=0;i Date: Sun, 26 Feb 2017 15:35:34 +0800 Subject: [PATCH 196/216] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=BD=9C=E4=B8=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../guodong/datastructure/BinaryTreeNode.java | 44 ++++-- .../com/guodong/datastructure/LinkedList.java | 99 +++++++++++- .../src/com/guodong/datastructure/Queue.java | 24 +-- .../src/com/guodong/datastructure/Stack.java | 29 ++-- .../datastructure/test/ArrayListTest.java | 100 ++++++++++-- .../test/BinaryTreeNodeTest.java | 37 +++++ .../datastructure/test/LinkedListTest.java | 143 ++++++++++++++++++ .../guodong/datastructure/test/QueueTest.java | 62 ++++++++ .../guodong/datastructure/test/StackTest.java | 46 ++++++ 9 files changed, 536 insertions(+), 48 deletions(-) create mode 100644 group12/377401843/learning_1/src/com/guodong/datastructure/test/BinaryTreeNodeTest.java create mode 100644 group12/377401843/learning_1/src/com/guodong/datastructure/test/LinkedListTest.java create mode 100644 group12/377401843/learning_1/src/com/guodong/datastructure/test/QueueTest.java create mode 100644 group12/377401843/learning_1/src/com/guodong/datastructure/test/StackTest.java diff --git a/group12/377401843/learning_1/src/com/guodong/datastructure/BinaryTreeNode.java b/group12/377401843/learning_1/src/com/guodong/datastructure/BinaryTreeNode.java index 933e72acda..677eff3dab 100644 --- a/group12/377401843/learning_1/src/com/guodong/datastructure/BinaryTreeNode.java +++ b/group12/377401843/learning_1/src/com/guodong/datastructure/BinaryTreeNode.java @@ -1,32 +1,58 @@ package com.guodong.datastructure; public class BinaryTreeNode { - - private Object data; + + private int data; private BinaryTreeNode left; private BinaryTreeNode right; - - public Object getData() { + + public BinaryTreeNode(int data) { + this.data = data; + } + + public int getData() { return data; } - public void setData(Object data) { + + public void setData(int 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){ - return null; + + public BinaryTreeNode insert(int o) { + + if (o < data) { + if (left != null) { + left.insert(o); + } else { + left = new BinaryTreeNode(o); + return left; + } + } else { + if (right != null) { + right.insert(o); + } else { + right = new BinaryTreeNode(o); + return right; + } + } + + return null; } - + } diff --git a/group12/377401843/learning_1/src/com/guodong/datastructure/LinkedList.java b/group12/377401843/learning_1/src/com/guodong/datastructure/LinkedList.java index 2424a304dc..a7dc12694e 100644 --- a/group12/377401843/learning_1/src/com/guodong/datastructure/LinkedList.java +++ b/group12/377401843/learning_1/src/com/guodong/datastructure/LinkedList.java @@ -1,5 +1,7 @@ package com.guodong.datastructure; +import java.util.NoSuchElementException; + public class LinkedList implements List { private int size; @@ -59,6 +61,10 @@ public Object get(int index) { return getNodeByIndex(index).data; } + public Object getLast() { + return last.data; + } + /** * 根据下标移除链表元素 * @@ -94,28 +100,80 @@ public Object remove(int index) { return data; } + /** + * 返回List长度 + */ public int size() { return size; } - + /** + * 向列表头部添加元素 + * + * @param o + */ public void addFirst(Object o) { + Node n = head; + Node newNode = new Node(o, n); + + head = newNode; + if (n == null) { + last = newNode; + } + size++; } + /** + * 向列表尾部添加元素 + * + * @param o + */ public void addLast(Object o) { linkLast(o); } + /** + * 移除链表第一个元素 + * + * @return + */ public Object removeFirst() { - return null; + Node n = head; + if (n == null) { + throw new NoSuchElementException(); + } + Object data = n.data; + Node nextNode = n.next; + + n.data = null; + n.next = null; + + head = nextNode; + if (nextNode == null) { + last = null; + } + + size--; + return data; } public Object removeLast() { - return null; - } + Node n = last; + if (n == null) { + throw new NoSuchElementException(); + } + Object data = n.data; + Node prevNode = getNodeByIndex(size - 2); + n.data = null; + if (prevNode == null) { + head = null; + } else { + prevNode.next = null; + } + last = prevNode; - public Iterator iterator() { - return null; + size--; + return data; } /** @@ -128,6 +186,9 @@ public Iterator iterator() { * @return */ private Node getNodeByIndex(int index) { + if (index < 0) { + return null; + } Node n = head; for (int i = 0; i < index; i++) { n = n.next; @@ -195,4 +256,30 @@ private static class Node { this.next = next; } } + + public Iterator iterator() { + return new LinkedListIterator(); + } + + private class LinkedListIterator implements Iterator { + private Node current; + + private int index; + + @Override + public boolean hasNext() { + return index < size; + } + + @Override + public Object next() { + if (current == null) { + current = getNodeByIndex(index); + } + Object data = current.data; + current = current.next; + index++; + return data; + } + } } diff --git a/group12/377401843/learning_1/src/com/guodong/datastructure/Queue.java b/group12/377401843/learning_1/src/com/guodong/datastructure/Queue.java index d016046bc5..b14751aab7 100644 --- a/group12/377401843/learning_1/src/com/guodong/datastructure/Queue.java +++ b/group12/377401843/learning_1/src/com/guodong/datastructure/Queue.java @@ -1,19 +1,21 @@ package com.guodong.datastructure; public class Queue { - - public void enQueue(Object o){ + private LinkedList element = new LinkedList(); + + public void enQueue(Object o) { + element.addLast(o); } - - public Object deQueue(){ - return null; + + public Object deQueue() { + return element.removeFirst(); } - - public boolean isEmpty(){ - return false; + + public boolean isEmpty() { + return element.size() == 0; } - - public int size(){ - return -1; + + public int size() { + return element.size(); } } diff --git a/group12/377401843/learning_1/src/com/guodong/datastructure/Stack.java b/group12/377401843/learning_1/src/com/guodong/datastructure/Stack.java index a61c7424aa..f743d0dd3b 100644 --- a/group12/377401843/learning_1/src/com/guodong/datastructure/Stack.java +++ b/group12/377401843/learning_1/src/com/guodong/datastructure/Stack.java @@ -1,22 +1,25 @@ package com.guodong.datastructure; public class Stack { - private ArrayList elementData = new ArrayList(); - - public void push(Object o){ + private LinkedList elementData = new LinkedList(); + + public void push(Object o) { + elementData.addLast(o); } - - public Object pop(){ - return null; + + public Object pop() { + return elementData.removeLast(); } - - public Object peek(){ - return null; + + public Object peek() { + return elementData.getLast(); } - public boolean isEmpty(){ - return false; + + public boolean isEmpty() { + return elementData.size() == 0; } - public int size(){ - return -1; + + public int size() { + return elementData.size(); } } diff --git a/group12/377401843/learning_1/src/com/guodong/datastructure/test/ArrayListTest.java b/group12/377401843/learning_1/src/com/guodong/datastructure/test/ArrayListTest.java index e22d84f72c..ec3a7600a4 100644 --- a/group12/377401843/learning_1/src/com/guodong/datastructure/test/ArrayListTest.java +++ b/group12/377401843/learning_1/src/com/guodong/datastructure/test/ArrayListTest.java @@ -2,17 +2,20 @@ import static org.junit.Assert.*; - import org.junit.After; import org.junit.Before; import org.junit.Test; import com.guodong.datastructure.ArrayList; +import com.guodong.datastructure.Iterator; public class ArrayListTest { + ArrayList arrayList; + @Before public void setUp() throws Exception { + arrayList = new ArrayList(); } @After @@ -21,33 +24,112 @@ public void tearDown() throws Exception { @Test public void testAddObject() { - ArrayList arrayList = new ArrayList(); - arrayList.add(1); - assertEquals(1, arrayList.get(0)); + // 测试新增 + arrayList.add(0); + assertEquals(0, arrayList.get(0)); + assertEquals(1, arrayList.size()); + + // 测试扩充 + for (int i = 1; i < 101; i++) { + arrayList.add(i); + } + assertEquals(101, arrayList.size()); + } + + @Test(expected = IndexOutOfBoundsException.class) + public void testExceptionForAdd1() { + // 测试新增下标异常时,是否可以正确抛出异常 + arrayList.add(-1, 2); + } + + @Test(expected = IndexOutOfBoundsException.class) + public void testExceptionForAdd2() { + // 测试新增下标异常时,是否可以正确抛出异常 + arrayList.add(1, 3); } @Test public void testAddIntObject() { - fail("Not yet implemented"); + // 测试下标新增 + arrayList.add(0, 1); + arrayList.add(1, 2); + arrayList.add(2, 3); + arrayList.add(3, 4); + assertEquals(4, arrayList.size()); + + // 测试中间插入 + arrayList.add(2, 5); + assertEquals(5, arrayList.size()); // 测试插入之后长度 + assertEquals(5, arrayList.get(2)); + assertEquals(4, arrayList.get(4)); // 测试插入之后原来数据是否后移 + assertEquals(3, arrayList.get(3)); // 测试插入之后原来数据是否后移 + + } + + @Test(expected = IndexOutOfBoundsException.class) + public void testExceptionForGet1() { + // 测试Get时,下标异常,是否可以正确抛出异常 + arrayList.get(-1); + } + + @Test(expected = IndexOutOfBoundsException.class) + public void testExceptionForGet2() { + // 测试Get时,下标异常,是否可以正确抛出异常 + arrayList.get(0); } @Test public void testGet() { - fail("Not yet implemented"); + arrayList.add(1); + arrayList.add(2); + arrayList.add(3); + assertEquals(1, arrayList.get(0)); + assertEquals(2, arrayList.get(1)); + assertEquals(3, arrayList.get(2)); + } + + @Test(expected = IndexOutOfBoundsException.class) + public void testExceptionForRemove1() { + arrayList.remove(-1); + } + + @Test(expected = IndexOutOfBoundsException.class) + public void testExceptionForRemove2() { + arrayList.remove(0); + } + + @Test(expected = IndexOutOfBoundsException.class) + public void testExceptionForRemove3() { + arrayList.remove(1); } @Test public void testRemove() { - fail("Not yet implemented"); + arrayList.add(1); + arrayList.remove(0); + assertEquals(0, arrayList.size()); + + arrayList.add(1); + arrayList.add(2); + arrayList.remove(0); + assertEquals(1, arrayList.size()); + assertEquals(2, arrayList.get(0)); } @Test public void testSize() { - fail("Not yet implemented"); + arrayList.add(1); + assertEquals(1, arrayList.size()); } @Test public void testIterator() { - fail("Not yet implemented"); + Iterator iterator = arrayList.iterator(); + assertFalse(iterator.hasNext()); + + arrayList.add(1); + assertTrue(iterator.hasNext()); + assertEquals(1, iterator.next()); + assertFalse(iterator.hasNext()); } } diff --git a/group12/377401843/learning_1/src/com/guodong/datastructure/test/BinaryTreeNodeTest.java b/group12/377401843/learning_1/src/com/guodong/datastructure/test/BinaryTreeNodeTest.java new file mode 100644 index 0000000000..83972b7776 --- /dev/null +++ b/group12/377401843/learning_1/src/com/guodong/datastructure/test/BinaryTreeNodeTest.java @@ -0,0 +1,37 @@ +package com.guodong.datastructure.test; + +import static org.junit.Assert.*; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +import com.guodong.datastructure.BinaryTreeNode; + +public class BinaryTreeNodeTest { + + private BinaryTreeNode binaryTreeNode; + + @Before + public void setUp() throws Exception { + binaryTreeNode = new BinaryTreeNode(50); + } + + @After + public void tearDown() throws Exception { + } + + @Test + public void testInsert() { + binaryTreeNode.insert(20); + binaryTreeNode.insert(30); + binaryTreeNode.insert(60); + binaryTreeNode.insert(80); + + assertEquals(20, binaryTreeNode.getLeft().getData()); + assertEquals(30, binaryTreeNode.getLeft().getRight().getData()); + assertEquals(60, binaryTreeNode.getRight().getData()); + assertEquals(80, binaryTreeNode.getRight().getRight().getData()); + } + +} diff --git a/group12/377401843/learning_1/src/com/guodong/datastructure/test/LinkedListTest.java b/group12/377401843/learning_1/src/com/guodong/datastructure/test/LinkedListTest.java new file mode 100644 index 0000000000..054e8f81b4 --- /dev/null +++ b/group12/377401843/learning_1/src/com/guodong/datastructure/test/LinkedListTest.java @@ -0,0 +1,143 @@ +package com.guodong.datastructure.test; + +import static org.junit.Assert.*; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +import com.guodong.datastructure.Iterator; +import com.guodong.datastructure.LinkedList; + +public class LinkedListTest { + + private LinkedList linkedList; + + @Before + public void setUp() throws Exception { + linkedList = new LinkedList(); + } + + @After + public void tearDown() throws Exception { + } + + @Test + public void testAddObject() { + linkedList.add(1); + assertEquals(1, linkedList.size()); + assertEquals(1, linkedList.get(0)); + } + + @Test(expected = IndexOutOfBoundsException.class) + public void testExceptionForAdd1() { + linkedList.add(-1, 1); + } + + @Test(expected = IndexOutOfBoundsException.class) + public void testExceptionForAdd2() { + linkedList.add(1, 1); + } + + @Test + public void testAddIntObject() { + linkedList.add(0, 1); + linkedList.add(1, 2); + assertEquals(1, linkedList.get(0)); + + linkedList.add(1,3); + assertEquals(2, linkedList.get(2)); + assertEquals(3, linkedList.get(1)); + assertEquals(3, linkedList.size()); + } + + @Test(expected = IndexOutOfBoundsException.class) + public void testExceptionForGet1() { + linkedList.get(-1); + } + + @Test(expected = IndexOutOfBoundsException.class) + public void testExceptionForGet2() { + linkedList.get(0); + } + + @Test(expected = IndexOutOfBoundsException.class) + public void testExceptionForGet3() { + linkedList.get(1); + } + + @Test + public void testGet() { + linkedList.add(0, 1); + linkedList.add(1, 2); + assertEquals(2, linkedList.get(1)); + } + + @Test + public void testGetLast() { + linkedList.add(1); + assertEquals(1, linkedList.getLast()); + + linkedList.add(2); + assertEquals(2, linkedList.getLast()); + } + + @Test + public void testRemove() { + linkedList.add(1); + assertEquals(1, linkedList.remove(0)); + assertEquals(0, linkedList.size()); + } + + @Test + public void testSize() { + linkedList.add(1); + linkedList.add(1); + linkedList.add(1); + assertEquals(3, linkedList.size()); + } + + @Test + public void testAddFirst() { + linkedList.addFirst(1); + assertEquals(1, linkedList.get(0)); + + linkedList.addFirst(2); + linkedList.addFirst(3); + assertEquals(3, linkedList.get(0)); + assertEquals(1, linkedList.getLast()); + } + + @Test + public void testAddLast() { + linkedList.addLast(1); + assertEquals(1, linkedList.getLast()); + assertEquals(1, linkedList.get(0)); + } + + @Test + public void testRemoveFirst() { + linkedList.addFirst(1); + assertEquals(1, linkedList.removeFirst()); + assertEquals(0, linkedList.size()); + } + + @Test + public void testRemoveLast() { + linkedList.addLast(2); + assertEquals(2, linkedList.removeLast()); + assertEquals(0, linkedList.size()); + } + + @Test + public void testIterator() { + Iterator iterator = linkedList.iterator(); + assertFalse(iterator.hasNext()); + + linkedList.add(1); + assertTrue(iterator.hasNext()); + assertEquals(1, iterator.next()); + assertFalse(iterator.hasNext()); + } + +} diff --git a/group12/377401843/learning_1/src/com/guodong/datastructure/test/QueueTest.java b/group12/377401843/learning_1/src/com/guodong/datastructure/test/QueueTest.java new file mode 100644 index 0000000000..86a4ebdd68 --- /dev/null +++ b/group12/377401843/learning_1/src/com/guodong/datastructure/test/QueueTest.java @@ -0,0 +1,62 @@ +package com.guodong.datastructure.test; + +import static org.junit.Assert.*; + +import java.util.NoSuchElementException; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +import com.guodong.datastructure.Queue; + +public class QueueTest { + + private Queue queue; + + @Before + public void setUp() throws Exception { + queue = new Queue(); + } + + @After + public void tearDown() throws Exception { + } + + @Test + public void testEnQueue() { + queue.enQueue(1); + assertFalse(queue.isEmpty()); + } + + @Test(expected = NoSuchElementException.class) + public void testDeQueueExecption() { + queue.deQueue(); + } + + @Test + public void testDeQueue() { + queue.enQueue(1); + assertEquals(1, queue.deQueue()); + assertTrue(queue.isEmpty()); + } + + @Test + public void testIsEmpty() { + queue.enQueue(1); + assertFalse(queue.isEmpty()); + + queue.deQueue(); + assertTrue(queue.isEmpty()); + } + + @Test + public void testSize() { + queue.enQueue(1); + queue.enQueue(1); + queue.enQueue(1); + + assertEquals(3, queue.size()); + } + +} diff --git a/group12/377401843/learning_1/src/com/guodong/datastructure/test/StackTest.java b/group12/377401843/learning_1/src/com/guodong/datastructure/test/StackTest.java new file mode 100644 index 0000000000..36781c863f --- /dev/null +++ b/group12/377401843/learning_1/src/com/guodong/datastructure/test/StackTest.java @@ -0,0 +1,46 @@ +package com.guodong.datastructure.test; + +import static org.junit.Assert.*; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +import com.guodong.datastructure.Stack; + +public class StackTest { + + private Stack stack; + + @Before + public void setUp() throws Exception { + stack = new Stack(); + } + + @After + public void tearDown() throws Exception { + } + + @Test + public void testPush() { + stack.push(11); + assertEquals(11, stack.pop()); + assertTrue(stack.isEmpty()); + } + + @Test + public void testPop() { + stack.push(11); + assertEquals(11, stack.pop()); + assertTrue(stack.isEmpty()); + } + + @Test + public void testPeek() { + stack.push(11); + assertEquals(11, stack.peek()); + assertFalse(stack.isEmpty()); + assertEquals(1, stack.size()); + } + +} From 0e784bee5933af193f1ce19530a517a5c5f21352 Mon Sep 17 00:00:00 2001 From: 240094626 Date: Sun, 26 Feb 2017 16:16:55 +0800 Subject: [PATCH 197/216] test code --- .../src/com/coding/basic/impl/ArrayList.java | 15 ++-- .../src/com/coding/basic/impl/BinaryTree.java | 34 ++++++++- .../src/com/coding/basic/impl/LinkedList.java | 29 ++++++-- .../src/com/coding/basic/impl/Queue.java | 6 ++ .../src/com/coding/basic/impl/Stack.java | 10 ++- .../com/coding/basic/test/ArrayListTest.java | 55 ++++++++++++++ .../com/coding/basic/test/LinkedListTest.java | 60 ++++++++++++++++ .../src/com/coding/basic/test/QueueTest.java | 57 +++++++++++++++ .../src/com/coding/basic/test/StackTest.java | 71 +++++++++++++++++++ 9 files changed, 323 insertions(+), 14 deletions(-) create mode 100644 group17/240094626/warm-up/src/com/coding/basic/test/ArrayListTest.java create mode 100644 group17/240094626/warm-up/src/com/coding/basic/test/LinkedListTest.java create mode 100644 group17/240094626/warm-up/src/com/coding/basic/test/QueueTest.java create mode 100644 group17/240094626/warm-up/src/com/coding/basic/test/StackTest.java diff --git a/group17/240094626/warm-up/src/com/coding/basic/impl/ArrayList.java b/group17/240094626/warm-up/src/com/coding/basic/impl/ArrayList.java index c20eb376d4..6486868054 100644 --- a/group17/240094626/warm-up/src/com/coding/basic/impl/ArrayList.java +++ b/group17/240094626/warm-up/src/com/coding/basic/impl/ArrayList.java @@ -1,7 +1,5 @@ package com.coding.basic.impl; -import java.util.Arrays; - import com.coding.basic.Iterator; import com.coding.basic.List; @@ -13,7 +11,6 @@ */ public class ArrayList implements List { - /** * @comment:元素数组 */ @@ -83,7 +80,7 @@ public void add(Object o) { @Override public void add(int index, Object o) { if( index > size || index < 0){ - throw new IndexOutOfBoundsException("Index:"+index); + throw new IndexOutOfBoundsException("Index:"+index+",size:"+size); } grow(size+1); System.arraycopy(data, index, data, index+1, size-index); @@ -117,8 +114,14 @@ public int size() { @Override public String toString() { - return "ArrayList [data=" + Arrays.toString(data) + ", size=" + size - + "]"; + StringBuilder sb = new StringBuilder(); + for(int i =0; i 0){ + sb.append(","); + } + sb.append(data[i]); + } + return String.format("ArrayList {data=[%s], size=%d}", sb.toString(),size); } public Iterator iterator(){ diff --git a/group17/240094626/warm-up/src/com/coding/basic/impl/BinaryTree.java b/group17/240094626/warm-up/src/com/coding/basic/impl/BinaryTree.java index d9478146bd..41ec919b27 100644 --- a/group17/240094626/warm-up/src/com/coding/basic/impl/BinaryTree.java +++ b/group17/240094626/warm-up/src/com/coding/basic/impl/BinaryTree.java @@ -7,12 +7,25 @@ * */ public class BinaryTree { + /**根结点,初始化为空*/ private Node rootNode = null; + + /** + * 根据key值插入数据data为空的新节点 + * @param key + * @return + */ public Node insert(int key){ return insert(key,null); } + /** + * 根据key值插入数据data为o的新节点 + * @param key + * @param o + * @return + */ public Node insert(int key ,Object o){ Node newNode = new Node(key, o); if(rootNode == null){ @@ -34,13 +47,25 @@ public Node insert(int key ,Object o){ }else{ fatherNode.right = newNode; } + size++; return newNode; } + /** + * 根据key值查找结点 + * @param key + * @return + */ public Node getNode(int key){ return get(rootNode, key); } + /** + * 递归算法: 根据开始结点位置和key值查找节点 + * @param n + * @param key + * @return + */ private Node get(Node n,int key){ if(n == null){ return null; @@ -50,11 +75,13 @@ private Node get(Node n,int key){ }else if(key > n.key){ return get(n.left, key); } - return null; + return n; } - - + + + + private static class Node{ @@ -77,6 +104,7 @@ public String toString() { } + } diff --git a/group17/240094626/warm-up/src/com/coding/basic/impl/LinkedList.java b/group17/240094626/warm-up/src/com/coding/basic/impl/LinkedList.java index a48b9e4705..d6284f9bec 100644 --- a/group17/240094626/warm-up/src/com/coding/basic/impl/LinkedList.java +++ b/group17/240094626/warm-up/src/com/coding/basic/impl/LinkedList.java @@ -49,14 +49,14 @@ private Node getNode(int index) { } // 查找从header开始 Node n = header; - if(index < (size >> 1)){ + if(index <= (size >> 1)){ // 往next方向找第index个节点 - for(int i=0; i < index; i++){ + for(int i=0; i <=index; i++){ n = n.next; } }else{ // 往pre方向找第size-index个节点 - for(int i=size-index; i > 0; i--){ + for(int i=size-index; i >0; i--){ n = n.pre; } } @@ -76,7 +76,6 @@ private Object remove(Node n){ Object result = n.data; n.pre.next = n.next; n.next.pre = n.pre; - n.next = n.pre = null; n.data = null; size--; return result; @@ -137,6 +136,21 @@ public Iterator iterator(){ return new LinkedListIterator(); } + + @Override + public String toString() { + Iterator it = iterator(); + StringBuilder sb = new StringBuilder(); + while(it.hasNext()){ + if(sb.length() > 0){ + sb.append(","); + } + sb.append(it.next()); + } + return "LinkedList {nodes=[" + sb + "], size=" + size + "}"; + } + + private static class Node{ Object data; Node pre; @@ -154,6 +168,13 @@ public Node(Object data, Node pre, Node next) { this.pre = pre; this.next = next; } + + @Override + public String toString() { + return "Node {data=" + data + "}"; + } + + } diff --git a/group17/240094626/warm-up/src/com/coding/basic/impl/Queue.java b/group17/240094626/warm-up/src/com/coding/basic/impl/Queue.java index 3a9aa129e2..42fae9217c 100644 --- a/group17/240094626/warm-up/src/com/coding/basic/impl/Queue.java +++ b/group17/240094626/warm-up/src/com/coding/basic/impl/Queue.java @@ -38,6 +38,12 @@ public int size(){ return elementData.size(); } + + @Override + public String toString() { + return "Queue {elementData=" + elementData + "}"; + } + public Iterator iterator(){ return new QueueIterator(); } diff --git a/group17/240094626/warm-up/src/com/coding/basic/impl/Stack.java b/group17/240094626/warm-up/src/com/coding/basic/impl/Stack.java index d4c3158f94..786071f0a1 100644 --- a/group17/240094626/warm-up/src/com/coding/basic/impl/Stack.java +++ b/group17/240094626/warm-up/src/com/coding/basic/impl/Stack.java @@ -50,9 +50,17 @@ public int size(){ return elementData.size(); } + + + @Override + public String toString() { + return "Stack {elementData=" + elementData + "}"; + } + public Iterator iterator(){ return new StackIterator(); } + private class StackIterator implements Iterator{ int index; @@ -70,7 +78,7 @@ public boolean hasNext() { @Override public Object next() { - return elementData.get(index); + return elementData.get(index++); } diff --git a/group17/240094626/warm-up/src/com/coding/basic/test/ArrayListTest.java b/group17/240094626/warm-up/src/com/coding/basic/test/ArrayListTest.java new file mode 100644 index 0000000000..03419f7d0f --- /dev/null +++ b/group17/240094626/warm-up/src/com/coding/basic/test/ArrayListTest.java @@ -0,0 +1,55 @@ +package com.coding.basic.test; + +import static org.junit.Assert.*; + +import org.junit.Test; +import org.junit.runner.JUnitCore; +import org.junit.runner.Result; +import org.junit.runner.notification.Failure; + +import com.coding.basic.impl.ArrayList; + +/** + * ArrayList 简单测试 + * @author 240094626 + * + */ +public class ArrayListTest { + + + @Test + public void test() { + ArrayList list = new ArrayList(); + + System.out.println("******测试add(Object o ):添加第一个元素0******"); + list.add(0); + System.out.println("ArrayList print:"+list.toString()); + + System.out.println("******测试add(int index,Object o):添加第二个元素1******"); + list.add(1, 1); + System.out.println("ArrayList print:"+list.toString()); + + System.out.println("******测试remove(int index):删除第1个元素:0******"); + list.remove(0); + System.out.println("ArrayList print:"+list.toString()); + + System.out.println("******测试add(int Object o):添加第三个元素2******"); + list.add(2); + System.out.println("ArrayList print:"+list.toString()); + + + System.out.println("ArrayList size:"+list.size()); + + System.out.println("******测试get(int index):判断第1个元素是否为1******"); + assertEquals(1, list.get(0)); + } + + public static void main(String[] args) { + Result result = JUnitCore.runClasses(ArrayListTest.class); + for(Failure failure : result.getFailures()){ + System.out.println(failure.toString()); + } + System.out.println("test success!:"+result.wasSuccessful()); + } + +} diff --git a/group17/240094626/warm-up/src/com/coding/basic/test/LinkedListTest.java b/group17/240094626/warm-up/src/com/coding/basic/test/LinkedListTest.java new file mode 100644 index 0000000000..25c8ed80c8 --- /dev/null +++ b/group17/240094626/warm-up/src/com/coding/basic/test/LinkedListTest.java @@ -0,0 +1,60 @@ +package com.coding.basic.test; + +import static org.junit.Assert.*; + +import org.junit.Test; +import org.junit.runner.JUnitCore; +import org.junit.runner.Result; +import org.junit.runner.notification.Failure; + +import com.coding.basic.impl.LinkedList; + +/** + * LinkedList 简单测试 + * @author 240094626 + * + */ +public class LinkedListTest { + + @Test + public void test() { + LinkedList list = new LinkedList(); + + System.out.println("******测试add(Object o ):添加第一个元素0******"); + list.add(0); + System.out.println("LinkedList print:"+list.toString()); + System.out.println("******测试add(int index,Object o):添加第二个元素1******"); + list.add(1); + System.out.println("******测试addLast(Object o):往链表最后添加元素3******"); + list.addLast(3); + System.out.println("******测试addFirst(Object o):往链表最前面添加元素5******"); + list.addFirst(5); + System.out.println("LinkedList print:"+list.toString()); + + System.out.println("******测试remove(int index):删除第4个元素:index=3******"); + list.remove(3); + System.out.println("LinkedList print:"+list.toString()); + + System.out.println("******测试addFirst(int Object o):链表最前面添加素2******"); + list.addFirst(2); + System.out.println("LinkedList print:"+list.toString()); + + // 断言第一个元素为0 + assertEquals(2, list.get(0)); + + list.addLast(3); + list.addFirst(5); + System.out.println("LinkedList print:"+list.toString()); + // 断言最后一个元素为3 + assertEquals(3,list.get(list.size()-1)); + } + + public static void main(String[] args) { + Result result = JUnitCore.runClasses(LinkedListTest.class); + for(Failure failure : result.getFailures()){ + System.out.println(failure.toString()); + } + System.out.println("test success!:"+result.wasSuccessful()); + } + +} diff --git a/group17/240094626/warm-up/src/com/coding/basic/test/QueueTest.java b/group17/240094626/warm-up/src/com/coding/basic/test/QueueTest.java new file mode 100644 index 0000000000..6d653983bd --- /dev/null +++ b/group17/240094626/warm-up/src/com/coding/basic/test/QueueTest.java @@ -0,0 +1,57 @@ +package com.coding.basic.test; + +import static org.junit.Assert.*; + +import org.junit.Test; +import org.junit.runner.JUnitCore; +import org.junit.runner.Result; +import org.junit.runner.notification.Failure; + +import com.coding.basic.impl.Queue; + +/** + * Queue 简单测试 + * @author 240094626 + * + */ +public class QueueTest { + + @Test + public void test() { + Queue queue = new Queue(); + + System.out.println("******测试enQueue(Object o):入队列元素a,b,c******"); + queue.enQueue("a"); + queue.enQueue("b"); + queue.enQueue("c"); + System.out.println("queue:"+queue.toString()); + + // 断言队列不为空 + assertEquals(false,queue.isEmpty()); + + // 断言出队列是a + System.out.println("******测试deQueue(Object o):出队列元素a******"); + assertEquals("a",queue.deQueue()); + System.out.println("queue:"+queue.toString()); + + // 断言出队列是b + System.out.println("******测试deQueue(Object o):出队列元素b******"); + assertEquals("b",queue.deQueue()); + System.out.println("queue:"+queue.toString()); + + // 断言出队列是c + assertEquals("c",queue.deQueue()); + + + + + } + + public static void main(String[] args) { + Result result = JUnitCore.runClasses(QueueTest.class); + for(Failure failure : result.getFailures()){ + System.out.println(failure.toString()); + } + System.out.println("test success!:"+result.wasSuccessful()); + } +} diff --git a/group17/240094626/warm-up/src/com/coding/basic/test/StackTest.java b/group17/240094626/warm-up/src/com/coding/basic/test/StackTest.java new file mode 100644 index 0000000000..9b6c07b8f4 --- /dev/null +++ b/group17/240094626/warm-up/src/com/coding/basic/test/StackTest.java @@ -0,0 +1,71 @@ +package com.coding.basic.test; + +import static org.junit.Assert.*; + +import org.junit.Test; +import org.junit.runner.JUnitCore; +import org.junit.runner.Result; +import org.junit.runner.notification.Failure; + +import com.coding.basic.Iterator; +import com.coding.basic.impl.Stack; + +/** + * stack 简单测试 + * @author 240094626 + * + */ +public class StackTest { + + @Test + public void test() { + Stack stack = new Stack(); + System.out.println("******测试push(Object o):压入第一个元素0******"); + stack.push(0); + System.out.println("Stack print:"+stack.toString()); + + System.out.println("******测试push(Object o):压入第二个元素2******"); + stack.push(2); + System.out.println("Stack print:"+stack.toString()); + + System.out.println("******测试peek():从栈尾取出2,不删除******"); + stack.peek(); + System.out.println("Stack print:"+stack.toString()); + + System.out.println("******测试peek():再次从栈尾取出2,不删除******"); + // 断言出栈为2 + assertEquals(2,stack.peek()); + // 断言size为2 + assertEquals(2,stack.size()); + + System.out.println("******测试pop():末尾元素2出栈,并移除******"); + // 断言出栈为2 + assertEquals(2,stack.pop()); + System.out.println("Stack print:"+stack.toString()); + + // 断言不为空 + assertEquals(false,stack.isEmpty()); + // 断言size为1 + assertEquals(1,stack.size()); + // 添加3,5 两个元素 + stack.push(3); + stack.push(5); + System.out.println("Stack print:"+stack.toString()); + // 测试迭代器 + Iterator it = stack.iterator(); + int i = 1; + while(it.hasNext()){ + System.out.println("第"+i+"个元素:"+it.next()); + i++; + } + + } + public static void main(String[] args) { + Result result = JUnitCore.runClasses(StackTest.class); + for(Failure failure : result.getFailures()){ + System.out.println(failure.toString()); + } + System.out.println("test success!:"+result.wasSuccessful()); + } + +} From ebd58206eb23fe3cf3ffe60a62080218927d8494 Mon Sep 17 00:00:00 2001 From: Li Han Date: Sun, 26 Feb 2017 16:25:16 +0800 Subject: [PATCH 198/216] =?UTF-8?q?=E4=BD=9C=E4=B8=9A=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 作业提交_0226 --- ...350\260\210_\344\275\234\344\270\232.docx" | Bin 0 -> 532875 bytes .../502059278/src/cn/mark/MyLinkedList.java | 67 ++++++++++++++++++ 2 files changed, 67 insertions(+) create mode 100644 "group16/502059278/homework/\350\256\241\347\256\227\346\234\272\346\274\253\350\260\210_\344\275\234\344\270\232.docx" create mode 100644 group16/502059278/src/cn/mark/MyLinkedList.java diff --git "a/group16/502059278/homework/\350\256\241\347\256\227\346\234\272\346\274\253\350\260\210_\344\275\234\344\270\232.docx" "b/group16/502059278/homework/\350\256\241\347\256\227\346\234\272\346\274\253\350\260\210_\344\275\234\344\270\232.docx" new file mode 100644 index 0000000000000000000000000000000000000000..31dfe4c14bd2c5980ba3209f8e697d71c800b157 GIT binary patch literal 532875 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

8x3%iP4hL3e$S6O`@%N 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

Q}Xo1 zS(xyA)GuCJ>3MJ$7Efzn#Wx>hgI!aU zIP)|sAg0_87_j5VQfO!UjK$~M$grP0viV(0>P3a` zN*3or(__1>&u#p~f0$ze-2u-*D)h#3vqs8z0?m0C=4oUL#A>aRh*`HZZvCgm$|-h~ zj9WCXAw^U|M8shY%&|h72=5(J_oVH37q|jKE|+~Vg2rx&3vqE{ZZBrF_}Ig+7v4$6 z5R6$ZMY*eenm;U}wKG6|ihk=@)yo%^4Ylz`yIbV7w#|=Z?cT~wl)63*DjO?>cwGQ(9E{%+l;>8H}0!p^5til(qL| zL`ur$tWPn4j{7UdtjxJdT1&k%WSybNkJBnx`GC)bMnS6y%RCIlX?E9?G@XZnbD`jA z_6=kqs7upe*=O&eJvmkQ3XsA24;J2{eo2HHjzcf^k@X?*V{}%l2$ZUc?hkoUMfMs7L_`o zuEh|G{Tfqjss=QwZ(pjH_<%U6sS?>QRhW8u&3aRiSAhuYCE;3=)Jb_uZ6#r`G!i|H zDszr*U5wc|r1RG32*!vE+xluGcXzh!h-oNrZ29PX>0wC(?_+ONi1L!&RZf{R8Y7vK zy;(pO%&=ifrqI+_h1JkV2ZR_~mED~u$v$#^5i0y+5`Ka(7^20?w4<66!gtUfgoNVI z1#-v7M3%DGY8n~|B7W=J8ajfvt7icbiU)pNumvGyECyO^T@w&l2@C^TnO@YcM2s~B zWi?oRKg3#uk3N31&rmA>jVzv6*guzN}~c9l_;Oix|61S9I%JL2InR zmy@pTV82c{b*{OlZa}lKMWuwNr(yinp~Hj?99v$Qq|Cx&6|rwJVI0OPNL}1kWBITY zGEZ+J9&@DF%%c<^<6n(Jy@iQ5C4>$#kE!AOOigQbd&Mgx)NKR5VThviX&SH`!h&OH zi!m;Mf!oG3iXWh5vg(ahwc1fQ4zq|0GNzT02w`LvHrt5apdY;c+y^TkN&eC z%v?mPtTEe@^5N>J%BoKJfxDtf2G?2FVWgDQ#vNc@`r_h$LAZY4<=)3s3$`Fn z5mTIX532z%i*GZa7@G!qFT;588X>wdg7UphA2ZgdFJF{DUt8bQ(KFm!OF`b5J2)RY z97?Ny$hJK{KB1cF=PzL$#*D;`2GHt&vz7|$Q6rSHy;(ghfdpGlC*u=NhiQ(u4D1V$ z3vF>zqb#q-s5B0!zRU@x7LOK|jZhsI^sX8QI(Lg%i>I13Jfq^5Iv8h|J}fYCW}XwS zfnHab5g8L?3vAcA9e`1$d_yDPFPo}rVq3EuqP1Pn$7$+Ceffi0X{Ijo?UJeE+dw&A`AW%Zw+0B1*rK?hg_PKy8o6xtH~3PWg;DNSvc%+>GLF**T{(@%b&nL{$o zJM~;T+sSGAd>QK5`-~`~fzj2-p$EIePfq!r3Fli{{$n-l)RM;VzXZLdfr4^@Eg@xG zt)Ir2!KY~HScY(wn|T*aqW0AHL`lpU8t4{09_@XGe7){~(y2bUuQ%XwKJQxZ7-|OA z9uN<$g)Z%+%Cu#1xiR(V7SNOnRJYr{^(F_Q-ctpDog4vkzpBHIBT3 zRav|e8MkPkk^+mu1?-z?*copt9$EulSxtm7?5($}Hqx6pfE-F%?Iob8jP!iwZkO94e#~Ba&bn9j&3FN~ zEXfeY_BHRLM>F7<2#Qu4-Ozd#77MLWZ38gs(?U!m<0nYpW{nq=u1Jg#Y58oozx2hd zkau%Bs0fv&Z??;qTfZ&W;B&7^Vd$gMm93;w~?`reU}?CUK)Y)lX%ax@pB&W zBigZFBWk8<7$&GZIrcWD3;p;nNY&S6BgO$>cM+P{D4&&u%0OHkdW>q4vF~5ATwdy6 zKX^8#_%lGcyqYp`EGR&G%ZC-*o7F_zi;?AMhB@XaJ&A#x1SS=)rX{g5K&b9cUX8)= zuJu@3*}zYKz)Gt$$qh;;7r7TNNE=m@mg5uF3SXQFRc>l9@zlI@E}V()gMC~lt#_d# zXbCJl&JUWLC$z%m!L`zBD0#OU6=z)Suj_xefBwNxHmj^Vykr8Yw~>)U>#;a9f}gxV zsDI#In+)mSxpPR?OMSu2(j#7U{VTY^+WN2?SXchUIRAo7 z7-7F{nh$SFV+R4tMeom4AdR@Z#^`qHr=RJIXDb4Ud-ZSM3Xx5#^?%FZl>-~kWh06@ z&4hlg6oX{t8!I?tj?k|^?b-3@WsYZVL}^2$sYJ%r=Sln6*ZmI{hlGoGUEdQg;r?U1Kqa*sqM=< zF}H)#@hm^*C#PsE%<@lYNEnnYki;-pKnP=xFpmOM8-y&o%OS5SCJ(3(G$~&@jCPdi zBmjpgw9+-5$wsi_Jk*b0$UNQSjpm73mxQ5jFUyO+lt0r8oI@iC?DmmN=nILMDOght zb(Ja3Wz(;d#}Rg6w7NbYIX0G8>E?T-wZEgt#cIFqyiz~eDZ@0j=Ud@{pP5TX$I4X7pP>lfosk>$W4;%=tm3~7 z51#Mw*cvoxbNP;8DVGjrU(I?Y$vtvE-af|V zkI&ZzCUon_;MCt&Cii5c+fEfLc*Kr{74_`0dmI7NY(|WHy8ao+K3mQZy_>XVX^$zV zrdxsJ5*lS_H0uf@B@?J{%f61UH-F?wFQo31n1VJAUaUjiUu6&J)I9yJoIUD1Injm+ z3KD9Qx;F$i%i`&(sZ1*4G+i}-BqB>sX_c3!R^(B-TS^PZ|Bz5{)ij2OlMmsUtJY?xrMR z1vk}3qwBNNOwlh|qhGr|Fumz-8K>RCvMs3CJW|u~*%oS;#d&(9@h-jFnix~F<|Ij) zTc%QNs$&g#+PHxGYM;x=%6&Cxri72#LHKgIQ1-o5cM zOD5b%vSmtu8cksCfC4||+d(8(^Jx;hiXuXqO7JT0M(_T3-d6&vK>f6?`{MkLZQVg= zp~=Q7(?mDzT$Rh*aV|62DYp=kK+qcLMr<3RyO1sDH&vG}V2*3s4^-f)h40~fxXM_K z!7akV;yz>|i&vaWHc)1}+g46dpEFotD!17ZKU;0cU zCSG-zI>btAgoTh{an9MdBx3Vhir#+q-3~A5uKX~8EKeb*8EBMDq*hwX#ywPhg{P~9 zE-h1^Ew-a8!mPUxRrr`Cj7Tx&?1vB_O0U`iE&%cM)M^0SUTzCVj-pIKSh{Y)II;1>jy!iO=Wp!;g+BaH2IBB?o{V(QpFeJ!Sv z{`)6an&UUqVsg|jre zr-1|By~C>}qdEa}jaa7G;xSe(Rth^HJ<`syI6;ASu1fe$iBSCWt`wZ_Dqob;S1AO3 z-S6~0b~VIwPMJ9s=FachX0gxuaD2E&bdwk@8N95=?B3}rV1X)y(H>#S%o1+{cX8g} zY$F^QAIIGOM99OEe!b9lpHRU_T<($nh3(q%UZlu3W8c2W?3wx&mR~!njuE56W>Pv0 zR_RJ3%bzLV-jcwfws|+bcb3qO_OSTyctG>%AU>F}8m~v7jo8ylx7TG&eQ7VBIG8V< zI#KrKq^FJ<12M(4qa#6_5?fk$Eh`iF8{;~Nlru)U{LP|MbXXf2}`anahNkU-W0konH4$(_9`9#j&b%ty#XM8VZapfMSTA$MzZ48BH?c#s*2iiTqvwY@_XB&uHqBZBIt5#->ym7Lx=>y2N!OBn%>>E z*QQlfq2%qxnsR@1=2}1CAVf~kfh3B@h?Ph5Nr}g9qoYW@{Pgh_X?Ujr`uKNJXadu= zKr`o2*v7P#kn)dQ`G*r$LHi>oh5D60*F4SCy)o%rMqBt+foSQatBovmQEzog!(+y+ zsot$PF3hn39drO`J%t%i)bWIl=&ZkbOEzsG)LHpcrp?}%{(hAv;H41RQ&ef+Q0r8F z_cQ!GaWo9$On*sPWN-P-ke_1rz{Ig47!y{c-&c5oJ|V%-D5PNSnq9LvMYn0jGv=*h zI;;|NG;5`x%p~N(n9d}*yRaiD+>JYn9og;QKtyP|X#Bkel$HhYm{UK{3A#!f&CmElgx>$~po8v}cGmmkVg|Q4fj07tIM!G16qTQv>255Ya zjjdh`*K~o`rkrRRK5KKqVlJ_Ji5FX$#Ks>@kcDshI46Gj3F z9n-9so-*rSFnh#M(p@4iNcnv;0U?0VC^{Nk7j?;cE&DVf>%CSLKi7FvN`>oAi=k<# zA>ZtEmstc;6n>^3qxj4>%exH`SKstCZUv1l$P&_=g2x)~e{O|$-H|$`()2QNRO#Nc z2ZhP|Ltj5bWg$jNgmYlM`1FzETDM>nJKX5vY+ff~D@KzN5QPcii!|QjyU`WPhGNb% z_PwH5B-Yq)@>l4{xJuf^kiGA;36;;b7)>_S)O;JAs7WNK@ASwfP1E=BF@gN0oydnZ zV1LNK$?hi56)Ak3+ruQ*+k>3Xhf6o(bBQxZox;s9~t;%v|v3kJjbxa7}e5i3d0OYUy>wB$Z~oup}H?7l2Eo) z5pP3kYbVuQ%ml17h9-yS_RYKu`^3M#+6uNapqlQZjF8qlMPl@sSatdps;y}yRpMqz zd#Y*XwX07!&ySxJwM(`WZQEVjz1=k^=JczZOcu5qD8f@1TwxJ3TY3pKh2~CwLS7XN z`$|)y+s@cmQ!Ju%aNAKE-U(P}Tj`{$k8{ie50vuz?4aVJxF^ZO)SHSDz>(c;8$o&{N9^hCBDX2S%rxYpQqXy`Jp)rS zWBeXjrfF}c%IxBcZ3rbhO3c;abR6Adbz{@b91fy1a8q0j<*kt*quiJ!1XaqoMf>+VFx z2h=j2zIQc-8D7eMD>0=>52B2?(7VVYHxb*xI6qZK!N(}Xe{~+xp5~?FEr!?jXn$16 zn$!&8Dsr6Asd;|K>WW&~ftXZN+eFuU4@S=JeZx<)&?~~VIO05)6@j(rF9^_1$ZIwp zW2i0?A!{;1>K)Bn=&@e1@~V|DhtFCCN5yoVtQ(R%%l;U%SH6v*i^3bcd2l#`zh8e! z7xaE9lNZS0qF~-BK&VIeph9VhREK2+3T>P`{9tA^HcQ*NC@y%KXJV`?P^bJ<&#K1o z*m!UWT6{0y8$(?lRYiWDy`y>rNX(j*SdVbNc|c13@Pn~r*jFGWZ&~&x_$F0%gG!*sa@WI~*GC4&ihLhPw}?ed-TYA3Sk!%cnOt@A+DN418jPb6Ncf z^$QDS3ygz#{tPaIB zTT;|@ID<4BDYmcUiBqEqI3DQH4jatdjf>V1RBKQpN!h!=I8 z-{w5-=H}Y7qi4A=56Khdkn#5N_vzgaisGdbE8j}%Sp(5YnD+5|cwj1byw@ z_^1x8h-iKP^fDW?n⁡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 literal 0 HcmV?d00001 diff --git a/group16/502059278/src/cn/mark/MyLinkedList.java b/group16/502059278/src/cn/mark/MyLinkedList.java new file mode 100644 index 0000000000..7f9c3856a2 --- /dev/null +++ b/group16/502059278/src/cn/mark/MyLinkedList.java @@ -0,0 +1,67 @@ +package cn.mark; +/** + * 自定义实现LinkedList数据结构 + * @author hilih + * + */ +public class MyLinkedList implements MyList{ + + private Node head; + private int size;//集合的长度 + + /** + * 添加元素 + */ + @Override + public boolean add(Object o) { + //为空判断 + if ( o == null ){ + System.out.println("不允许null的元素插入!"); + return false; + } + if(head == null){ + head = new Node(); + head.data = o; + }else{ + + } + + return false; + } + + @Override + public boolean add(int index, Object o) { + // TODO Auto-generated method stub + return false; + } + + @Override + public Object get(int index) { + // TODO Auto-generated method stub + return null; + } + + @Override + public Object remove(int index) { + // TODO Auto-generated method stub + return null; + } + + @Override + public int size() { + // TODO Auto-generated method stub + return 0; + } + + private static class Node{ + Object data; + Node next; + } + + + public static void main(String[] args) { + + + } + +} From 5be5c11e941991fb15ac6963696bbedb19f223d6 Mon Sep 17 00:00:00 2001 From: GUK0 <1685605435@qq.com> Date: Sun, 26 Feb 2017 16:43:52 +0800 Subject: [PATCH 199/216] to be test --- group12/247565311/week1/ArrayList.java | 4 +- group12/247565311/week1/Deque.java | 8 +- group12/247565311/week1/LinkedList.java | 110 ++++++++++++++++++------ group12/247565311/week1/Stack.java | 17 +++- 4 files changed, 108 insertions(+), 31 deletions(-) diff --git a/group12/247565311/week1/ArrayList.java b/group12/247565311/week1/ArrayList.java index 3e4c12d7a7..c2643af683 100644 --- a/group12/247565311/week1/ArrayList.java +++ b/group12/247565311/week1/ArrayList.java @@ -36,7 +36,7 @@ public boolean add(E arg0) { @Override public void add(int arg0, E arg1) { - if(arg1 == null || arg0>size+1 || 0>arg0) return ; + if( arg0>size || 0leng){ @@ -134,7 +134,7 @@ public int indexOf(Object arg0) { @Override public boolean isEmpty() { - return this.size==0?true:false; + return this.size==0; } @Override public int lastIndexOf(Object arg0) { diff --git a/group12/247565311/week1/Deque.java b/group12/247565311/week1/Deque.java index 93004bf80d..b71c4b9fac 100644 --- a/group12/247565311/week1/Deque.java +++ b/group12/247565311/week1/Deque.java @@ -11,18 +11,18 @@ public Deque(int arg0){ data = new LinkedList(arg0); } public boolean push(E arg0){ - data.add(arg0); + data.add(data.size(),arg0); size += 1; return true; } public E pop(){ size -= 1; - E res = data.get(size); - data.remove(size); + E res = data.get(0); + data.remove(0); return res; } public E peek(){ - return data.get(size-1); + return data.get(0); } public int size(){ return this.size; diff --git a/group12/247565311/week1/LinkedList.java b/group12/247565311/week1/LinkedList.java index debd53d8d2..c3f0ca2eb8 100644 --- a/group12/247565311/week1/LinkedList.java +++ b/group12/247565311/week1/LinkedList.java @@ -5,7 +5,7 @@ import java.util.List; import java.util.ListIterator; -public class LinkedList implements List { +public class LinkedList implements List,Cloneable { private Node head = null; private Node tail = null; private int size = 0; @@ -24,9 +24,24 @@ public LinkedList(int arg0){ tail.ahead = head; size = 0; } + public Object clone(){ + LinkedList clone = null; + try { + clone = (LinkedList)(super.clone()); + } catch (CloneNotSupportedException e) { + e.printStackTrace(); + } + clone.head = new Node(null); + clone.tail = new Node(null); + clone.size = 0; + for(Node x = head.next;x!=null;x = x.next){ + clone.add(x.val); + } + return clone; + } @Override - public boolean add(E arg0) { - Node n = new Node(arg0); + public boolean add(Object val) { + Node n = new Node(val); n.next = tail; n.ahead = tail.ahead; tail.ahead.next = n; @@ -37,7 +52,7 @@ public boolean add(E arg0) { @Override public void add(int arg0, E arg1) { - if(arg0<0) arg0=0; + if(arg0<0 || arg0>size) arg0=0; Node n=new Node(arg1),p=head; for(int i=0;i arg0) { public E get(int arg0) { E res = null; if(arg0>-1 && arg0 < size){ - + Node n = head; + for(int i=0;i iterator() { @Override public int lastIndexOf(Object arg0) { - - return 0; + boolean flag = arg0==null; + Node n = tail; + for(int i=size-1;i>-1;i--){ + n = n.ahead; + if(flag){ + if(n.val == null) return i; + }else{ + if(arg0.equals(n.val)) return i; + } + } + return -1; } @Override @@ -145,38 +181,59 @@ public ListIterator listIterator(int arg0) { @Override public boolean remove(Object arg0) { - - return false; + Node n = head; + int index = this.indexOf(arg0); + if(index == -1) return false; + for(int i=0;isize-1) return null; + for(int i=0;i arg0) { - - return false; + for(Object o:arg0){ + if(!this.remove(o)) return false; + } + return true; } @Override public boolean retainAll(Collection arg0) { - + // ? return false; } @Override public E set(int arg0, E arg1) { - - return null; + if(arg0<0 || arg0>size-1) return null; + Node n=head; + for(int i=0;i subList(int arg0, int arg1) { @Override public Object[] toArray() { - - return null; + Object[]res = new Object[size]; + Node n = head; + for(int i=0;i(size); } + public boolean isEmpty(){ + return size==0; + } public boolean push(E arg0){ size += 1; data.add(arg0); + return true; + } + public E pop(){ + if(this.isEmpty()) return null; + size -= 1; + E res = data.get(size); + data.remove(size); + return res; + } + public E peek(){ + if(this.isEmpty()) return null; + E res = data.get(size-1); + return res; } - public E pop() } From 836f5118382120922d4697e2ce24fc573e0373c3 Mon Sep 17 00:00:00 2001 From: hugetom <1990902wo.com> Date: Sun, 26 Feb 2017 16:52:23 +0800 Subject: [PATCH 200/216] =?UTF-8?q?xinda=E4=BD=9C=E4=B8=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit List等方法实现 --- group17/865797761/.classpath | 6 + group17/865797761/.gitignore | 1 + group17/865797761/.project | 17 +++ .../.settings/org.eclipse.jdt.core.prefs | 11 ++ .../865797761/src/Collection/ArrayList.java | 135 ++++++++++++++++ .../865797761/src/Collection/Iterable.java | 6 + .../865797761/src/Collection/Iterator.java | 7 + group17/865797761/src/Collection/List.java | 14 ++ .../865797761/src/Collection/MyArrayList.java | 110 +++++++++++++ .../src/Collection/MyLinkedList.java | 144 ++++++++++++++++++ group17/865797761/src/Collection/MyQueue.java | 34 +++++ 11 files changed, 485 insertions(+) create mode 100644 group17/865797761/.classpath create mode 100644 group17/865797761/.gitignore create mode 100644 group17/865797761/.project create mode 100644 group17/865797761/.settings/org.eclipse.jdt.core.prefs create mode 100644 group17/865797761/src/Collection/ArrayList.java create mode 100644 group17/865797761/src/Collection/Iterable.java create mode 100644 group17/865797761/src/Collection/Iterator.java create mode 100644 group17/865797761/src/Collection/List.java create mode 100644 group17/865797761/src/Collection/MyArrayList.java create mode 100644 group17/865797761/src/Collection/MyLinkedList.java create mode 100644 group17/865797761/src/Collection/MyQueue.java diff --git a/group17/865797761/.classpath b/group17/865797761/.classpath new file mode 100644 index 0000000000..fceb4801b5 --- /dev/null +++ b/group17/865797761/.classpath @@ -0,0 +1,6 @@ + + + + + + diff --git a/group17/865797761/.gitignore b/group17/865797761/.gitignore new file mode 100644 index 0000000000..ae3c172604 --- /dev/null +++ b/group17/865797761/.gitignore @@ -0,0 +1 @@ +/bin/ diff --git a/group17/865797761/.project b/group17/865797761/.project new file mode 100644 index 0000000000..a78673e93c --- /dev/null +++ b/group17/865797761/.project @@ -0,0 +1,17 @@ + + + 865797761 + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git a/group17/865797761/.settings/org.eclipse.jdt.core.prefs b/group17/865797761/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000000..3a21537071 --- /dev/null +++ b/group17/865797761/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,11 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/group17/865797761/src/Collection/ArrayList.java b/group17/865797761/src/Collection/ArrayList.java new file mode 100644 index 0000000000..2e9b68d0ea --- /dev/null +++ b/group17/865797761/src/Collection/ArrayList.java @@ -0,0 +1,135 @@ +package Collection ; + +import java.util.Arrays; +import java.util.NoSuchElementException; + +/** + Created by william on 2017/2/25. + */ +public class ArrayList implements List { + private static final int DEFAULT_CAPACITY = 10; + private int size; + private Object[] elementData; + + public ArrayList() { + elementData = new Object[DEFAULT_CAPACITY]; + } + + public ArrayList(int initialCapacity) { + if (initialCapacity < 0) + throw new RuntimeException("ǷʼС!"); + elementData = new Object[initialCapacity]; + } + + public boolean add(T ele) { + grow(); + elementData[size] = ele; + size++; + return true; + } + + public T get(int index) { + checkBounds(index); + return (T) elementData[index]; + } + + public T remove(int index) { + checkBounds(index); + T removeEle = (T) elementData[index]; + System.arraycopy(elementData, index + 1, elementData, index, size - index); + size--; + return removeEle; + } + + public boolean add(int index, T ele) { + checkBounds(index); + size++;//ЧԪȼӣ֤ȼgrowǰЧ + grow(); + //ԭӴindexȡԭindexЧֵƵԭindex+1֮ + System.arraycopy(elementData, index, elementData, index + 1, size - index); + elementData[index] = ele; + return true; + } + + @Override + public boolean remove(T ele) { + int index; + if ((index = indexOf(ele)) == -1) + return false; + remove(index); + return true; + } + + private void checkBounds(int index) { + if (index < 0 || index >= size) + throw new IndexOutOfBoundsException("index : " + index + ", size : [ 0 - " + size + " ]"); + } + + public int size() { + return size; + } + + private void grow() { + if (size >= elementData.length) { + int curLen = elementData.length; + int newLen = curLen + (curLen >> 1) > Integer.MAX_VALUE ? Integer.MAX_VALUE : curLen + (curLen >> 1); + elementData = Arrays.copyOf(elementData, newLen); + } + } + + public boolean isEmpty() { + return size == 0; + } + + @Override + public boolean contains(T ele) { + return indexOf(ele) != -1; + } + + public int indexOf(T ele) { + for (int i = 0; i < size; i++) { + if (ele == null) + if (null == elementData[i]) + return i; + else if (ele.equals(elementData[i])) + return i; + } + return -1; + } + + public Iterator iterator() { + return new Itr(); + } + + private class Itr implements Iterator { + int cursor;//Ԫص± + + @Override + public boolean hasNext() { + return cursor != size; + } + + @Override + public T next() { + if (cursor >= size) + throw new NoSuchElementException(); + return (T) elementData[cursor++]; + } + + @Override + public void remove() { + if (cursor >= size) + throw new NoSuchElementException(); + ArrayList.this.remove(cursor--); + } + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder("[ "); + for (Object ele : elementData) { + sb.append(ele).append(" "); + } + return sb.append("]").toString(); + } +} \ No newline at end of file diff --git a/group17/865797761/src/Collection/Iterable.java b/group17/865797761/src/Collection/Iterable.java new file mode 100644 index 0000000000..04955e1b6e --- /dev/null +++ b/group17/865797761/src/Collection/Iterable.java @@ -0,0 +1,6 @@ +package Collection; + +// +public interface Iterable { + Iterator iterator(); +} \ No newline at end of file diff --git a/group17/865797761/src/Collection/Iterator.java b/group17/865797761/src/Collection/Iterator.java new file mode 100644 index 0000000000..5ff4bbaf79 --- /dev/null +++ b/group17/865797761/src/Collection/Iterator.java @@ -0,0 +1,7 @@ +package Collection; + +public interface Iterator { + public boolean hasNext(); + + public E next(); +} \ No newline at end of file diff --git a/group17/865797761/src/Collection/List.java b/group17/865797761/src/Collection/List.java new file mode 100644 index 0000000000..eeef249f88 --- /dev/null +++ b/group17/865797761/src/Collection/List.java @@ -0,0 +1,14 @@ +package Collection; + +// +public interface List { + public void add(E o); + + public void add(int index, E o); + + public E get(int index); + + public E remove(int index); + + public int size(); +} \ No newline at end of file diff --git a/group17/865797761/src/Collection/MyArrayList.java b/group17/865797761/src/Collection/MyArrayList.java new file mode 100644 index 0000000000..50e2c24d01 --- /dev/null +++ b/group17/865797761/src/Collection/MyArrayList.java @@ -0,0 +1,110 @@ +package Collection; + +import java.util.Arrays; + +public class MyArrayList implements List, Iterable { + private Object[] elementData; + private static final int DEFAULT_SIZE = 10; + private int size; + + public MyArrayList() { + this(DEFAULT_SIZE); + } + + public MyArrayList(int initSize) { + if (initSize < 0) { + throw new IllegalArgumentException(initSize + " < 0"); + } + if (initSize == 0) { + elementData = new Object[DEFAULT_SIZE]; + } + else { + elementData = new Object[initSize]; + } + size = 0; + } + + public void add(E o) { + growIfNeed(); + elementData[size++] = o; + } + + public void add(int index, E o) { + if (index < 0 || index > size) { + throw new IllegalArgumentException("index:" + index); + } + growIfNeed(); + System.arraycopy(elementData, index, elementData, index + 1, size - index); + elementData[index] = o; + size++; + } + + @SuppressWarnings("unchecked") + public E get(int index) { + rangeCheck(index); + return (E) elementData[index]; + } + + public E remove(int index) { + rangeCheck(index); + E target = get(index); + System.arraycopy(elementData, index + 1, elementData, index, size - index - 1); + size--; + return target; + } + + public int size() { + return size; + } + + private void rangeCheck(int index) { + if (index >= size) { + throw new NoSuchElementException("index:" + index); + } + } + + private void growIfNeed() { + if (size == elementData.length) + grow(); + } + + private void grow() { + elementData = Arrays.copyOf(elementData, elementData.length * 2); + } + + @Override + public Iterator iterator() { + return new ArrayIterator<>(); + } + + private class ArrayIterator implements Iterator { + private int currentPos = 0; + + @Override + public boolean hasNext() { + return currentPos < size; + } + + @SuppressWarnings("unchecked") + @Override + public E next() { + rangeCheck(currentPos); + return (E) elementData[currentPos++]; + } + + } + + @Override + public String toString() { + return Arrays.toString(Arrays.copyOf(elementData, size)); + } + +} + +class NoSuchElementException extends RuntimeException { + + public NoSuchElementException(String string) { + super(string); + } + +} \ No newline at end of file diff --git a/group17/865797761/src/Collection/MyLinkedList.java b/group17/865797761/src/Collection/MyLinkedList.java new file mode 100644 index 0000000000..cf7495ab4e --- /dev/null +++ b/group17/865797761/src/Collection/MyLinkedList.java @@ -0,0 +1,144 @@ +package Collection; + +public class MyLinkedList implements List, Iterable { + private Node head; + private int size; + + public MyLinkedList() { + size = 0; + } + + public void add(E o) { + if (head == null) + addFirst(o); + else + addLast(o); + } + + public void addFirst(E o) { + Node oldFirst = head; + head = new Node<>(o, oldFirst); + size++; + } + + public void addLast(E o) { + if (head == null) { + addFirst(o); + } + else { + Node oldLast = movePtrTo(size - 1); + oldLast.next = new Node<>(o, null); + size++; + } + + } + + public void add(int index, E o) { + if (index > size || index < 0) { + throw new IllegalArgumentException("index:" + index); + } + if (index == 0) { + addFirst(o); + return; + } + Node temp = movePtrTo(index - 1); + Node oldNext = temp.next; + Node newNext = new Node<>(o, oldNext); + temp.next = newNext; + size++; + } + + public E remove(int index) { + rangeCheck(index); + E data; + if (index == 0) { + data = head.data; + head = head.next; + } + else { + Node pre = movePtrTo(index - 1); + Node target = pre.next; + pre.next = target.next; + data = target.data; + } + size--; + return data; + } + + public E get(int index) { + rangeCheck(index); + return movePtrTo(index).data; + } + + public int size() { + return size; + } + + private Node movePtrTo(int index) { + Node resultNode = head; + for (int i = 0; i < index; i++) { + resultNode = resultNode.next; + } + return resultNode; + } + + private void rangeCheck(int index) { + if (index >= size) { + throw new NoSuchElementException("index:" + index); + } + } + + @Override + public String toString() { + StringBuilder stringBuilder = new StringBuilder('['); + Node temp = head; + while (temp != null) { + stringBuilder.append(String.valueOf(temp.toString()) + ","); + temp = temp.next; + } + stringBuilder.delete(stringBuilder.length() - 1, stringBuilder.length()); + stringBuilder.append(']'); + return stringBuilder.toString(); + } + + private static class Node { + private T data; + private Node next; + + public Node(T data, Node next) { + this.data = data; + this.next = next; + } + + @Override + public String toString() { + return data.toString(); + } + } + + @Override + public Iterator iterator() { + return new ListIterator(); + } + + private class ListIterator implements Iterator { + Node currentNode; + + public ListIterator() { + currentNode = head; + } + + @Override + public boolean hasNext() { + return currentNode.next != null; + } + + @Override + public E next() { + Node temp = currentNode; + currentNode = currentNode.next; + return temp.data; + } + + } +} diff --git a/group17/865797761/src/Collection/MyQueue.java b/group17/865797761/src/Collection/MyQueue.java new file mode 100644 index 0000000000..f24535e6be --- /dev/null +++ b/group17/865797761/src/Collection/MyQueue.java @@ -0,0 +1,34 @@ +package Collection; + +public class MyQueue { + private MyLinkedList elementData = new MyLinkedList<>(); + + public void enQueue(T o) { + elementData.addLast(o); + } + + public T deQueue() { + if (!isEmpty()) { + return elementData.remove(0); + } + throw new QueueIsEmptyException(); + } + + public boolean isEmpty() { + return elementData.size() == 0; + } + + public int size() { + return elementData.size(); + } +} + +class QueueIsEmptyException extends RuntimeException { + public QueueIsEmptyException() { + super(); + } + + public QueueIsEmptyException(String string) { + super(string); + } +} \ No newline at end of file From 0e8e418718398a42297a3005e15e9014c0c1efa0 Mon Sep 17 00:00:00 2001 From: earliest Date: Sun, 26 Feb 2017 01:56:07 -0800 Subject: [PATCH 201/216] assignment 1, basic data structure implementation --- .../src/com/coding/basic/ArrayList.java | 38 +++- .../src/com/coding/basic/BinaryTreeNode.java | 44 ++++- .../src/com/coding/basic/LinkedList.java | 130 ++++++++++++-- .../src/com/coding/basic/Queue.java | 21 ++- .../src/com/coding/basic/Stack.java | 19 +- .../com/coding/basic/ut/ArrayListTest.java | 37 +++- .../coding/basic/ut/BinaryTreeNodeTest.java | 42 +++++ .../com/coding/basic/ut/LinkedListTest.java | 162 ++++++++++++++++++ .../src/com/coding/basic/ut/QueueTest.java | 54 ++++++ .../src/com/coding/basic/ut/StackTest.java | 66 +++++++ 10 files changed, 566 insertions(+), 47 deletions(-) create mode 100644 group17/1282579502/src/com/coding/basic/ut/BinaryTreeNodeTest.java create mode 100644 group17/1282579502/src/com/coding/basic/ut/LinkedListTest.java create mode 100644 group17/1282579502/src/com/coding/basic/ut/QueueTest.java create mode 100644 group17/1282579502/src/com/coding/basic/ut/StackTest.java diff --git a/group17/1282579502/src/com/coding/basic/ArrayList.java b/group17/1282579502/src/com/coding/basic/ArrayList.java index db8e918503..c07b58281c 100644 --- a/group17/1282579502/src/com/coding/basic/ArrayList.java +++ b/group17/1282579502/src/com/coding/basic/ArrayList.java @@ -1,7 +1,5 @@ package com.coding.basic; -import java.util.Arrays; - public class ArrayList implements List { private int size = 0; @@ -44,8 +42,15 @@ public Object get(int index){ public Object remove(int index) { if(index <0 || index >= size()) throw new ArrayIndexOutOfBoundsException(index + ": Invalid Index."); Object item = elementData[index]; - if(index o, return 1 + * this.data < o, return -1 + * this.data == o, return 0; + */ public BinaryTreeNode insert(Object o){ - return null; + if(!( o instanceof Comparable)) throw new IllegalArgumentException(o + " is NOT comparable. "); + if(data == null) { + data = o; + return this; + } + + Comparable cdata = (Comparable) data; + if(cdata.compareTo(o)>0){ + if(left == null) { + left = new BinaryTreeNode(o); + return left; + } + else{ + return left.insert(o); + } + } + else if(cdata.compareTo(o)<0){ + if(right == null){ + right = new BinaryTreeNode(o); + return right; + }else{ + return right.insert(o); + } + } + else{ + throw new IllegalArgumentException(o + " encountered a duplication."); + } } } diff --git a/group17/1282579502/src/com/coding/basic/LinkedList.java b/group17/1282579502/src/com/coding/basic/LinkedList.java index e2c4e5e795..55db7e97bc 100644 --- a/group17/1282579502/src/com/coding/basic/LinkedList.java +++ b/group17/1282579502/src/com/coding/basic/LinkedList.java @@ -2,45 +2,147 @@ public class LinkedList implements List { - private Node head; + private Node head = null; + private Node tail = null; + private int size = 0; public void add(Object o){ - + if(head == null){ + head = new Node(o); + tail = head; + }else{ + tail.next = new Node(o); + tail = tail.next; + } + size ++; } + /** + * Add to index from 0 to size + * Add to index at 0 is equivalent to addFirst + * Add to index at size is equivalent to add and addLast + * + */ public void add(int index , Object o){ - + if(index < 0 || index >size+1) throw new IndexOutOfBoundsException(index + ": Invalid Index"); + Node newNode = new Node(o); + //manage head node + if(index == 0){ + if(head == null){ + this.add(o); + } + else{ + newNode.next = head; + head = newNode; + size++; + } + } + else if (index == size){ + this.add(o); + } + else{ + Node prevNode = getNodeAt(index-1); + newNode.next = prevNode.next; + prevNode.next = newNode; + size ++; + } } public Object get(int index){ - return null; + Node c = getNodeAt(index); + if(c == null ) return null; + return c.data; + } + + private Node getNodeAt(int index){ + if(index < 0 || index >size-1) throw new IndexOutOfBoundsException(index + ": Invalid Index"); + Node c = head; + while(index-- > 0 ){ + if(c != null) c = c.next; + else return null; + } + return c; } + public Object remove(int index){ - return null; + if(index<0 || index >size-1) throw new IndexOutOfBoundsException(index + ": Invalid Index"); + Node ret = null; + if(index == 0){ + ret = head; + head = head.next; + size --; + }else if(index == size -1){ + Node nodeBeforeTail = getNodeAt(index -1); + ret = tail; + nodeBeforeTail.next = null; + size --; + }else{ + Node nodeBeforeTarget = getNodeAt(index -1); + Node target = nodeBeforeTarget.next; + ret = target; + nodeBeforeTarget.next = target.next; + size --; + } + + return ret.data; } public int size(){ - return -1; + return size; } public void addFirst(Object o){ - + this.add(0, o); } + public void addLast(Object o){ - + this.add(o); } + public Object removeFirst(){ - return null; + return remove(0); } + public Object removeLast(){ - return null; + return remove(size-1); } + public Iterator iterator(){ - return null; + return new LinkedListIterator(this); } + private class Node{ + public Object data = null; + public Node next = null; + public Node(Object o){ + data = o; + } + } - private static class Node{ - Object data; - Node next; + private static class LinkedListIterator implements Iterator{ + + Object[] oArray = null; + int cursor = 0; + public LinkedListIterator(LinkedList ll){ + if(ll == null) throw new NullPointerException("Linkedlist Object is NULL"); + oArray = new Object[ll.size()]; + for(int i = 0; i< ll.size(); i++){ + oArray[i] = ll.get(i); + } + } + + @Override + public boolean hasNext() { + if(cursor < oArray.length){ + return true; + } + return false; + } + + @Override + public Object next() { + Object o = oArray[cursor]; + cursor ++; + return o; + } } } diff --git a/group17/1282579502/src/com/coding/basic/Queue.java b/group17/1282579502/src/com/coding/basic/Queue.java index 36e516e266..b9cbd3c500 100644 --- a/group17/1282579502/src/com/coding/basic/Queue.java +++ b/group17/1282579502/src/com/coding/basic/Queue.java @@ -1,19 +1,30 @@ package com.coding.basic; public class Queue { + private LinkedList ll = null; - public void enQueue(Object o){ + public Queue(){ + ll = new LinkedList(); } - public Object deQueue(){ - return null; + public void enQueue(Object o){ + ll.add(o); + } + + public Object deQueue() throws IndexOutOfBoundsException{ + try{ + return ll.remove(0); + }catch(IndexOutOfBoundsException ie){ + throw new IndexOutOfBoundsException(ie.getMessage()); + } + } public boolean isEmpty(){ - return false; + return (ll.size() == 0) ? true : false; } public int size(){ - return -1; + return ll.size(); } } diff --git a/group17/1282579502/src/com/coding/basic/Stack.java b/group17/1282579502/src/com/coding/basic/Stack.java index a5a04de76d..7bfcd75ec3 100644 --- a/group17/1282579502/src/com/coding/basic/Stack.java +++ b/group17/1282579502/src/com/coding/basic/Stack.java @@ -1,22 +1,29 @@ package com.coding.basic; public class Stack { - private ArrayList elementData = new ArrayList(); + private ArrayList al = null; - public void push(Object o){ + public Stack(){ + al = new ArrayList(); + } + + public void push(Object o){ + al.add(o); } public Object pop(){ - return null; + return al.remove(al.size()-1); } public Object peek(){ - return null; + return (al.size() == 0) ? null : al.get(al.size() -1); } + public boolean isEmpty(){ - return false; + return (al.size() == 0) ? true : false; } + public int size(){ - return -1; + return al.size(); } } diff --git a/group17/1282579502/src/com/coding/basic/ut/ArrayListTest.java b/group17/1282579502/src/com/coding/basic/ut/ArrayListTest.java index 08435853a7..9bce65892b 100644 --- a/group17/1282579502/src/com/coding/basic/ut/ArrayListTest.java +++ b/group17/1282579502/src/com/coding/basic/ut/ArrayListTest.java @@ -4,11 +4,11 @@ import java.lang.reflect.Field; -import org.junit.After; import org.junit.Before; import org.junit.Test; import com.coding.basic.ArrayList; +import com.coding.basic.Iterator; public class ArrayListTest { @@ -49,10 +49,6 @@ public void setUp() throws Exception { } } - @After - public void tearDown() throws Exception { - } - @Test public void testAddObject() { Object item = new String("s1"); @@ -75,12 +71,25 @@ public void testAddIndexObject() { @Test public void testGet() { - //fail("Not yet implemented"); + target.add("0"); + Object o = target.get(0); + assertEquals("0", o); + assertNotEquals("2", 0); } @Test public void testRemove() { - //fail("Not yet implemented"); + String[] items = new String[]{"0","1","2"}; + for(int i = 0; i=0; i--){ + assertEquals(ll.get(i), items[items.length - 1 -i]); + } + + } + + @Test + public void testAddLast() { + LinkedList ll = new LinkedList(); + String[] items = new String[]{"0","1","2","3","4"}; + for(int i = 0 ; i< items.length; i++){ + ll.addLast(items[i] ); + } + //expect 0, 1, 2, 3, 4 + for(int i = 0; i Date: Sun, 26 Feb 2017 01:59:19 -0800 Subject: [PATCH 202/216] remove unreleated directory --- .../src/com/wusa/assignment1/TestDriver.java | 24 ------------------- 1 file changed, 24 deletions(-) delete mode 100644 group17/1282579502/src/com/wusa/assignment1/TestDriver.java diff --git a/group17/1282579502/src/com/wusa/assignment1/TestDriver.java b/group17/1282579502/src/com/wusa/assignment1/TestDriver.java deleted file mode 100644 index 29c01f49e8..0000000000 --- a/group17/1282579502/src/com/wusa/assignment1/TestDriver.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.wusa.assignment1; - -import java.util.ArrayList; -import java.util.Arrays; - -public class TestDriver { - - public static void main(String[] args) { - // TODO Auto-generated method stub - System.out.println("Hello World"); - System.out.println("hello back"); - - String[] old = new String[5]; - old[0] = "100"; - old[1] = "101"; - System.arraycopy(old, 0, old, 1, 1); - System.out.println(Arrays.toString(old)); - - ArrayList al = new ArrayList(); - - - } - -} From dfbd66815ad9ffb0391935917e0fc4f739f52ea4 Mon Sep 17 00:00:00 2001 From: MrXingmf Date: Sun, 26 Feb 2017 18:28:07 +0800 Subject: [PATCH 203/216] homework --- .../src/com/coding/basic/MyArrayList.java | 41 +++++++++++++++++ .../com/coding/basic/MyBinaryTreeNode.java | 30 +++++++++++++ .../src/com/coding/basic/MyIterator.java | 6 +++ .../src/com/coding/basic/MyLinkedList.java | 45 +++++++++++++++++++ .../homework/src/com/coding/basic/MyList.java | 9 ++++ .../homework/src/com/coding/basic/Queue.java | 18 ++++++++ .../homework/src/com/coding/basic/Stack.java | 22 +++++++++ 7 files changed, 171 insertions(+) create mode 100644 group17/116665530/homework/src/com/coding/basic/MyArrayList.java create mode 100644 group17/116665530/homework/src/com/coding/basic/MyBinaryTreeNode.java create mode 100644 group17/116665530/homework/src/com/coding/basic/MyIterator.java create mode 100644 group17/116665530/homework/src/com/coding/basic/MyLinkedList.java create mode 100644 group17/116665530/homework/src/com/coding/basic/MyList.java create mode 100644 group17/116665530/homework/src/com/coding/basic/Queue.java create mode 100644 group17/116665530/homework/src/com/coding/basic/Stack.java diff --git a/group17/116665530/homework/src/com/coding/basic/MyArrayList.java b/group17/116665530/homework/src/com/coding/basic/MyArrayList.java new file mode 100644 index 0000000000..e9af793f47 --- /dev/null +++ b/group17/116665530/homework/src/com/coding/basic/MyArrayList.java @@ -0,0 +1,41 @@ +package com.coding.basic; + +public class MyArrayList implements MyList { + private int size = 0; + private Object[] elementData = new Object[100]; + + public void add(Object o){ + elementData[size++] = o; + } + public void add(int index, Object o){ + for(int i = size; i > index; i--) + { + elementData[i] = elementData[i - 1]; + } + elementData[index] = o; + size++; + } + + public Object get(int index){ + return elementData[index]; + } + + public Object remove(int index){ + Object obj = elementData[index]; + for(int i = index; i < size(); i++) + { + elementData[i] = elementData[i + 1]; + } + size--; + return elementData; + } + + public int size(){ + return size; + } + + public MyIterator myIterator(){ + return null; + } + +} diff --git a/group17/116665530/homework/src/com/coding/basic/MyBinaryTreeNode.java b/group17/116665530/homework/src/com/coding/basic/MyBinaryTreeNode.java new file mode 100644 index 0000000000..c79328b1ed --- /dev/null +++ b/group17/116665530/homework/src/com/coding/basic/MyBinaryTreeNode.java @@ -0,0 +1,30 @@ +package com.coding.basic; + +public class MyBinaryTreeNode { + private Object data; + private MyBinaryTreeNode left; + private MyBinaryTreeNode right; + + public Object getData() { + return data; + } + public void setData(Object data) { + this.data = data; + } + public MyBinaryTreeNode getLeft() { + return left; + } + public void setLeft(MyBinaryTreeNode left) { + this.left = left; + } + public MyBinaryTreeNode getRight() { + return right; + } + public void setRight(MyBinaryTreeNode right) { + this.right = right; + } + + public MyBinaryTreeNode insert(Object o){ + return null; + } +} diff --git a/group17/116665530/homework/src/com/coding/basic/MyIterator.java b/group17/116665530/homework/src/com/coding/basic/MyIterator.java new file mode 100644 index 0000000000..9247878483 --- /dev/null +++ b/group17/116665530/homework/src/com/coding/basic/MyIterator.java @@ -0,0 +1,6 @@ +package com.coding.basic; + +public interface MyIterator { + public boolean hasNext(); + public Object next(); +} diff --git a/group17/116665530/homework/src/com/coding/basic/MyLinkedList.java b/group17/116665530/homework/src/com/coding/basic/MyLinkedList.java new file mode 100644 index 0000000000..fb75a27c6b --- /dev/null +++ b/group17/116665530/homework/src/com/coding/basic/MyLinkedList.java @@ -0,0 +1,45 @@ +package com.coding.basic; + +public class MyLinkedList implements MyList{ + private Node head; + + public void add(Object o){ + + } + public void add(int index , Object o){ + + } + public Object get(int index){ + return null; + } + public Object remove(int index){ + return null; + } + + public int size(){ + return -1; + } + + public void addFirst(Object o){ + + } + public void addLast(Object o){ + + } + public Object removeFirst(){ + return null; + } + public Object removeLast(){ + return null; + } + public MyIterator iterator(){ + return null; + } + + + private static class Node{ + Object data; + Node next; + + } +} diff --git a/group17/116665530/homework/src/com/coding/basic/MyList.java b/group17/116665530/homework/src/com/coding/basic/MyList.java new file mode 100644 index 0000000000..3cc9d10473 --- /dev/null +++ b/group17/116665530/homework/src/com/coding/basic/MyList.java @@ -0,0 +1,9 @@ +package com.coding.basic; + +public interface MyList { + 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(); +} diff --git a/group17/116665530/homework/src/com/coding/basic/Queue.java b/group17/116665530/homework/src/com/coding/basic/Queue.java new file mode 100644 index 0000000000..47e60d8f27 --- /dev/null +++ b/group17/116665530/homework/src/com/coding/basic/Queue.java @@ -0,0 +1,18 @@ +package com.coding.basic; + +public class Queue { + public void enQueue(Object o){ + } + + public Object deQueue(){ + return null; + } + + public boolean isEmpty(){ + return false; + } + + public int size(){ + return -1; + } +} diff --git a/group17/116665530/homework/src/com/coding/basic/Stack.java b/group17/116665530/homework/src/com/coding/basic/Stack.java new file mode 100644 index 0000000000..0520714e18 --- /dev/null +++ b/group17/116665530/homework/src/com/coding/basic/Stack.java @@ -0,0 +1,22 @@ +package com.coding.basic; + +public class Stack { + private MyArrayList elementData = new MyArrayList(); + + public void push(Object o){ + } + + public Object pop(){ + return null; + } + + public Object peek(){ + return null; + } + public boolean isEmpty(){ + return false; + } + public int size(){ + return -1; + } +} From 1398fcd89dccef9efda7e8112cc1a11f20cb9d13 Mon Sep 17 00:00:00 2001 From: Eric Date: Sun, 26 Feb 2017 18:37:42 +0800 Subject: [PATCH 204/216] home work --- group12/251822722/ArrayList.java | 87 +++++++++++++++++++++++++++ group12/251822722/BinaryTreeNode.java | 35 +++++++++++ group12/251822722/Iterator.java | 6 ++ group12/251822722/LinkedList.java | 51 ++++++++++++++++ group12/251822722/List.java | 11 ++++ group12/251822722/Queue.java | 38 ++++++++++++ group12/251822722/Stack.java | 33 ++++++++++ 7 files changed, 261 insertions(+) create mode 100755 group12/251822722/ArrayList.java create mode 100755 group12/251822722/BinaryTreeNode.java create mode 100755 group12/251822722/Iterator.java create mode 100755 group12/251822722/LinkedList.java create mode 100755 group12/251822722/List.java create mode 100755 group12/251822722/Queue.java create mode 100755 group12/251822722/Stack.java diff --git a/group12/251822722/ArrayList.java b/group12/251822722/ArrayList.java new file mode 100755 index 0000000000..77b8052cc7 --- /dev/null +++ b/group12/251822722/ArrayList.java @@ -0,0 +1,87 @@ +import java.util.Arrays; + +public class ArrayList implements List { + + private int size = 0; + + private int index =0; + + private Object[] elementData = new Object[100]; + + public void add(Object o) { + elementData[size] = o; + size = size+1; + + } + + public void add(int index, Object o) { + + Object[] elementDataNew =null; + if(size list = new java.util.ArrayList(); + list.add("a"); + list.add("b"); + java.util.Iterator it = list.iterator(); + while (it.hasNext()) { + + } + System.out.println(it.next()); + System.out.println(it.next()); + System.out.println(it.next()); + } + + @Test + public void testSize() { Assert.assertEquals(5, list.size()); } @@ -56,4 +70,12 @@ public void testRemove() { Assert.assertEquals(list.get(3), "d"); } + @Test + public void testIterator() { + Iterator it = list.iterator(); + while (it.hasNext()) { + System.out.println(it.next()); + } + } + } diff --git a/group16/214074094/src/test/coding/basic/LinkedListTest.java b/group16/214074094/src/test/coding/basic/LinkedListTest.java index 1479507338..bc78728a25 100644 --- a/group16/214074094/src/test/coding/basic/LinkedListTest.java +++ b/group16/214074094/src/test/coding/basic/LinkedListTest.java @@ -1,6 +1,5 @@ package coding.basic; -import com.coding.basic.LinkedList; import junit.framework.Assert; import org.junit.After; import org.junit.Before; @@ -17,7 +16,7 @@ public class LinkedListTest extends AbstractTest { private static LinkedList list; @Before - public void before(){ + public void before() { list = new LinkedList(); list.add("a"); list.add("b"); @@ -38,7 +37,7 @@ public void after() { } @Test - public void testAddIndex(){ + public void testAddIndex() { list.add(0, "after a"); Assert.assertEquals("after a", list.get(1)); @@ -50,7 +49,7 @@ public void testAddIndex(){ } @Test - public void testRemove(){ + public void testRemove() { list.remove(0); Assert.assertEquals("b", list.get(0)); diff --git a/group16/214074094/src/test/coding/basic/QueueTest.java b/group16/214074094/src/test/coding/basic/QueueTest.java new file mode 100644 index 0000000000..12302783b3 --- /dev/null +++ b/group16/214074094/src/test/coding/basic/QueueTest.java @@ -0,0 +1,62 @@ +package coding.basic; + +import junit.framework.Assert; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +/** + * @Author shane + * @Time 2017/2/26 17:24 + * @Email stevenchenguang@gmail.com + * @Desc ... + */ +public class QueueTest extends AbstractTest { + + private static Queue queue; + + @Before + public void before() { + queue = new Queue(); + + queue.enQueue("a"); + queue.enQueue("b"); + queue.enQueue("c"); + queue.enQueue("d"); + queue.enQueue("e"); + + printStar(); + System.out.println("Before Test data :" + queue); + printHyphen(); + } + + @After + public void after() { + printHyphen(); + System.out.println("After Test data : " + queue); + printStar(); + } + + @Test + public void testDeQueueAndIsEmpty() { + Assert.assertEquals("a", queue.deQueue()); + + queue.deQueue(); + queue.deQueue(); + queue.deQueue(); + queue.deQueue(); + + Assert.assertEquals(true, queue.isEmpty()); + + try { + queue.deQueue(); + } catch (RuntimeException e) { + Assert.assertEquals("Queue is empty", e.getMessage()); + } + } + + @Test + public void testSize() { + Assert.assertEquals(5, queue.size()); + } +} diff --git a/group16/214074094/src/test/coding/basic/StackTest.java b/group16/214074094/src/test/coding/basic/StackTest.java new file mode 100644 index 0000000000..f289744a67 --- /dev/null +++ b/group16/214074094/src/test/coding/basic/StackTest.java @@ -0,0 +1,68 @@ +package coding.basic; + +import org.junit.After; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; + +/** + * @Author shane + * @Time 2017/2/26 16:58 + * @Email stevenchenguang@gmail.com + * @Desc ... + */ +public class StackTest extends AbstractTest { + + private static Stack stack; + + @Before + public void before() { + stack = new Stack(); + + stack.push("a"); + stack.push("b"); + stack.push("c"); + stack.push("d"); + stack.push("e"); + + printStar(); + System.out.println("Before Test data :" + stack); + printHyphen(); + } + + @After + public void after() { + printHyphen(); + System.out.println("After Test data : " + stack); + printStar(); + } + + @Test + public void testPop() { + Assert.assertEquals("e", stack.pop()); + } + + @Test + public void testPeek() { + Assert.assertEquals("e", stack.peek()); + } + + @Test + public void testIsEmpty() { + Assert.assertEquals(false, stack.isEmpty()); + + stack.pop(); + stack.pop(); + stack.pop(); + stack.pop(); + stack.pop(); + + Assert.assertEquals(true, stack.isEmpty()); + } + + @Test + public void testSize() { + Assert.assertEquals(5, stack.size()); + } + +} diff --git a/group16/214074094/target/production/214074094/com/reading/blog_test.txt b/group16/214074094/target/production/214074094/reading/blog_test.txt similarity index 100% rename from group16/214074094/target/production/214074094/com/reading/blog_test.txt rename to group16/214074094/target/production/214074094/reading/blog_test.txt From de852297cb54a0268292cb79d146c8acafc998e3 Mon Sep 17 00:00:00 2001 From: wzy <1264835468@qq.com> Date: Sun, 26 Feb 2017 19:42:34 +0800 Subject: [PATCH 206/216] haha --- group17/.gitignore | 4 ++++ group17/1264835468/.gitignore | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/group17/.gitignore b/group17/.gitignore index 4e10476e66..09ad792cf4 100644 --- a/group17/.gitignore +++ b/group17/.gitignore @@ -14,3 +14,7 @@ hs_err_pid* #ide config .metadata .recommenders + +.classpath +.project +. \ No newline at end of file diff --git a/group17/1264835468/.gitignore b/group17/1264835468/.gitignore index ae3c172604..71f96b185c 100644 --- a/group17/1264835468/.gitignore +++ b/group17/1264835468/.gitignore @@ -1 +1,5 @@ /bin/ + +.classpath +.project +.gitignore \ No newline at end of file From f04a7f24a08038273d8b5d38d9dfd0a7b4b79d4b Mon Sep 17 00:00:00 2001 From: wzy <1264835468@qq.com> Date: Sun, 26 Feb 2017 19:52:14 +0800 Subject: [PATCH 207/216] =?UTF-8?q?=E6=96=87=E7=AB=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...351\227\264\347\232\204\345\205\263\347\263\273_20170226.md" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/group17/article/\345\206\231\344\270\200\347\257\207\346\226\207\347\253\240\344\273\213\347\273\215cpu, \345\206\205\345\255\230, \347\243\201\347\233\230, \346\214\207\344\273\244\344\273\245\345\217\212\344\273\226\344\273\254\344\271\213\351\227\264\347\232\204\345\205\263\347\263\273_20170226.md" "b/group17/article/\345\206\231\344\270\200\347\257\207\346\226\207\347\253\240\344\273\213\347\273\215cpu, \345\206\205\345\255\230, \347\243\201\347\233\230, \346\214\207\344\273\244\344\273\245\345\217\212\344\273\226\344\273\254\344\271\213\351\227\264\347\232\204\345\205\263\347\263\273_20170226.md" index 44e3d3e40a..e2c784685e 100644 --- "a/group17/article/\345\206\231\344\270\200\347\257\207\346\226\207\347\253\240\344\273\213\347\273\215cpu, \345\206\205\345\255\230, \347\243\201\347\233\230, \346\214\207\344\273\244\344\273\245\345\217\212\344\273\226\344\273\254\344\271\213\351\227\264\347\232\204\345\205\263\347\263\273_20170226.md" +++ "b/group17/article/\345\206\231\344\270\200\347\257\207\346\226\207\347\253\240\344\273\213\347\273\215cpu, \345\206\205\345\255\230, \347\243\201\347\233\230, \346\214\207\344\273\244\344\273\245\345\217\212\344\273\226\344\273\254\344\271\213\351\227\264\347\232\204\345\205\263\347\263\273_20170226.md" @@ -26,7 +26,7 @@ 296910598 -1264835468 +1264835468 http://www.jianshu.com/p/191d731ec00a 516886559 From 84b682c5080dbe3176960c42e68a252f21bae5f0 Mon Sep 17 00:00:00 2001 From: earliest Date: Sun, 26 Feb 2017 04:54:17 -0800 Subject: [PATCH 208/216] add article link --- ...351\227\264\347\232\204\345\205\263\347\263\273_20170226.md" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/group17/article/\345\206\231\344\270\200\347\257\207\346\226\207\347\253\240\344\273\213\347\273\215cpu, \345\206\205\345\255\230, \347\243\201\347\233\230, \346\214\207\344\273\244\344\273\245\345\217\212\344\273\226\344\273\254\344\271\213\351\227\264\347\232\204\345\205\263\347\263\273_20170226.md" "b/group17/article/\345\206\231\344\270\200\347\257\207\346\226\207\347\253\240\344\273\213\347\273\215cpu, \345\206\205\345\255\230, \347\243\201\347\233\230, \346\214\207\344\273\244\344\273\245\345\217\212\344\273\226\344\273\254\344\271\213\351\227\264\347\232\204\345\205\263\347\263\273_20170226.md" index 0cec6481d5..e4a02969a7 100644 --- "a/group17/article/\345\206\231\344\270\200\347\257\207\346\226\207\347\253\240\344\273\213\347\273\215cpu, \345\206\205\345\255\230, \347\243\201\347\233\230, \346\214\207\344\273\244\344\273\245\345\217\212\344\273\226\344\273\254\344\271\213\351\227\264\347\232\204\345\205\263\347\263\273_20170226.md" +++ "b/group17/article/\345\206\231\344\270\200\347\257\207\346\226\207\347\253\240\344\273\213\347\273\215cpu, \345\206\205\345\255\230, \347\243\201\347\233\230, \346\214\207\344\273\244\344\273\245\345\217\212\344\273\226\344\273\254\344\271\213\351\227\264\347\232\204\345\205\263\347\263\273_20170226.md" @@ -30,7 +30,7 @@ 516886559 -1282579502 +1282579502 https://www.evernote.com/shard/s413/sh/3af5f6a4-a580-4a49-b63c-90f5b178aca4/7cf052e3789c862e38d6d6b3cce1ceed 614982500 From 907d4deeb1542a0f373ee6874add67184cd8332d Mon Sep 17 00:00:00 2001 From: earliest Date: Sun, 26 Feb 2017 05:04:46 -0800 Subject: [PATCH 209/216] remove unwanted directories --- group17/102228177/.classpath | 6 - group17/102228177/.project | 17 -- group17/102228177/src/data2_19/ArrayList.java | 148 -------------- .../src/data2_19/BinaryTreeNode.java | 74 ------- group17/102228177/src/data2_19/Iterator.java | 8 - .../102228177/src/data2_19/LinkedList.java | 142 -------------- group17/102228177/src/data2_19/List.java | 10 - group17/102228177/src/data2_19/Queue.java | 38 ---- group17/102228177/src/data2_19/Stack.java | 44 ----- .../1204187480/code/homework/basic/pom.xml | 12 -- .../main/java/com/coding/basic/ArrayList.java | 108 ---------- .../java/com/coding/basic/BinaryTreeNode.java | 32 --- .../main/java/com/coding/basic/Iterator.java | 7 - .../java/com/coding/basic/LinkedList.java | 147 -------------- .../src/main/java/com/coding/basic/List.java | 9 - .../src/main/java/com/coding/basic/Queue.java | 24 --- .../src/main/java/com/coding/basic/Stack.java | 30 --- .../java/com/coding/api/ArrayListTest.java | 25 --- .../test/java/com/coding/api/ArraysTest.java | 22 --- .../test/java/com/coding/api/SystemTest.java | 24 --- .../java/com/coding/basic/ArrayListTest.java | 35 ---- .../1204187480/code/homework/parent/pom.xml | 95 --------- group17/1204187480/code/homework/pom.xml | 14 -- group17/1264835468/.classpath | 6 - group17/1264835468/.gitignore | 1 - group17/1264835468/.project | 17 -- .../1264835468/src/assignment/BinaryTree.java | 154 --------------- .../src/assignment/BinaryTreeNode.java | 58 ------ .../1264835468/src/assignment/Iterable.java | 6 - .../1264835468/src/assignment/Iterator.java | 7 - group17/1264835468/src/assignment/List.java | 14 -- .../src/assignment/MyArrayList.java | 110 ----------- .../src/assignment/MyLinkedList.java | 144 -------------- .../1264835468/src/assignment/MyQueue.java | 34 ---- .../1264835468/src/assignment/MyStack.java | 39 ---- group17/1540186032/First/src/ArrayList.java | 64 ------ .../1540186032/First/src/BinaryTreeNode.java | 31 --- group17/1540186032/First/src/Iterator.java | 6 - group17/1540186032/First/src/LinkedList.java | 131 ------------- group17/1540186032/First/src/List.java | 8 - group17/1540186032/First/src/Queue.java | 23 --- group17/1540186032/First/src/Stack.java | 28 --- .../176653813/1766538130226Lesson/.classpath | 7 - .../176653813/1766538130226Lesson/.gitignore | 1 - .../176653813/1766538130226Lesson/.project | 17 -- .../.settings/org.eclipse.jdt.core.prefs | 11 -- .../src/com/coding/basic/ArrayList.java | 80 -------- .../src/com/coding/basic/LinkList.java | 96 --------- .../src/com/coding/basic/List.java | 9 - .../src/com/coding/basic/Queue.java | 35 ---- .../src/com/coding/basic/Stack.java | 41 ---- .../src/com/coding/basic/Test.java | 36 ---- .../176653813/RemoteSystemsTempFiles/.project | 12 -- group17/240094626/.gitignore | 22 --- group17/240094626/warm-up/.gitignore | 4 - .../src/com/coding/basic/Iterator.java | 7 - .../warm-up/src/com/coding/basic/List.java | 9 - .../src/com/coding/basic/impl/ArrayList.java | 166 ---------------- .../src/com/coding/basic/impl/BinaryTree.java | 82 -------- .../src/com/coding/basic/impl/LinkedList.java | 184 ------------------ .../src/com/coding/basic/impl/Queue.java | 67 ------- .../src/com/coding/basic/impl/Stack.java | 78 -------- group17/51075907/HomeWork/.classpath | 6 - group17/51075907/HomeWork/.project | 17 -- .../.settings/org.eclipse.jdt.core.prefs | 11 -- .../HomeWork/src/day1_HomeWork/ArrayList.java | 75 ------- .../src/day1_HomeWork/LinkedList.java | 103 ---------- .../HomeWork/src/day1_HomeWork/List.java | 9 - .../HomeWork/src/day1_HomeWork/Queue.java | 19 -- .../HomeWork/src/day1_HomeWork/Stack.java | 23 --- group17/785396327/binarytree/BinaryTree.java | 55 ------ .../785396327/binarytree/DLRSearchType.java | 16 -- .../785396327/binarytree/LDRSearchType.java | 15 -- .../785396327/binarytree/LFSearchType.java | 27 --- .../785396327/binarytree/LRDSearchType.java | 15 -- group17/785396327/binarytree/SearchType.java | 9 - group17/785396327/list/ArrayList.java | 135 ------------- group17/785396327/list/Iterator.java | 13 -- group17/785396327/list/LinkedList.java | 163 ---------------- group17/785396327/list/List.java | 25 --- group17/785396327/queue/Queue.java | 41 ---- group17/785396327/stack/Stack.java | 29 --- group17/82427129/.gitignore | 7 - group17/82427129/JavaUtil/.gitignore | 1 - group17/82427129/JavaUtil/pom.xml | 27 --- .../main/java/com/coding/basic/ArrayList.java | 100 ---------- .../java/com/coding/basic/BinaryTreeNode.java | 32 --- .../main/java/com/coding/basic/Iterator.java | 7 - .../java/com/coding/basic/LinkedList.java | 180 ----------------- .../src/main/java/com/coding/basic/List.java | 9 - .../src/main/java/com/coding/basic/Queue.java | 21 -- .../src/main/java/com/coding/basic/Stack.java | 32 --- group17/876385982/.classpath | 6 - group17/876385982/.gitignore | 1 - group17/876385982/.project | 17 -- group17/876385982/src/test/Test.java | 10 - 96 files changed, 4172 deletions(-) delete mode 100644 group17/102228177/.classpath delete mode 100644 group17/102228177/.project delete mode 100644 group17/102228177/src/data2_19/ArrayList.java delete mode 100644 group17/102228177/src/data2_19/BinaryTreeNode.java delete mode 100644 group17/102228177/src/data2_19/Iterator.java delete mode 100644 group17/102228177/src/data2_19/LinkedList.java delete mode 100644 group17/102228177/src/data2_19/List.java delete mode 100644 group17/102228177/src/data2_19/Queue.java delete mode 100644 group17/102228177/src/data2_19/Stack.java delete mode 100644 group17/1204187480/code/homework/basic/pom.xml delete mode 100644 group17/1204187480/code/homework/basic/src/main/java/com/coding/basic/ArrayList.java delete mode 100644 group17/1204187480/code/homework/basic/src/main/java/com/coding/basic/BinaryTreeNode.java delete mode 100644 group17/1204187480/code/homework/basic/src/main/java/com/coding/basic/Iterator.java delete mode 100644 group17/1204187480/code/homework/basic/src/main/java/com/coding/basic/LinkedList.java delete mode 100644 group17/1204187480/code/homework/basic/src/main/java/com/coding/basic/List.java delete mode 100644 group17/1204187480/code/homework/basic/src/main/java/com/coding/basic/Queue.java delete mode 100644 group17/1204187480/code/homework/basic/src/main/java/com/coding/basic/Stack.java delete mode 100644 group17/1204187480/code/homework/basic/src/test/java/com/coding/api/ArrayListTest.java delete mode 100644 group17/1204187480/code/homework/basic/src/test/java/com/coding/api/ArraysTest.java delete mode 100644 group17/1204187480/code/homework/basic/src/test/java/com/coding/api/SystemTest.java delete mode 100644 group17/1204187480/code/homework/basic/src/test/java/com/coding/basic/ArrayListTest.java delete mode 100644 group17/1204187480/code/homework/parent/pom.xml delete mode 100644 group17/1204187480/code/homework/pom.xml delete mode 100644 group17/1264835468/.classpath delete mode 100644 group17/1264835468/.gitignore delete mode 100644 group17/1264835468/.project delete mode 100644 group17/1264835468/src/assignment/BinaryTree.java delete mode 100644 group17/1264835468/src/assignment/BinaryTreeNode.java delete mode 100644 group17/1264835468/src/assignment/Iterable.java delete mode 100644 group17/1264835468/src/assignment/Iterator.java delete mode 100644 group17/1264835468/src/assignment/List.java delete mode 100644 group17/1264835468/src/assignment/MyArrayList.java delete mode 100644 group17/1264835468/src/assignment/MyLinkedList.java delete mode 100644 group17/1264835468/src/assignment/MyQueue.java delete mode 100644 group17/1264835468/src/assignment/MyStack.java delete mode 100644 group17/1540186032/First/src/ArrayList.java delete mode 100644 group17/1540186032/First/src/BinaryTreeNode.java delete mode 100644 group17/1540186032/First/src/Iterator.java delete mode 100644 group17/1540186032/First/src/LinkedList.java delete mode 100644 group17/1540186032/First/src/List.java delete mode 100644 group17/1540186032/First/src/Queue.java delete mode 100644 group17/1540186032/First/src/Stack.java delete mode 100644 group17/176653813/1766538130226Lesson/.classpath delete mode 100644 group17/176653813/1766538130226Lesson/.gitignore delete mode 100644 group17/176653813/1766538130226Lesson/.project delete mode 100644 group17/176653813/1766538130226Lesson/.settings/org.eclipse.jdt.core.prefs delete mode 100644 group17/176653813/1766538130226Lesson/src/com/coding/basic/ArrayList.java delete mode 100644 group17/176653813/1766538130226Lesson/src/com/coding/basic/LinkList.java delete mode 100644 group17/176653813/1766538130226Lesson/src/com/coding/basic/List.java delete mode 100644 group17/176653813/1766538130226Lesson/src/com/coding/basic/Queue.java delete mode 100644 group17/176653813/1766538130226Lesson/src/com/coding/basic/Stack.java delete mode 100644 group17/176653813/1766538130226Lesson/src/com/coding/basic/Test.java delete mode 100644 group17/176653813/RemoteSystemsTempFiles/.project delete mode 100644 group17/240094626/.gitignore delete mode 100644 group17/240094626/warm-up/.gitignore delete mode 100644 group17/240094626/warm-up/src/com/coding/basic/Iterator.java delete mode 100644 group17/240094626/warm-up/src/com/coding/basic/List.java delete mode 100644 group17/240094626/warm-up/src/com/coding/basic/impl/ArrayList.java delete mode 100644 group17/240094626/warm-up/src/com/coding/basic/impl/BinaryTree.java delete mode 100644 group17/240094626/warm-up/src/com/coding/basic/impl/LinkedList.java delete mode 100644 group17/240094626/warm-up/src/com/coding/basic/impl/Queue.java delete mode 100644 group17/240094626/warm-up/src/com/coding/basic/impl/Stack.java delete mode 100644 group17/51075907/HomeWork/.classpath delete mode 100644 group17/51075907/HomeWork/.project delete mode 100644 group17/51075907/HomeWork/.settings/org.eclipse.jdt.core.prefs delete mode 100644 group17/51075907/HomeWork/src/day1_HomeWork/ArrayList.java delete mode 100644 group17/51075907/HomeWork/src/day1_HomeWork/LinkedList.java delete mode 100644 group17/51075907/HomeWork/src/day1_HomeWork/List.java delete mode 100644 group17/51075907/HomeWork/src/day1_HomeWork/Queue.java delete mode 100644 group17/51075907/HomeWork/src/day1_HomeWork/Stack.java delete mode 100644 group17/785396327/binarytree/BinaryTree.java delete mode 100644 group17/785396327/binarytree/DLRSearchType.java delete mode 100644 group17/785396327/binarytree/LDRSearchType.java delete mode 100644 group17/785396327/binarytree/LFSearchType.java delete mode 100644 group17/785396327/binarytree/LRDSearchType.java delete mode 100644 group17/785396327/binarytree/SearchType.java delete mode 100644 group17/785396327/list/ArrayList.java delete mode 100644 group17/785396327/list/Iterator.java delete mode 100644 group17/785396327/list/LinkedList.java delete mode 100644 group17/785396327/list/List.java delete mode 100644 group17/785396327/queue/Queue.java delete mode 100644 group17/785396327/stack/Stack.java delete mode 100644 group17/82427129/.gitignore delete mode 100644 group17/82427129/JavaUtil/.gitignore delete mode 100644 group17/82427129/JavaUtil/pom.xml delete mode 100644 group17/82427129/JavaUtil/src/main/java/com/coding/basic/ArrayList.java delete mode 100644 group17/82427129/JavaUtil/src/main/java/com/coding/basic/BinaryTreeNode.java delete mode 100644 group17/82427129/JavaUtil/src/main/java/com/coding/basic/Iterator.java delete mode 100644 group17/82427129/JavaUtil/src/main/java/com/coding/basic/LinkedList.java delete mode 100644 group17/82427129/JavaUtil/src/main/java/com/coding/basic/List.java delete mode 100644 group17/82427129/JavaUtil/src/main/java/com/coding/basic/Queue.java delete mode 100644 group17/82427129/JavaUtil/src/main/java/com/coding/basic/Stack.java delete mode 100644 group17/876385982/.classpath delete mode 100644 group17/876385982/.gitignore delete mode 100644 group17/876385982/.project delete mode 100644 group17/876385982/src/test/Test.java diff --git a/group17/102228177/.classpath b/group17/102228177/.classpath deleted file mode 100644 index d171cd4c12..0000000000 --- a/group17/102228177/.classpath +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/group17/102228177/.project b/group17/102228177/.project deleted file mode 100644 index 350a2aab85..0000000000 --- a/group17/102228177/.project +++ /dev/null @@ -1,17 +0,0 @@ - - - 102228177 - - - - - - org.eclipse.jdt.core.javabuilder - - - - - - org.eclipse.jdt.core.javanature - - diff --git a/group17/102228177/src/data2_19/ArrayList.java b/group17/102228177/src/data2_19/ArrayList.java deleted file mode 100644 index 0f0be01806..0000000000 --- a/group17/102228177/src/data2_19/ArrayList.java +++ /dev/null @@ -1,148 +0,0 @@ -package data2_19; - -import java.util.ConcurrentModificationException; -import java.util.NoSuchElementException; - - -public class ArrayList implements List{ - public static final int defLen = 10; - private Object[] elements; - private int size; - private int maxLen; - - public ArrayList(){ - size = 0; - maxLen = defLen; - elements = new Object[defLen]; - } - - /** - * 在ArrayList末尾处追加元素 - * @param o 添加的元素 - */ - public void add(Object o){ - if(size >= maxLen){ - grow(); - } - elements[size] = o; - size++; - } - - /** - * 数组扩容 - */ - private void grow(){ - maxLen = maxLen + (maxLen >> 1); - Object[] newArr = new Object[maxLen]; - System.arraycopy(elements, 0, newArr, 0, size); - elements = newArr; - } - - /** - * 在指定索引处添加元素 - * @param i 指定索引 - * @param o 添加元素 - */ - public void add(int i,Object o){ - //判断插入位置大于数组实际长度 - if(i > size){ - size = i; - if(size >= maxLen){//数组大小大于数组最大容量则需要扩容 - grow(); - } - } - //插入位置不大于数组实际长度时,将插入位置的元素向后移。 - for (int j = size; j > i ; j++) { - elements[j] = elements[j-1]; - } - elements[i] = o; - size++; - } - - /** - * 获取传入索引的元素 - * @param index 索引 - * @return 返回传入索引的元素 - */ - public Object get(int index){ - //索引不在实际范围内 - if(index < 0||index >= size){ - throw new ArrayIndexOutOfBoundsException(); - } - for (int i = 0; i < size; i++) { - return elements[index]; - } - return null; - } - - /** - * 删除指定索引元素并返回 - * @param index - * @return 该索引处元素 - */ - public Object remove(int index){ - //索引不在实际范围内 - if(index < 0||index >= size){ - throw new ArrayIndexOutOfBoundsException(); - }else{ - for (int j = index; j < size-1; j++) { - elements[j]=elements[j+1]; - } - size--; - return elements[index]; - } - } - - /** - * 获取大小 - * @return - */ - public int size(){ - return size; - } - - public Iterator iterator(){ - return new ArrayListIterator(); - } - - private class ArrayListIterator implements Iterator{ - int cursor; - - @Override - public boolean hasNext() { - return cursor != size; - } - - @Override - public Object next() { - int i = cursor; - if(i >= size){ - throw new NoSuchElementException(); - } - if (i >= elements.length){ - throw new ConcurrentModificationException(); - } - cursor = i+1; - return elements[i]; - } - } - - public static void main(String[] args) { - ArrayList list = new ArrayList(); - list.add(0); - list.add(1); - list.add(2); - list.add(3); - list.add(4); - list.add(6, 6); - list.remove(3); - for (int i = 0; i < list.size(); i++) { - System.out.println(i+":"+list.get(i)); - } - - Iterator it = list.iterator(); - while (it.hasNext()) { - System.out.println(it.next()); - } - } -} diff --git a/group17/102228177/src/data2_19/BinaryTreeNode.java b/group17/102228177/src/data2_19/BinaryTreeNode.java deleted file mode 100644 index 6b091c87b3..0000000000 --- a/group17/102228177/src/data2_19/BinaryTreeNode.java +++ /dev/null @@ -1,74 +0,0 @@ -package data2_19; - -public class BinaryTreeNode implements Comparable{ - - private Object data; - private BinaryTreeNode left; - private BinaryTreeNode right; - - public BinaryTreeNode(Object o) { - this.data = o; - } - - 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; - } - - @Override - public int compareTo(BinaryTreeNode o) { - return (this.data.hashCode() < o.data.hashCode()) ? -1 : - ((this.data.hashCode() == o.data.hashCode()) ? 0 : 1); - } - - public BinaryTreeNode insert(Object o){ - BinaryTreeNode node = new BinaryTreeNode(o); - insertNode(this,node); - return node; - } - - private void insertNode(BinaryTreeNode parentNode, BinaryTreeNode node) { - //父节点大于添加元素 - if(parentNode.compareTo(node) == 1){ - if(parentNode.left == null){ - parentNode.left = node; - return; - } - insertNode(parentNode.left, node); - } - //父节点小于添加元素 - else - if(parentNode.compareTo(node) == -1){ - if(parentNode.right == null){ - parentNode.right = node; - return; - } - insertNode(parentNode.right, node); - }else{ - throw new RuntimeException("No duplicate vertex allowed!"); - } - } - - public static void main(String[] args) { - BinaryTreeNode tree = new BinaryTreeNode(5); - tree.insert(2); - tree.insert(23); - tree.insert(7); - tree.insert(1); - } - -} \ No newline at end of file diff --git a/group17/102228177/src/data2_19/Iterator.java b/group17/102228177/src/data2_19/Iterator.java deleted file mode 100644 index 6d1fd8a2e3..0000000000 --- a/group17/102228177/src/data2_19/Iterator.java +++ /dev/null @@ -1,8 +0,0 @@ -package data2_19; - -public interface Iterator { - - public boolean hasNext(); - public Object next(); - -} \ No newline at end of file diff --git a/group17/102228177/src/data2_19/LinkedList.java b/group17/102228177/src/data2_19/LinkedList.java deleted file mode 100644 index 87613d0704..0000000000 --- a/group17/102228177/src/data2_19/LinkedList.java +++ /dev/null @@ -1,142 +0,0 @@ -package data2_19; - -import java.util.NoSuchElementException; - -public class LinkedList implements List { - - private Node head; - private int size; - - public LinkedList(){ - size = 0; - head = null; - } - - public void add(Object o){ - Node node = new Node(o); - if(head == null){ - head = node; - }else{ - //p为游标 从头遍历到尾 - Node p = head; - while(p.next != null){ - p = p.next; - } - p.next = node; - } - size++; - } - - public void add(int index , Object o){ - //判断不为空链表 - if(head != null){ - Node p = head; - int k = 0; - //扫描单链表查找第index-1个节点 - while(k < index-1 && p.next != null){ - k++; - p = p.next; - } - //判断是否找到第index-1个节点 - if(p != null){ - Node node = new Node(o); - node.next = p.next; - p.next = node; - } - size++; - } - } - - public Object get(int index){ - if(index <0 || index >= size){ - throw new IndexOutOfBoundsException(); - }else{ - Node p = head; - int k = 0; - while(k < index && p.next != null){ - k++; - p = p.next; - } - return p.data; - } - } - public Object remove(int index){ - if(index <0 || index >= size){ - throw new IndexOutOfBoundsException(); - }else{ - if(head != null){ - Node p = head; - int k = 0; - while(k > index-1 && p.next != null){ - k++; - p = p.next; - } - Node next = p.next; - p.next = next.next; - size--; - return next.data; - } - } - return null; - } - - public int size(){ - return size; - } - - public void addFirst(Object o){ - Node node = new Node(o); - node.next = head; - head = node; - size++; - } - - public void addLast(Object o){ - Node node = new Node(o); - if(head == null){ - head = node; - }else{ - Node p = head; - while(p.next != null){ - p = p.next; - } - p.next = node; - } - size++; - } - - public Object removeFirst(){ - if(head == null){ - throw new NoSuchElementException(); - } - Node node = head; - head = node.next; - size--; - return node.data; - } - public Object removeLast(){ - if(head == null){ - throw new NoSuchElementException(); - }else{ - Node p = head; - int k = 0; - while(k < size-1 && p.next != null){ - k++; - p = p.next; - } - Node last = p.next; - p.next = null; - size--; - return last.data; - } - } - - private static class Node{ - Object data; - Node next; - private Node(Object o){ - this.data = o; - this.next = null; - } - } -} \ No newline at end of file diff --git a/group17/102228177/src/data2_19/List.java b/group17/102228177/src/data2_19/List.java deleted file mode 100644 index 9f1a3f5ce6..0000000000 --- a/group17/102228177/src/data2_19/List.java +++ /dev/null @@ -1,10 +0,0 @@ -package data2_19; - -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(); -} \ No newline at end of file diff --git a/group17/102228177/src/data2_19/Queue.java b/group17/102228177/src/data2_19/Queue.java deleted file mode 100644 index e945f4a67a..0000000000 --- a/group17/102228177/src/data2_19/Queue.java +++ /dev/null @@ -1,38 +0,0 @@ -package data2_19; -public class Queue { - - private LinkedList linkedList = new LinkedList(); - private int elementCount; - - public Queue() { - this.elementCount = 0; - } - - public void enQueue(Object o){ - linkedList.addLast(o); - elementCount++; - } - - public Object deQueue(){ - Object object = linkedList.removeFirst(); - elementCount--; - return object; - } - - public boolean isEmpty(){ - return elementCount == 0; - } - - public int size(){ - return elementCount; - } - - public static void main(String[] args) { - Queue queue = new Queue(); - queue.enQueue(2); - queue.enQueue(3); - System.out.println(queue.isEmpty()); - System.out.println(queue.size()); - System.out.println(queue.deQueue()); - } -} \ No newline at end of file diff --git a/group17/102228177/src/data2_19/Stack.java b/group17/102228177/src/data2_19/Stack.java deleted file mode 100644 index 2b17605631..0000000000 --- a/group17/102228177/src/data2_19/Stack.java +++ /dev/null @@ -1,44 +0,0 @@ -package data2_19; - -import java.util.EmptyStackException; - -public class Stack { - private ArrayList elementData; - private int elementCount; - - public Stack() { - this.elementData = new ArrayList(); - this.elementCount = 0; - } - public void push(Object o){ - elementData.add(o); - elementCount++; - } - - public Object pop(){ - Object object = elementData.remove(elementCount-1); - elementCount--; - return object; - } - - public Object peek(){ - if(isEmpty()){ - throw new EmptyStackException(); - } - return elementData.get(elementCount-1); - } - public boolean isEmpty(){ - return elementCount==0; - } - public int size(){ - return elementCount; - } - public static void main(String[] args) { - Stack stack = new Stack(); - stack.push(1); - stack.push(2); - System.out.println(stack.pop()); - System.out.println(stack.peek()); - - } -} \ No newline at end of file diff --git a/group17/1204187480/code/homework/basic/pom.xml b/group17/1204187480/code/homework/basic/pom.xml deleted file mode 100644 index 039af72d42..0000000000 --- a/group17/1204187480/code/homework/basic/pom.xml +++ /dev/null @@ -1,12 +0,0 @@ - - 4.0.0 - basic - - com.coding - parent - 1.0-SNAPSHOT - ../parent/pom.xml - - - \ No newline at end of file diff --git a/group17/1204187480/code/homework/basic/src/main/java/com/coding/basic/ArrayList.java b/group17/1204187480/code/homework/basic/src/main/java/com/coding/basic/ArrayList.java deleted file mode 100644 index 6ddf8cef58..0000000000 --- a/group17/1204187480/code/homework/basic/src/main/java/com/coding/basic/ArrayList.java +++ /dev/null @@ -1,108 +0,0 @@ -package com.coding.basic; - -import java.util.Arrays; - -public class ArrayList implements List { - - private int size = 0; - - private Object[] elementData = new Object[100]; - - private Iterator iterator = new ArrayListIterator(); - - private int length() { - return elementData.length; - } - - private static final int ENLARGE_LENGTH = 100; - - private Object[] enlarge(Object[] origin) { - return Arrays.copyOf(origin, origin.length + ENLARGE_LENGTH); - } - - private void enLargeElementData() { - if (size == length()) { - elementData = enlarge(elementData); - } - } - - public void add(Object o) { - enLargeElementData(); - elementData[size] = o; - size++; - } - - public void add(int index, Object o) { - checkForAdd(index); - enLargeElementData(); - // 备份 index 处及后面的数据 - Object[] elementsBehindIndex = backBehindElements(elementData, index); - // 给index处 设值 - elementData[index] = o; - // 追加 备份的数据 - appendElement(elementData, index, elementsBehindIndex); - size++; - } - - private void appendElement(Object[] origin, int pos, Object[] append) { - System.arraycopy(append, 0, origin, pos, append.length); - } - - private Object[] backBehindElements(Object[] elementData, int index) { - int backSize = size - index; - Object[] back = new Object[backSize]; - System.arraycopy(elementData, index, back, 0, backSize); - return back; - } - - public Object get(int index) { - checkIndex(index); - return elementData[index]; - } - - private void checkIndex(int index) { - if (index < 0 || index >= size) { - throw new ArrayIndexOutOfBoundsException(String.format("index=%s, size=%s", index, size)); - } - } - - private void checkForAdd(int index) { - if (index < 0 || index > size) { - throw new ArrayIndexOutOfBoundsException(String.format("index=%s, size=%s", index, size)); - } - } - - public Object remove(int index) { - checkIndex(index); - Object[] back = backBehindElements(elementData, index + 1); - System.arraycopy(back, 0, elementData, index, back.length); - Object ret = elementData[index]; - elementData[index] = null; - size--; - return ret; - } - - public int size() { - return size; - } - - public Iterator iterator() { - return iterator; - } - - private class ArrayListIterator implements Iterator { - - int next = 0; - - @Override - public boolean hasNext() { - return next < size; - } - - @Override - public Object next() { - return elementData[next++]; - } - } - -} diff --git a/group17/1204187480/code/homework/basic/src/main/java/com/coding/basic/BinaryTreeNode.java b/group17/1204187480/code/homework/basic/src/main/java/com/coding/basic/BinaryTreeNode.java deleted file mode 100644 index d7ac820192..0000000000 --- a/group17/1204187480/code/homework/basic/src/main/java/com/coding/basic/BinaryTreeNode.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.coding.basic; - -public class BinaryTreeNode { - - private Object data; - private BinaryTreeNode left; - private BinaryTreeNode right; - - 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){ - return null; - } - -} diff --git a/group17/1204187480/code/homework/basic/src/main/java/com/coding/basic/Iterator.java b/group17/1204187480/code/homework/basic/src/main/java/com/coding/basic/Iterator.java deleted file mode 100644 index 06ef6311b2..0000000000 --- a/group17/1204187480/code/homework/basic/src/main/java/com/coding/basic/Iterator.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.coding.basic; - -public interface Iterator { - public boolean hasNext(); - public Object next(); - -} diff --git a/group17/1204187480/code/homework/basic/src/main/java/com/coding/basic/LinkedList.java b/group17/1204187480/code/homework/basic/src/main/java/com/coding/basic/LinkedList.java deleted file mode 100644 index 175d3adb74..0000000000 --- a/group17/1204187480/code/homework/basic/src/main/java/com/coding/basic/LinkedList.java +++ /dev/null @@ -1,147 +0,0 @@ -package com.coding.basic; - -public class LinkedList implements List { - - private Node head; - private int size = 0; - private Iterator iterator = new LinkedListIterator(); - - - public void add(Object o) { - Node newNode = new Node(o, null); - if (head == null) { - head = newNode; - } else { - node(size - 1).next = newNode; - } - size++; - } - - public void add(int index, Object o) { - checkForAdd(index); - if (index == size) { - add(o); - }else { - Node newNode = new Node(o, null); - if (index == 0){ - addFirst(o); - } else { - Node preNode = node(index - 1); - Node now = preNode.next; - preNode.next = newNode; - newNode.next = now; - size++; - } - } - - } - - private Node node(int index) { - Node x = head; - for (int i = 0; i < index; i++) { - x = x.next; - } - return x; - } - - public Object get(int index) { - checkIndex(index); - return node(index).data; - } - - /** - * 让被删除的引用的持有者指向下一个节点 - * @param index - * @return - */ - public Object remove(int index) { - final Object ret; - checkIndex(index); - if (index == 0) { - Node removeNode = head; - ret = head.data; - head = removeNode.next; - } else { - Node pre = node(index - 1); - Node removeNode = pre.next; - ret = removeNode.data; - pre.next = removeNode.next; - } - size--; - return ret; - } - - public int size() { - return size; - } - - public void addFirst(Object o) { - head = new Node(o, head);; - size++; - } - - public void addLast(Object o) { - add(o); - } - - public Object removeFirst() { - if (size == 0){ - return null; - }else { - return remove(0); - } - } - - public Object removeLast() { - return remove(size - 1); - } - - public Iterator iterator() { - return iterator; - } - - private void checkIndex(int index) { - if (index < 0 || index >= size) { - throw new ArrayIndexOutOfBoundsException(String.format("index=%s, size=%s", index, size)); - } - } - - private void checkForAdd(int index) { - if (index < 0 || index > size) { - throw new ArrayIndexOutOfBoundsException(String.format("index=%s, size=%s", index, size)); - } - } - - private static class Node { - Object data; - Node next; - - public Node() { - } - - public Node(Object data, Node next) { - this.data = data; - this.next = next; - } - } - - private class LinkedListIterator implements Iterator{ - - private Node next; - - @Override - public boolean hasNext() { - return next != null; - } - - @Override - public Object next() { - if (next == null) { - throw new IndexOutOfBoundsException("there is no node in list"); - } - Node ret = next; - next = next.next; - return ret.data; - } - } -} diff --git a/group17/1204187480/code/homework/basic/src/main/java/com/coding/basic/List.java b/group17/1204187480/code/homework/basic/src/main/java/com/coding/basic/List.java deleted file mode 100644 index 10d13b5832..0000000000 --- a/group17/1204187480/code/homework/basic/src/main/java/com/coding/basic/List.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.coding.basic; - -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(); -} diff --git a/group17/1204187480/code/homework/basic/src/main/java/com/coding/basic/Queue.java b/group17/1204187480/code/homework/basic/src/main/java/com/coding/basic/Queue.java deleted file mode 100644 index 0f6caaec6f..0000000000 --- a/group17/1204187480/code/homework/basic/src/main/java/com/coding/basic/Queue.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.coding.basic; - -import java.util.Arrays; - -public class Queue { - - private LinkedList elementData = new LinkedList(); - - public void enQueue(Object o){ - elementData.add(o); - } - - public Object deQueue(){ - return elementData.remove(0); - } - - public boolean isEmpty(){ - return size() == 0; - } - - public int size(){ - return elementData.size(); - } -} diff --git a/group17/1204187480/code/homework/basic/src/main/java/com/coding/basic/Stack.java b/group17/1204187480/code/homework/basic/src/main/java/com/coding/basic/Stack.java deleted file mode 100644 index 7d91c326e0..0000000000 --- a/group17/1204187480/code/homework/basic/src/main/java/com/coding/basic/Stack.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.coding.basic; - -public class Stack { - private ArrayList elementData = new ArrayList(); - - public void push(Object o){ - elementData.add(o); - } - - public Object pop(){ - if (isEmpty()) { - throw new IllegalStateException("the stack is empty"); - } - return elementData.remove(elementData.size() - 1); - } - - public Object peek(){ - if (isEmpty()) { - throw new IllegalStateException("the stack is empty"); - } - return elementData.get(elementData.size() - 1); - } - - public boolean isEmpty(){ - return size() == 0; - } - public int size(){ - return elementData.size(); - } -} diff --git a/group17/1204187480/code/homework/basic/src/test/java/com/coding/api/ArrayListTest.java b/group17/1204187480/code/homework/basic/src/test/java/com/coding/api/ArrayListTest.java deleted file mode 100644 index 85d3cf6901..0000000000 --- a/group17/1204187480/code/homework/basic/src/test/java/com/coding/api/ArrayListTest.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.coding.api; - -import org.junit.Test; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -/** - * Created by luoziyihao on 2/25/17. - */ -public class ArrayListTest { - - private final Logger logger = LoggerFactory.getLogger(this.getClass()); - - @Test - public void testAdd(){ - List list = new ArrayList(Arrays.asList(0, 1, 2, 3)); - logger.info("list={}", list); - list.add(5, 2); - logger.info("list={}", list); - } -} diff --git a/group17/1204187480/code/homework/basic/src/test/java/com/coding/api/ArraysTest.java b/group17/1204187480/code/homework/basic/src/test/java/com/coding/api/ArraysTest.java deleted file mode 100644 index eb41a7e262..0000000000 --- a/group17/1204187480/code/homework/basic/src/test/java/com/coding/api/ArraysTest.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.coding.api; - -import org.junit.Test; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.util.Arrays; - -/** - * Created by luoziyihao on 2/25/17. - */ -public class ArraysTest { - private final Logger logger = LoggerFactory.getLogger(this.getClass()); - - - @Test - public void testCopyOf(){ - Object[] a = new Object[]{1, 2, 3, 4}; - Object[] b = Arrays.copyOf(a, 10); - logger.info("a={}, b={}", Arrays.toString(a), Arrays.toString(b)); - } -} diff --git a/group17/1204187480/code/homework/basic/src/test/java/com/coding/api/SystemTest.java b/group17/1204187480/code/homework/basic/src/test/java/com/coding/api/SystemTest.java deleted file mode 100644 index efc4022378..0000000000 --- a/group17/1204187480/code/homework/basic/src/test/java/com/coding/api/SystemTest.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.coding.api; - -import org.junit.Test; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.util.Arrays; - -/** - * Created by luoziyihao on 2/25/17. - */ -public class SystemTest { - - private final Logger logger = LoggerFactory.getLogger(this.getClass()); - - @Test - public void testArrayCopy() { - int[] a = new int[]{1, 2, 3, 4, 5, 6, 7}; - int[] b = new int[]{11, 22, 33, 44, 55, 66, 77}; - System.arraycopy(a, 2, b, 4, 3); - logger.info("b={}", Arrays.toString(b)); - - } -} diff --git a/group17/1204187480/code/homework/basic/src/test/java/com/coding/basic/ArrayListTest.java b/group17/1204187480/code/homework/basic/src/test/java/com/coding/basic/ArrayListTest.java deleted file mode 100644 index 9241fe72da..0000000000 --- a/group17/1204187480/code/homework/basic/src/test/java/com/coding/basic/ArrayListTest.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.coding.basic; - -import org.junit.Before; -import org.junit.Test; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - - -/** - * Created by luoziyihao on 2/25/17. - */ -public class ArrayListTest { - - private final Logger logger = LoggerFactory.getLogger(this.getClass()); - - - private List list = new ArrayList(); - - @Before - public void before() { - - } - - @Test - public void add() throws Exception { - list.add(1); - } - - @Test - public void get() throws Exception { - add(); - logger.info("{}", list.get(0)); - } - -} \ No newline at end of file diff --git a/group17/1204187480/code/homework/parent/pom.xml b/group17/1204187480/code/homework/parent/pom.xml deleted file mode 100644 index 9d29a4d93e..0000000000 --- a/group17/1204187480/code/homework/parent/pom.xml +++ /dev/null @@ -1,95 +0,0 @@ - - 4.0.0 - - com.coding - parent - pom - 1.0-SNAPSHOT - https://github.com/luoziyihao/coding2017 - - - UTF-8 - UTF-8 - UTF-8 - 1.8 - 1.8 - 1.8 - 3.0 - 1.1.7 - 1.2 - 1.2.17 - 4.12 - - - - - - ch.qos.logback - logback-classic - ${logback-classic.version} - - - - commons-logging - commons-logging - ${commons-logging.version} - - - log4j - log4j - ${log4j.version} - - - - - junit - junit - ${junit.version} - - - - - - alimaven - aliyun maven - http://maven.aliyun.com/nexus/content/groups/public/ - - true - - - true - - - - - - alimaven - aliyun maven - http://maven.aliyun.com/nexus/content/groups/public/ - - true - - - true - - - - - - ${project.artifactId} - - - - org.apache.maven.plugins - maven-compiler-plugin - ${maven-compiler-plugin.version} - - ${maven.compiler.source} - ${maven.compiler.target} - - - - - - \ No newline at end of file diff --git a/group17/1204187480/code/homework/pom.xml b/group17/1204187480/code/homework/pom.xml deleted file mode 100644 index e939b51bd0..0000000000 --- a/group17/1204187480/code/homework/pom.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - 4.0.0 - com.coding - coding2017 - 1.0-SNAPSHOT - pom - - parent - basic - - - diff --git a/group17/1264835468/.classpath b/group17/1264835468/.classpath deleted file mode 100644 index d171cd4c12..0000000000 --- a/group17/1264835468/.classpath +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/group17/1264835468/.gitignore b/group17/1264835468/.gitignore deleted file mode 100644 index ae3c172604..0000000000 --- a/group17/1264835468/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/bin/ diff --git a/group17/1264835468/.project b/group17/1264835468/.project deleted file mode 100644 index d2cad6d6dd..0000000000 --- a/group17/1264835468/.project +++ /dev/null @@ -1,17 +0,0 @@ - - - 1264835468 - - - - - - org.eclipse.jdt.core.javabuilder - - - - - - org.eclipse.jdt.core.javanature - - diff --git a/group17/1264835468/src/assignment/BinaryTree.java b/group17/1264835468/src/assignment/BinaryTree.java deleted file mode 100644 index a74d5fecc8..0000000000 --- a/group17/1264835468/src/assignment/BinaryTree.java +++ /dev/null @@ -1,154 +0,0 @@ -package assignment; - -// -public class BinaryTree> implements Iterable> { - private BinaryTreeNode root; - - public BinaryTree(T data) { - root = new BinaryTreeNode(data); - } - - public BinaryTree(BinaryTreeNode root) { - this.root = root; - } - - public BinaryTreeNode insert(T data) { - BinaryTreeNode node = new BinaryTreeNode(data); - if (root == null) - root = node; - else - insert(root, node); - return node; - } - - public BinaryTreeNode insert(BinaryTreeNode node) { - return insert(node.getData()); - } - - private void insert(BinaryTreeNode current, BinaryTreeNode node) { - - if (current.getData().compareTo(node.getData()) > 0) { - if (current.getLeft() == null) - current.setLeft(node); - else - insert(current.getLeft(), node); - } - else { - if (current.getRight() == null) - current.setRight(node); - else - insert(current.getRight(), node); - } - } - - @Override - public String toString() { - return new BFSNodeQueue().toString(); - } - - /** - * 广度优先遍历节点队列 - * - * @author Administrator - * - */ - private class BFSNodeQueue { - private MyQueue> nodeQueue; - - public BFSNodeQueue() { - nodeQueue = new MyQueue<>(); - } - - public boolean isEmpty() { - return nodeQueue.isEmpty(); - } - - public void enQueue(BinaryTreeNode node) { - if (node != null) nodeQueue.enQueue(node); - } - - // 出队同时把子节点入队 - public BinaryTreeNode deQueue() { - if (!isEmpty()) { - BinaryTreeNode first = nodeQueue.deQueue(); - enQueue(first.getLeft()); - enQueue(first.getRight()); - return first; - } - throw new QueueIsEmptyException(); - } - - // 把所有出队节点放进另一个队列中 - public MyQueue> getResult() { - prepare(); - MyQueue> result = new MyQueue<>(); - while (!isEmpty()) { - result.enQueue(deQueue()); - } - return result; - } - - private void prepare() { - clearQueue(); - enQueue(root); - } - - public void clearQueue() { - while (!isEmpty()) { - deQueue(); - } - } - - @Override - public String toString() { - StringBuilder stringBuilder = new StringBuilder(); - - Iterator> iterator = iterator(); - while (iterator.hasNext()) { - stringBuilder.append(iterator.next() + "\n"); - } - return stringBuilder.toString(); - } - } - - @Override - public Iterator> iterator() { - return new BFSIterator(); - } - - private class BFSIterator implements Iterator> { - MyArrayList> list; - Iterator> iterator; - - public BFSIterator() { - MyQueue> BFSQueue = new BFSNodeQueue().getResult(); - list = new MyArrayList<>(); - while (!BFSQueue.isEmpty()) { - list.add(BFSQueue.deQueue()); - } - iterator = list.iterator(); - } - - @Override - public boolean hasNext() { - return iterator.hasNext(); - } - - @Override - public BinaryTreeNode next() { - return iterator.next(); - } - } - - public static void main(String[] args) { - BinaryTree binaryTree = new BinaryTree<>(5); - binaryTree.insert(6); - binaryTree.insert(7); - binaryTree.insert(4); - Iterator> iterator = binaryTree.iterator(); - while (iterator.hasNext()) { - System.out.println(iterator.next()); - } - System.out.println(binaryTree); - } -} diff --git a/group17/1264835468/src/assignment/BinaryTreeNode.java b/group17/1264835468/src/assignment/BinaryTreeNode.java deleted file mode 100644 index 81d9e13004..0000000000 --- a/group17/1264835468/src/assignment/BinaryTreeNode.java +++ /dev/null @@ -1,58 +0,0 @@ -package assignment; - -public class BinaryTreeNode> { - private T data; - private BinaryTreeNode left; - private BinaryTreeNode right; - - public BinaryTreeNode(T data) { - this.data = data; - } - - public T getData() { - return data; - } - - public void setData(T 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; - } - - @Override - public String toString() { - StringBuilder stringBuilder = new StringBuilder(); - stringBuilder.append("node:" + data); - // 非叶节点则加上左右子节点data - if (left != null || right != null) { - if (left != null) - stringBuilder.append(",left:" + left.data); - else - stringBuilder.append(",left:null"); - if (right != null) - stringBuilder.append(",right:" + right.data); - else - stringBuilder.append(",right:null"); - } - return stringBuilder.toString(); - } - - public static void main(String[] args) { - // BinaryTreeNode binaryTreeNode = new BinaryTreeNode<>(1); - } - -} diff --git a/group17/1264835468/src/assignment/Iterable.java b/group17/1264835468/src/assignment/Iterable.java deleted file mode 100644 index 7cf6048b3d..0000000000 --- a/group17/1264835468/src/assignment/Iterable.java +++ /dev/null @@ -1,6 +0,0 @@ -package assignment; - -// -public interface Iterable { - Iterator iterator(); -} diff --git a/group17/1264835468/src/assignment/Iterator.java b/group17/1264835468/src/assignment/Iterator.java deleted file mode 100644 index 5152d882c6..0000000000 --- a/group17/1264835468/src/assignment/Iterator.java +++ /dev/null @@ -1,7 +0,0 @@ -package assignment; - -public interface Iterator { - public boolean hasNext(); - - public E next(); -} diff --git a/group17/1264835468/src/assignment/List.java b/group17/1264835468/src/assignment/List.java deleted file mode 100644 index 5ab03b0fdf..0000000000 --- a/group17/1264835468/src/assignment/List.java +++ /dev/null @@ -1,14 +0,0 @@ -package assignment; - -// -public interface List { - public void add(E o); - - public void add(int index, E o); - - public E get(int index); - - public E remove(int index); - - public int size(); -} diff --git a/group17/1264835468/src/assignment/MyArrayList.java b/group17/1264835468/src/assignment/MyArrayList.java deleted file mode 100644 index ea9ae87755..0000000000 --- a/group17/1264835468/src/assignment/MyArrayList.java +++ /dev/null @@ -1,110 +0,0 @@ -package assignment; - -import java.util.Arrays; - -public class MyArrayList implements List, Iterable { - private Object[] elementData; - private static final int DEFAULT_SIZE = 10; - private int size; - - public MyArrayList() { - this(DEFAULT_SIZE); - } - - public MyArrayList(int initSize) { - if (initSize < 0) { - throw new IllegalArgumentException(initSize + " < 0"); - } - if (initSize == 0) { - elementData = new Object[DEFAULT_SIZE]; - } - else { - elementData = new Object[initSize]; - } - size = 0; - } - - public void add(E o) { - growIfNeed(); - elementData[size++] = o; - } - - public void add(int index, E o) { - if (index < 0 || index > size) { - throw new IllegalArgumentException("index:" + index); - } - growIfNeed(); - System.arraycopy(elementData, index, elementData, index + 1, size - index); - elementData[index] = o; - size++; - } - - @SuppressWarnings("unchecked") - public E get(int index) { - rangeCheck(index); - return (E) elementData[index]; - } - - public E remove(int index) { - rangeCheck(index); - E target = get(index); - System.arraycopy(elementData, index + 1, elementData, index, size - index - 1); - size--; - return target; - } - - public int size() { - return size; - } - - private void rangeCheck(int index) { - if (index >= size) { - throw new NoSuchElementException("index:" + index); - } - } - - private void growIfNeed() { - if (size == elementData.length) - grow(); - } - - private void grow() { - elementData = Arrays.copyOf(elementData, elementData.length * 2); - } - - @Override - public Iterator iterator() { - return new ArrayIterator<>(); - } - - private class ArrayIterator implements Iterator { - private int currentPos = 0; - - @Override - public boolean hasNext() { - return currentPos < size; - } - - @SuppressWarnings("unchecked") - @Override - public E next() { - rangeCheck(currentPos); - return (E) elementData[currentPos++]; - } - - } - - @Override - public String toString() { - return Arrays.toString(Arrays.copyOf(elementData, size)); - } - -} - -class NoSuchElementException extends RuntimeException { - - public NoSuchElementException(String string) { - super(string); - } - -} diff --git a/group17/1264835468/src/assignment/MyLinkedList.java b/group17/1264835468/src/assignment/MyLinkedList.java deleted file mode 100644 index d0f417e845..0000000000 --- a/group17/1264835468/src/assignment/MyLinkedList.java +++ /dev/null @@ -1,144 +0,0 @@ -package assignment; - -public class MyLinkedList implements List, Iterable { - private Node head; - private int size; - - public MyLinkedList() { - size = 0; - } - - public void add(E o) { - if (head == null) - addFirst(o); - else - addLast(o); - } - - public void addFirst(E o) { - Node oldFirst = head; - head = new Node<>(o, oldFirst); - size++; - } - - public void addLast(E o) { - if (head == null) { - addFirst(o); - } - else { - Node oldLast = movePtrTo(size - 1); - oldLast.next = new Node<>(o, null); - size++; - } - - } - - public void add(int index, E o) { - if (index > size || index < 0) { - throw new IllegalArgumentException("index:" + index); - } - if (index == 0) { - addFirst(o); - return; - } - Node temp = movePtrTo(index - 1); - Node oldNext = temp.next; - Node newNext = new Node<>(o, oldNext); - temp.next = newNext; - size++; - } - - public E remove(int index) { - rangeCheck(index); - E data; - if (index == 0) { - data = head.data; - head = head.next; - } - else { - Node pre = movePtrTo(index - 1); - Node target = pre.next; - pre.next = target.next; - data = target.data; - } - size--; - return data; - } - - public E get(int index) { - rangeCheck(index); - return movePtrTo(index).data; - } - - public int size() { - return size; - } - - private Node movePtrTo(int index) { - Node resultNode = head; - for (int i = 0; i < index; i++) { - resultNode = resultNode.next; - } - return resultNode; - } - - private void rangeCheck(int index) { - if (index >= size) { - throw new NoSuchElementException("index:" + index); - } - } - - @Override - public String toString() { - StringBuilder stringBuilder = new StringBuilder('['); - Node temp = head; - while (temp != null) { - stringBuilder.append(String.valueOf(temp.toString()) + ","); - temp = temp.next; - } - stringBuilder.delete(stringBuilder.length() - 1, stringBuilder.length()); - stringBuilder.append(']'); - return stringBuilder.toString(); - } - - private static class Node { - private T data; - private Node next; - - public Node(T data, Node next) { - this.data = data; - this.next = next; - } - - @Override - public String toString() { - return data.toString(); - } - } - - @Override - public Iterator iterator() { - return new ListIterator(); - } - - private class ListIterator implements Iterator { - Node currentNode; - - public ListIterator() { - currentNode = head; - } - - @Override - public boolean hasNext() { - return currentNode.next != null; - } - - @Override - public E next() { - Node temp = currentNode; - currentNode = currentNode.next; - return temp.data; - } - - } -} \ No newline at end of file diff --git a/group17/1264835468/src/assignment/MyQueue.java b/group17/1264835468/src/assignment/MyQueue.java deleted file mode 100644 index d39b19c4b5..0000000000 --- a/group17/1264835468/src/assignment/MyQueue.java +++ /dev/null @@ -1,34 +0,0 @@ -package assignment; - -public class MyQueue { - private MyLinkedList elementData = new MyLinkedList<>(); - - public void enQueue(T o) { - elementData.addLast(o); - } - - public T deQueue() { - if (!isEmpty()) { - return elementData.remove(0); - } - throw new QueueIsEmptyException(); - } - - public boolean isEmpty() { - return elementData.size() == 0; - } - - public int size() { - return elementData.size(); - } -} - -class QueueIsEmptyException extends RuntimeException { - public QueueIsEmptyException() { - super(); - } - - public QueueIsEmptyException(String string) { - super(string); - } -} diff --git a/group17/1264835468/src/assignment/MyStack.java b/group17/1264835468/src/assignment/MyStack.java deleted file mode 100644 index c3d4f9fb9a..0000000000 --- a/group17/1264835468/src/assignment/MyStack.java +++ /dev/null @@ -1,39 +0,0 @@ -package assignment; - -public class MyStack { - private MyArrayList elementData = new MyArrayList<>(); - - public void push(T o) { - elementData.add(o); - } - - public T pop() { - if (!isEmpty()) { - T data = elementData.remove(elementData.size() - 1); - return data; - } - throw new StackIsEmptyException(); - } - - public T peek() { - return elementData.get(elementData.size() - 1); - } - - public boolean isEmpty() { - return elementData.size() == 0; - } - - public int size() { - return elementData.size(); - } -} - -class StackIsEmptyException extends RuntimeException { - public StackIsEmptyException() { - super(); - } - - public StackIsEmptyException(String string) { - super(string); - } -} diff --git a/group17/1540186032/First/src/ArrayList.java b/group17/1540186032/First/src/ArrayList.java deleted file mode 100644 index c039889a8e..0000000000 --- a/group17/1540186032/First/src/ArrayList.java +++ /dev/null @@ -1,64 +0,0 @@ -public class ArrayList implements List { - - private int size = 0; - - private Object[] elementData = new Object[5]; - - public void add(Object o) { - if (size >= elementData.length) { - resize(2 * size); - } - elementData[size] = o; - size++; - } - - public void add(int index, Object o) { - if (index > size) { - throw new IndexOutOfBoundsException("Index: " + index + ", Size: " - + size); - } - if (size >= elementData.length) { - resize(2 * size); - } - for (int i = size; i > index; i--) { - elementData[i] = elementData[i - 1]; - } - elementData[index] = o; - size++; - } - - public Object get(int index) { - if (index >= size) { - throw new IndexOutOfBoundsException("Index: " + index + ", Size: " - + size); - } - return elementData[index]; - } - - public Object remove(int index) { - Object o = elementData[index]; - for (int i = index; i < size - 1; i++) { - elementData[i] = elementData[i + 1]; - } - elementData[size - 1] = null; - size--; - return o; - } - - public int size() { - return size; - } - - public Iterator iterator() { - return null; - } - - private void resize(int n) { - Object[] temp = elementData; - elementData = new Object[n]; - for (int i = 0; i < temp.length; i++) { - elementData[i] = temp[i]; - } - } - -} diff --git a/group17/1540186032/First/src/BinaryTreeNode.java b/group17/1540186032/First/src/BinaryTreeNode.java deleted file mode 100644 index f5ff087138..0000000000 --- a/group17/1540186032/First/src/BinaryTreeNode.java +++ /dev/null @@ -1,31 +0,0 @@ - -public class BinaryTreeNode { - - private Object data; - private BinaryTreeNode left; - private BinaryTreeNode right; - - 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){ - return null; - } - -} diff --git a/group17/1540186032/First/src/Iterator.java b/group17/1540186032/First/src/Iterator.java deleted file mode 100644 index 73b303c8c2..0000000000 --- a/group17/1540186032/First/src/Iterator.java +++ /dev/null @@ -1,6 +0,0 @@ - -public interface Iterator { - public boolean hasNext(); - public Object next(); - -} diff --git a/group17/1540186032/First/src/LinkedList.java b/group17/1540186032/First/src/LinkedList.java deleted file mode 100644 index 8510036684..0000000000 --- a/group17/1540186032/First/src/LinkedList.java +++ /dev/null @@ -1,131 +0,0 @@ -public class LinkedList implements List { - public static void main(String[] args) { - LinkedList linkedList = new LinkedList(); - linkedList.add(0); - - System.out.println(linkedList.get(0)); - - } - - private Node first; - - private Node last; - - private int size = 0; - - public void add(Object o) { - Node oldLast = last; - last = new Node(); - last.data = o; - last.next = null; - if (oldLast != null) { - oldLast.next = last; - } - if (first == null) { - first = last; - } - size++; - } - - public void add(int index, Object o) { - if (index > size) { - throw new IndexOutOfBoundsException("Index: " + index + ", Size: " - + size); - } - if (index == 0) { - addFirst(o); - return; - } - if (index == size) { - addLast(o); - return; - } - Node curserNode = cursor(index - 1); - Node newNode = new Node(); - newNode.data = o; - newNode.next = curserNode.next; - curserNode.next = newNode; - size++; - } - - public Object get(int index) { - return cursor(index).data; - } - - public Object remove(int index) { - Node node = cursor(index - 1).next; - cursor(index - 1).next = node.next; - node.next = null; - return node.data; - } - - public int size() { - return size; - } - - public void addFirst(Object o) { - Node newNode = new Node(); - newNode.data = o; - if (first == null) { - first = newNode; - } else { - newNode.next = first; - first = newNode; - } - if (last == null) { - last = first; - } - size++; - } - - public void addLast(Object o) { - Node newNode = new Node(); - newNode.data = o; - if (last == null) { - last = newNode; - } else { - last.next = newNode; - last = newNode; - } - if (first == null) { - first = last; - } - size++; - } - - public Object removeFirst() { - Node node = first; - Node newFirst = first.next; - first.next = null; - first = newFirst; - size--; - return node.data; - } - - public Object removeLast() { - Node node = last; - Node newLast = cursor(size - 1); - newLast.next = null; - last = newLast; - size--; - return node.data; - } - - public Iterator iterator() { - return null; - } - - private Node cursor(int index) { - Node curserNode = first; - for (int i = 0; i < index; i++) { - curserNode = curserNode.next; - } - return curserNode; - } - - private static class Node { - Object data; - Node next; - - } -} diff --git a/group17/1540186032/First/src/List.java b/group17/1540186032/First/src/List.java deleted file mode 100644 index 8cb4ba5aff..0000000000 --- a/group17/1540186032/First/src/List.java +++ /dev/null @@ -1,8 +0,0 @@ - -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(); -} diff --git a/group17/1540186032/First/src/Queue.java b/group17/1540186032/First/src/Queue.java deleted file mode 100644 index 325fa033d1..0000000000 --- a/group17/1540186032/First/src/Queue.java +++ /dev/null @@ -1,23 +0,0 @@ - -public class Queue { - LinkedList elementData = new LinkedList(); - - public void enQueue(Object o) { - elementData.add(o); - } - - public Object deQueue() { - if (elementData.size() == 0) { - - } - return elementData.removeFirst(); - } - - public boolean isEmpty() { - return elementData.size() == 0; - } - - public int size() { - return elementData.size(); - } -} diff --git a/group17/1540186032/First/src/Stack.java b/group17/1540186032/First/src/Stack.java deleted file mode 100644 index 47f5244f0d..0000000000 --- a/group17/1540186032/First/src/Stack.java +++ /dev/null @@ -1,28 +0,0 @@ -import java.util.EmptyStackException; - -public class Stack { - private ArrayList elementData = new ArrayList(); - - public void push(Object o) { - elementData.add(o); - } - - public Object pop() { - if (elementData.size() == 0) { - throw new EmptyStackException(); - } - return elementData.remove(elementData.size() - 1); - } - - public Object peek() { - return elementData.get(elementData.size() - 1); - } - - public boolean isEmpty() { - return elementData.size() == 0; - } - - public int size() { - return elementData.size(); - } -} diff --git a/group17/176653813/1766538130226Lesson/.classpath b/group17/176653813/1766538130226Lesson/.classpath deleted file mode 100644 index 373dce4005..0000000000 --- a/group17/176653813/1766538130226Lesson/.classpath +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/group17/176653813/1766538130226Lesson/.gitignore b/group17/176653813/1766538130226Lesson/.gitignore deleted file mode 100644 index ae3c172604..0000000000 --- a/group17/176653813/1766538130226Lesson/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/bin/ diff --git a/group17/176653813/1766538130226Lesson/.project b/group17/176653813/1766538130226Lesson/.project deleted file mode 100644 index 96a5027846..0000000000 --- a/group17/176653813/1766538130226Lesson/.project +++ /dev/null @@ -1,17 +0,0 @@ - - - 1766538130226Lesson - - - - - - org.eclipse.jdt.core.javabuilder - - - - - - org.eclipse.jdt.core.javanature - - diff --git a/group17/176653813/1766538130226Lesson/.settings/org.eclipse.jdt.core.prefs b/group17/176653813/1766538130226Lesson/.settings/org.eclipse.jdt.core.prefs deleted file mode 100644 index 3a21537071..0000000000 --- a/group17/176653813/1766538130226Lesson/.settings/org.eclipse.jdt.core.prefs +++ /dev/null @@ -1,11 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 -org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.8 -org.eclipse.jdt.core.compiler.debug.lineNumber=generate -org.eclipse.jdt.core.compiler.debug.localVariable=generate -org.eclipse.jdt.core.compiler.debug.sourceFile=generate -org.eclipse.jdt.core.compiler.problem.assertIdentifier=error -org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.source=1.8 diff --git a/group17/176653813/1766538130226Lesson/src/com/coding/basic/ArrayList.java b/group17/176653813/1766538130226Lesson/src/com/coding/basic/ArrayList.java deleted file mode 100644 index 61df9ada90..0000000000 --- a/group17/176653813/1766538130226Lesson/src/com/coding/basic/ArrayList.java +++ /dev/null @@ -1,80 +0,0 @@ -package com.coding.basic; - -public class ArrayList implements List { - - private int size = 0; - private Object[] obj = new Object[5]; - - @Override - public void add(Object o) { - if(this.size < 0 ) - System.out.print("Error"); - this.extend(100); - obj[this.size] = o; - this.size ++; - } - - @Override - public void add(int index, Object o) { - - if(index < 0) - System.out.println("Error"); - if(index < this.size){ - extend(100); - for(int i = this.size;i < index; i--){ - obj[i+1] = obj[i]; - } - obj[index] = o; - }else if(index >= size){ - extend(100); - obj[size] = o; - } - this.size++; - } - - @Override - public Object get(int index) { - if(index < 0 || index > size){ - System.out.println("Error"); - return null; - } - return obj[index]; - } - - @Override - public Object remove(int index) { - if(index < 0 || index > size){ - System.out.println("Error"); - return null; - } - for(int i = index;i <= size;i++){ - obj[i] = obj[i+1]; - } - size--; - return obj[index]; - } - - @Override - public int size() { - return size; - } - public int length(){ - return obj.length; - } - public void extend(int newLength){ - if (this.size >= obj.length){ - //չ - Object[] old = obj; - obj = new Object[size+newLength]; - for(int i = 0;i < size; i++){ - obj[i] = old[i]; - } - } - return; - } - public void Iteror(){ - for(int i = 0 ;i < size ; i++){ - System.out.println(obj[i]); - } - } -} diff --git a/group17/176653813/1766538130226Lesson/src/com/coding/basic/LinkList.java b/group17/176653813/1766538130226Lesson/src/com/coding/basic/LinkList.java deleted file mode 100644 index 2f4e0e3067..0000000000 --- a/group17/176653813/1766538130226Lesson/src/com/coding/basic/LinkList.java +++ /dev/null @@ -1,96 +0,0 @@ -package com.coding.basic; - -public class LinkList implements List{ - - private Node head; //ͷ㲻 - private static class Node{ - Object data; - Node next; - } - - @Override - public void add(Object o) { - //һû뵽 - if(null == head){ - head = new Node(); - head.next = null; - head.data = o; - }else{ - //β뷨 - //Node t = new Node(); - Node t; - Node ins = new Node(); - t = head; - while(t.next != null){ - t = t.next; - } - t.next = ins; - ins.next = null; - ins.data = o; - } - } - - @Override - public void add(int index, Object o) { - if(index < 0 ){ - System.out.println("Error"); - }else if(index == 0 || index == 1){ - Node t = new Node(); - t.next = head.next; - head.next = t; - t.data = o; - }else{ - Node t = new Node();//ǰڵ - Node p = new Node();//ǰһڵ - t = head.next; - for(int i = 1;i < index;i++){ - p = t; - t = t.next; - } - Node ins = new Node(); - p.next = ins; - ins.next = t; - ins.data = o; - } - - } - - @Override - public Object get(int index) { - if(index < 0 || head == null){ - System.out.println("Error"); - return null; - }else{ - Node t ; - t = head; - for(int i = 1;i < index;i++){ - t = t.next; - } - return t.data; - } - } - - @Override - public Object remove(int index) { - - return null; - } - - public void display(){ - if(head == null){ - System.out.println("No Data"); - }else{ - Node t ; - t = head; - while(t != null){ - System.out.println("******"+t.data); - t = t.next; - } - } - - } - @Override - public int size() { - return 0; - } -} diff --git a/group17/176653813/1766538130226Lesson/src/com/coding/basic/List.java b/group17/176653813/1766538130226Lesson/src/com/coding/basic/List.java deleted file mode 100644 index 124fba53ec..0000000000 --- a/group17/176653813/1766538130226Lesson/src/com/coding/basic/List.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.coding.basic; - -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(); -} diff --git a/group17/176653813/1766538130226Lesson/src/com/coding/basic/Queue.java b/group17/176653813/1766538130226Lesson/src/com/coding/basic/Queue.java deleted file mode 100644 index 032b636962..0000000000 --- a/group17/176653813/1766538130226Lesson/src/com/coding/basic/Queue.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.coding.basic; - -public class Queue { - - private LinkList elementData = new LinkList(); - private int front = 0; - private int rear = 0; - - - public void enQueue(Object o){ - elementData.add(o); - rear++; - } - public Object deQueue(){ - if(!isEmpty()){ - Object obj = elementData.remove(front); - front++; - return obj; - }else{ - System.out.println("Queue is empty"); - return null; - } - } - public boolean isEmpty(){ - if(front > rear){ - return true; - } - return false; - } - - public int size(){ - return rear-front+1; - } -} - diff --git a/group17/176653813/1766538130226Lesson/src/com/coding/basic/Stack.java b/group17/176653813/1766538130226Lesson/src/com/coding/basic/Stack.java deleted file mode 100644 index b902dea844..0000000000 --- a/group17/176653813/1766538130226Lesson/src/com/coding/basic/Stack.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.coding.basic; - -public class Stack { - - // - private ArrayList elementData = new ArrayList(); - private int top = 0; - - public void push(Object o){ - elementData.add(o); - top++; - } - - public Object pop(){ - if(!isEmpty()){ - System.out.println("stack is empoty"); - return null; - } - Object obj = elementData.remove(top); - top--; - return obj; - } - - public Object peek(){ - return elementData.get(top); - } - - public boolean isEmpty(){ - if(top != 0){ - return true; - } - return false; - } - - public int size(){ - return top++; - } - - - -} diff --git a/group17/176653813/1766538130226Lesson/src/com/coding/basic/Test.java b/group17/176653813/1766538130226Lesson/src/com/coding/basic/Test.java deleted file mode 100644 index 6f48b4b4fd..0000000000 --- a/group17/176653813/1766538130226Lesson/src/com/coding/basic/Test.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.coding.basic; - -import static org.junit.Assert.*; - -public class Test { - - @org.junit.Test - public void test() { - -/* ArrayList al = new ArrayList(); - al.add(1); - al.add(2); - al.add(3); - al.add(4); - al.add(5); - al.add(200); - al.add(10,100); - al.Iteror(); - //System.out.println(al.length()); - //System.out.println(al.size()); - System.out.println("=================="); - al.remove(0); - al.Iteror();*/ - - LinkList ls = new LinkList(); - ls.add(100); - ls.add(300); - ls.add(500); - ls.add(1000); - ls.add(3,2000); - ls.display(); - System.out.println(ls.get(4)); - } - -} - diff --git a/group17/176653813/RemoteSystemsTempFiles/.project b/group17/176653813/RemoteSystemsTempFiles/.project deleted file mode 100644 index 5447a64fa9..0000000000 --- a/group17/176653813/RemoteSystemsTempFiles/.project +++ /dev/null @@ -1,12 +0,0 @@ - - - RemoteSystemsTempFiles - - - - - - - org.eclipse.rse.ui.remoteSystemsTempNature - - diff --git a/group17/240094626/.gitignore b/group17/240094626/.gitignore deleted file mode 100644 index e59106a7ab..0000000000 --- a/group17/240094626/.gitignore +++ /dev/null @@ -1,22 +0,0 @@ -*.class - -# Mobile Tools for Java (J2ME) -.mtj.tmp/ - -# Package Files # -*.jar -*.war -*.ear - -# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml -hs_err_pid* - -#ide config -.metadata -.recommenders - -*.settings -*.project -*.classpath -*/.settings -/**/target/**/* diff --git a/group17/240094626/warm-up/.gitignore b/group17/240094626/warm-up/.gitignore deleted file mode 100644 index c7b6e44e1d..0000000000 --- a/group17/240094626/warm-up/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -/bin/ -*.classpath -*.project -/.settings/ diff --git a/group17/240094626/warm-up/src/com/coding/basic/Iterator.java b/group17/240094626/warm-up/src/com/coding/basic/Iterator.java deleted file mode 100644 index 06ef6311b2..0000000000 --- a/group17/240094626/warm-up/src/com/coding/basic/Iterator.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.coding.basic; - -public interface Iterator { - public boolean hasNext(); - public Object next(); - -} diff --git a/group17/240094626/warm-up/src/com/coding/basic/List.java b/group17/240094626/warm-up/src/com/coding/basic/List.java deleted file mode 100644 index 10d13b5832..0000000000 --- a/group17/240094626/warm-up/src/com/coding/basic/List.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.coding.basic; - -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(); -} diff --git a/group17/240094626/warm-up/src/com/coding/basic/impl/ArrayList.java b/group17/240094626/warm-up/src/com/coding/basic/impl/ArrayList.java deleted file mode 100644 index c20eb376d4..0000000000 --- a/group17/240094626/warm-up/src/com/coding/basic/impl/ArrayList.java +++ /dev/null @@ -1,166 +0,0 @@ -package com.coding.basic.impl; - -import java.util.Arrays; - -import com.coding.basic.Iterator; -import com.coding.basic.List; - -/** - * - * @描述: ArrayList简单实现 - * @作者:240094626 - * @创建日期:2017-2-20 - */ -public class ArrayList implements List { - - - /** - * @comment:元素数组 - */ - private Object data[] = null; - - /** - * @comment:数组元素个数 - */ - private int size = 0; - - /** - * 无参构造函数,初始化容量为10的空列表 - */ - public ArrayList(){ - this(10); - } - - /** - * @param length - * 构造函数,初始化容量为length的空列表 - */ - public ArrayList(int length){ - if(length < 0){ - throw new IllegalArgumentException("初始容量参数非法:"+length); - } - data = new Object[length]; - } - - - /** - * @createTime: 2017-2-21 下午1:32:28 - * @param length - * @return:void - * @comment:列表结构扩展容量,每次增加原来的1/2容量 - */ - private void grow(int length){ - int oldLength = data.length; - if(length > oldLength){ - Object oldData[] = data; - int newLength = oldLength*3/2 + 1; - if(newLength < length){ - newLength = length; - } - data = new Object[newLength]; - System.arraycopy(oldData, 0, data, 0, oldLength); - } - } - - /** - * @createTime: 2017-2-21 下午1:32:05 - * @param index - * @return:void - * @comment:检验下标参数是否超限 - */ - private void check(int index) { - if( index >= size){ - throw new IndexOutOfBoundsException("Index:"+index+",size:"+size); - } - } - - @Override - public void add(Object o) { - grow(size+1); - data[size++]=o; - } - - @Override - public void add(int index, Object o) { - if( index > size || index < 0){ - throw new IndexOutOfBoundsException("Index:"+index); - } - grow(size+1); - System.arraycopy(data, index, data, index+1, size-index); - data[index] = o; - size++; - - } - - @Override - public Object get(int index) { - check(index); - return data[index]; - } - - - - @Override - public Object remove(int index) { - check(index); - Object remove = data[index]; - System.arraycopy(data, index+1, data, index, size-index); - data[--size] = null; - return remove; - } - - @Override - public int size() { - return size; - } - - - @Override - public String toString() { - return "ArrayList [data=" + Arrays.toString(data) + ", size=" + size - + "]"; - } - - public Iterator iterator(){ - return new ArrayListIterator(); - } - - /** - * @描述: 简单实现迭代器 - * @作者:240094626 - * @创建日期:2017-2-21 - */ - private class ArrayListIterator implements Iterator{ - - /** - * @column:index - * @comment:当前位置下标 - */ - private int index; - - /** - * 无参构造,初始化迭代器的下标为0 - */ - public ArrayListIterator(){ - index = 0; - } - - @Override - public boolean hasNext() { - if(index < size){ - return true; - } - return false; - } - - @Override - public Object next() { - Object o = get(index++); - return o; - } - - } - -} - - diff --git a/group17/240094626/warm-up/src/com/coding/basic/impl/BinaryTree.java b/group17/240094626/warm-up/src/com/coding/basic/impl/BinaryTree.java deleted file mode 100644 index d9478146bd..0000000000 --- a/group17/240094626/warm-up/src/com/coding/basic/impl/BinaryTree.java +++ /dev/null @@ -1,82 +0,0 @@ -package com.coding.basic.impl; - - -/** - * 二叉树简单实现(key为int类型) - * @author 240094626 - * - */ -public class BinaryTree { - private Node rootNode = null; - - public Node insert(int key){ - return insert(key,null); - } - - public Node insert(int key ,Object o){ - Node newNode = new Node(key, o); - if(rootNode == null){ - rootNode = newNode; - return rootNode; - } - Node fatherNode = rootNode; - Node currentNode = rootNode; - while(currentNode != null){ - fatherNode = currentNode; - if(key < currentNode.key){ - currentNode = currentNode.left; - }else{ - currentNode = currentNode.right; - } - } - if(key < fatherNode.key){ - fatherNode.left = newNode; - }else{ - fatherNode.right = newNode; - } - return newNode; - } - - public Node getNode(int key){ - return get(rootNode, key); - } - - private Node get(Node n,int key){ - if(n == null){ - return null; - } - if(key < n.key){ - return get(n.left, key); - }else if(key > n.key){ - return get(n.left, key); - } - return null; - } - - - - - private static class Node{ - - int key; - Object data; - Node left; - Node right; - - public Node(int key, Object data) { - this.key = key; - this.data = data; - this.left = null; - this.right = null; - } - - @Override - public String toString() { - return "Node [key=" + key + ", data=" + data + "]"; - } - - - } - - -} diff --git a/group17/240094626/warm-up/src/com/coding/basic/impl/LinkedList.java b/group17/240094626/warm-up/src/com/coding/basic/impl/LinkedList.java deleted file mode 100644 index a48b9e4705..0000000000 --- a/group17/240094626/warm-up/src/com/coding/basic/impl/LinkedList.java +++ /dev/null @@ -1,184 +0,0 @@ -package com.coding.basic.impl; - -import java.util.NoSuchElementException; - -import com.coding.basic.Iterator; -import com.coding.basic.List; - -/** - * 双向链表简单实现 - * @author 240094626 - */ -public class LinkedList implements List { - /**头节点(空的)*/ - private Node header = new Node(null, null, null); - /**链表节点长度*/ - private int size = 0; - - - /** - * 无参构造函数,初始化header节点,前后均指向header节点,形成环形链表 - * 环形链表:为了使链表节点的开头是header,结尾也是header; - * 由于实现了List,那么链表就是有序的,根据下标查询时可借助环形特点双向查找,提升效率; - */ - public LinkedList() { - header.next = header.pre = header; - } - - - /** - * 将Object o 添加到 节点n之前 - * @param o - * @param n - */ - private void addBefore(Object o, Node n) { - Node newNode = new Node(o, n.pre, n); - newNode.next.pre = newNode; - newNode.pre.next = newNode; - size++; - } - - /** - * 根据下标位置查找结点 - * @param index - * @return - */ - private Node getNode(int index) { - if(index < 0 || index >= size){ - throw new IndexOutOfBoundsException("index:"+index); - } - // 查找从header开始 - Node n = header; - if(index < (size >> 1)){ - // 往next方向找第index个节点 - for(int i=0; i < index; i++){ - n = n.next; - } - }else{ - // 往pre方向找第size-index个节点 - for(int i=size-index; i > 0; i--){ - n = n.pre; - } - } - return n; - } - - - /** - * 移除节点,从当前节点的前后节点间删除当前节点 - * @param n - * @return - */ - private Object remove(Node n){ - if(n == header){ - throw new NoSuchElementException("未找到节点"); - } - Object result = n.data; - n.pre.next = n.next; - n.next.pre = n.pre; - n.next = n.pre = null; - n.data = null; - size--; - return result; - } - - @Override - public void add(Object o) { - // 默认往header前添加 - addBefore(o,header); - } - - - @Override - public void add(int index, Object o) { - addBefore(o,index==size?header:getNode(index)); - } - - @Override - public Object get(int index) { - Node n = getNode(index); - return n.data; - } - - - @Override - public Object remove(int index) { - return remove(getNode(index)); - } - - - @Override - public int size() { - return size; - } - /** - * 环形链表结构,header.next就是第一个节点 - * @param o - */ - public void addFirst(Object o){ - addBefore(o, header.next); - } - /** - * 环形链表结构,header.pre就是最后一个节点 - * @param o - */ - public void addLast(Object o){ - addBefore(o, header); - } - public Object removeFirst(){ - return remove(header.next); - } - public Object removeLast(){ - return remove(header.pre); - } - - public Iterator iterator(){ - - return new LinkedListIterator(); - } - - private static class Node{ - Object data; - Node pre; - Node next; - - /** - * 链表节点,带参构造函数 - * @param data 节点内容 - * @param pre 上一个节点 - * @param next 下一个节点 - */ - public Node(Object data, Node pre, Node next) { - super(); - this.data = data; - this.pre = pre; - this.next = next; - } - - } - - private class LinkedListIterator implements Iterator{ - int index ; - - public LinkedListIterator() { - index = 0; - } - - @Override - public boolean hasNext() { - if(index < size){ - return true; - } - return false; - } - - @Override - public Object next() { - Node n = getNode(index++); - return n.data; - } - - } - - -} diff --git a/group17/240094626/warm-up/src/com/coding/basic/impl/Queue.java b/group17/240094626/warm-up/src/com/coding/basic/impl/Queue.java deleted file mode 100644 index 3a9aa129e2..0000000000 --- a/group17/240094626/warm-up/src/com/coding/basic/impl/Queue.java +++ /dev/null @@ -1,67 +0,0 @@ -package com.coding.basic.impl; - -import com.coding.basic.Iterator; - -/** - * 队列简单实现 - * @author 240094626 - * - */ -public class Queue { - /**队列元素容器对象*/ - LinkedList elementData = new LinkedList(); - - /** - * 入队列 - * @param o - */ - public void enQueue(Object o){ - elementData.add(o); - } - - /** - * 出队列:先进先出,故取出链表首个节点 - * @return - */ - public Object deQueue(){ - return elementData.removeFirst(); - } - - public boolean isEmpty(){ - if(elementData.size() > 0 ){ - return false; - } - return true; - } - - public int size(){ - return elementData.size(); - } - - public Iterator iterator(){ - return new QueueIterator(); - } - - private class QueueIterator implements Iterator{ - - int index; - - public QueueIterator() { - index = 0; - } - - @Override - public boolean hasNext() { - if(index < elementData.size()){ - return true; - } - return false; - } - - @Override - public Object next() { - return elementData.get(index++); - } - - } -} diff --git a/group17/240094626/warm-up/src/com/coding/basic/impl/Stack.java b/group17/240094626/warm-up/src/com/coding/basic/impl/Stack.java deleted file mode 100644 index d4c3158f94..0000000000 --- a/group17/240094626/warm-up/src/com/coding/basic/impl/Stack.java +++ /dev/null @@ -1,78 +0,0 @@ -package com.coding.basic.impl; - -import com.coding.basic.Iterator; - -/** - * 栈的简单实现 - * @author 240094626 - */ -public class Stack { - /**长度可变的元素容器*/ - private ArrayList elementData = new ArrayList(); - - /** - * 压入栈 - * @param o - */ - public void push(Object o){ - elementData.add(o); - } - - /** - * 出栈(末尾元素),并移除 - * @return Object - */ - public Object pop(){ - return elementData.remove(elementData.size()-1); - } - - /** - * 取出栈(末尾元素),不移除 - * @return Object - */ - public Object peek(){ - return elementData.get(elementData.size()-1); - } - - /** - * 判断栈是否为空 - * @return boolean - */ - public boolean isEmpty(){ - return elementData.size() == 0 ? true : false; - } - - /** - * 栈的长度,既是容器ArrayList的长度 - * @return int - */ - public int size(){ - return elementData.size(); - } - - public Iterator iterator(){ - return new StackIterator(); - } - private class StackIterator implements Iterator{ - int index; - - public StackIterator() { - index = 0; - } - - @Override - public boolean hasNext() { - if(index < elementData.size()){ - return true; - } - return false; - } - - @Override - public Object next() { - return elementData.get(index); - } - - - } -} \ No newline at end of file diff --git a/group17/51075907/HomeWork/.classpath b/group17/51075907/HomeWork/.classpath deleted file mode 100644 index 10b13d9f7a..0000000000 --- a/group17/51075907/HomeWork/.classpath +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/group17/51075907/HomeWork/.project b/group17/51075907/HomeWork/.project deleted file mode 100644 index c27db84883..0000000000 --- a/group17/51075907/HomeWork/.project +++ /dev/null @@ -1,17 +0,0 @@ - - - HomeWork - - - - - - org.eclipse.jdt.core.javabuilder - - - - - - org.eclipse.jdt.core.javanature - - diff --git a/group17/51075907/HomeWork/.settings/org.eclipse.jdt.core.prefs b/group17/51075907/HomeWork/.settings/org.eclipse.jdt.core.prefs deleted file mode 100644 index 43785549a2..0000000000 --- a/group17/51075907/HomeWork/.settings/org.eclipse.jdt.core.prefs +++ /dev/null @@ -1,11 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=disabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.2 -org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.4 -org.eclipse.jdt.core.compiler.debug.lineNumber=generate -org.eclipse.jdt.core.compiler.debug.localVariable=generate -org.eclipse.jdt.core.compiler.debug.sourceFile=generate -org.eclipse.jdt.core.compiler.problem.assertIdentifier=warning -org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning -org.eclipse.jdt.core.compiler.source=1.3 diff --git a/group17/51075907/HomeWork/src/day1_HomeWork/ArrayList.java b/group17/51075907/HomeWork/src/day1_HomeWork/ArrayList.java deleted file mode 100644 index 5a164ce8ca..0000000000 --- a/group17/51075907/HomeWork/src/day1_HomeWork/ArrayList.java +++ /dev/null @@ -1,75 +0,0 @@ -package day1_HomeWork; - - - public class ArrayList implements List { - - private int size = 0; - - private Object[] elementData = new Object[100]; - - //ռ䳬ǰС,֤ - public void ensureCapacity( int newCapacity) - { - if ( newCapacity < size) - return; - - Object [] old =elementData; - elementData =(Object []) new Object[newCapacity]; - for (int i=0; i index; i--) - elementData[i] =elementData [i-1]; - elementData[index]= o; - size ++; - - } - - public Object get(int index){ - if ( index<0 || index >=size()) - throw new ArrayIndexOutOfBoundsException(); - return elementData[index]; - } - - public Object remove(int index){ - Object remove_elementData=elementData[index]; - for ( int i=index;i size()) - throw new IndexOutOfBoundsException(); - - if (index < size()/2) - { - p=beginMarker.next; - for (int i =0;iindex;i--) - p=p.prev; - } - return p; - } - public Object remove(Node p){ - p.next.prev =p.prev; - p.prev.next=p.next; - int size; - size--; - int modCount; - modCount++; - return p.data; - } - - public int size(){ - return -1; - } - - public void addFirst(Node p,Object o){ - Node newNode= new Node (o,p.prev,p); - newNode.prev.next= newNode; - p.prev =newNode; - size++; - modCount++; - } - public void addLast(Object o){ - - } - public Object removeFirst(int index){ - return remove( get(index)); - } - public Object removeLast(){ - return null; - } - public java.util.Iterator iterator(){ - return new LinkedListIterator(); - } - - private class LinkedListIterator implements java.util.Iterator{ - private Node current=beginMarker.next; - private int expectedModCount=modCount; - private boolean okTORemove=false; - - public boolean haNext() - { - return current!= endMarker; - } - public Object next() - { - if (modCount !=expectedModCount) - throw new java.util.ConcurrentModificationException(); - if (!=hasNext()) - throw new java.util.NoSuchElementException(); - - - } - } - - - private static class Node{ - public Node(Object o, Node p, Node n) - { - data =o; next=n; prev=p; - } - public Object data; - public Node next; - public Node prev; - - } -} diff --git a/group17/51075907/HomeWork/src/day1_HomeWork/List.java b/group17/51075907/HomeWork/src/day1_HomeWork/List.java deleted file mode 100644 index 4fce964dce..0000000000 --- a/group17/51075907/HomeWork/src/day1_HomeWork/List.java +++ /dev/null @@ -1,9 +0,0 @@ -package day1_HomeWork; - -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(); -} diff --git a/group17/51075907/HomeWork/src/day1_HomeWork/Queue.java b/group17/51075907/HomeWork/src/day1_HomeWork/Queue.java deleted file mode 100644 index 9a0468c683..0000000000 --- a/group17/51075907/HomeWork/src/day1_HomeWork/Queue.java +++ /dev/null @@ -1,19 +0,0 @@ -package day1_HomeWork; - -public class Queue { - - public void enQueue(Object o){ - } - - public Object deQueue(){ - return null; - } - - public boolean isEmpty(){ - return false; - } - - public int size(){ - return -1; - } -} diff --git a/group17/51075907/HomeWork/src/day1_HomeWork/Stack.java b/group17/51075907/HomeWork/src/day1_HomeWork/Stack.java deleted file mode 100644 index 259c5f0910..0000000000 --- a/group17/51075907/HomeWork/src/day1_HomeWork/Stack.java +++ /dev/null @@ -1,23 +0,0 @@ -package day1_HomeWork; - - -public class Stack { - private ArrayList elementData = new ArrayList(); - - public void push(Object o){ - } - - public Object pop(){ - return null; - } - - public Object peek(){ - return null; - } - public boolean isEmpty(){ - return false; - } - public int size(){ - return -1; - } -} diff --git a/group17/785396327/binarytree/BinaryTree.java b/group17/785396327/binarytree/BinaryTree.java deleted file mode 100644 index bf5a6b639c..0000000000 --- a/group17/785396327/binarytree/BinaryTree.java +++ /dev/null @@ -1,55 +0,0 @@ -package binarytree; - -/** - * Created by william on 2017/2/16. - */ -public class BinaryTree { - private Node root; - - class Node { - private Node left; - private Node right; - private Comparable data; - - public Node(Node left, Node right, Comparable data) { - this.left = left; - this.right = right; - this.data = data; - } - - private void add(Comparable data) { - if (this.data.compareTo(data) >= 0) - if (this.left == null) - this.left = new Node(null, null, data); - else - left.add(data); - else if (this.data.compareTo(data) < 0) - if (this.right == null) - this.right = new Node(null, null, data); - else - this.right.add(data); - } - - public Comparable getData() { - return this.data; - } - - public Node getLeft() { - return this.left; - } - - public Node getRight() { - return this.right; - } - } - - public void add(Comparable data) { - if (this.root == null) - root = new Node(null, null, data); - else this.root.add(data); - } - - public void printByType(SearchType type) { - type.printByType(this.root); - } -} diff --git a/group17/785396327/binarytree/DLRSearchType.java b/group17/785396327/binarytree/DLRSearchType.java deleted file mode 100644 index 3d1adbbdc7..0000000000 --- a/group17/785396327/binarytree/DLRSearchType.java +++ /dev/null @@ -1,16 +0,0 @@ -package binarytree; - -/** - * Created by william on 2017/2/18. - */ -public class DLRSearchType implements SearchType { - - @Override - public void printByType(BinaryTree.Node root) { - if (root != null) { - System.out.print(root.getData()+" "); - printByType(root.getLeft()); - printByType(root.getRight()); - } - } -} diff --git a/group17/785396327/binarytree/LDRSearchType.java b/group17/785396327/binarytree/LDRSearchType.java deleted file mode 100644 index da18dbc1b9..0000000000 --- a/group17/785396327/binarytree/LDRSearchType.java +++ /dev/null @@ -1,15 +0,0 @@ -package binarytree; - -/** - * Created by william on 2017/2/18. - */ -public class LDRSearchType implements SearchType { - @Override - public void printByType(BinaryTree.Node root) { - if (root != null) { - printByType(root.getLeft()); - System.out.print(root.getData() + " "); - printByType(root.getRight()); - } - } -} diff --git a/group17/785396327/binarytree/LFSearchType.java b/group17/785396327/binarytree/LFSearchType.java deleted file mode 100644 index d983c50ff9..0000000000 --- a/group17/785396327/binarytree/LFSearchType.java +++ /dev/null @@ -1,27 +0,0 @@ -package binarytree; - -import java.util.LinkedList; - -/** - * Created by william on 2017/2/18. - */ -public class LFSearchType implements SearchType { - private LinkedList queue = new LinkedList<>(); - - @Override - public void printByType(BinaryTree.Node root) { - if (root == null) - return; - queue.offer(root); - while (!queue.isEmpty()) { - BinaryTree.Node curNode = queue.poll(); - System.out.print(curNode.getData() + " "); - if (curNode.getLeft() != null) - queue.offer(curNode.getLeft()); - if (curNode.getRight() != null) - queue.offer(curNode.getRight()); - } - - } - -} diff --git a/group17/785396327/binarytree/LRDSearchType.java b/group17/785396327/binarytree/LRDSearchType.java deleted file mode 100644 index 250645e6df..0000000000 --- a/group17/785396327/binarytree/LRDSearchType.java +++ /dev/null @@ -1,15 +0,0 @@ -package binarytree; - -/** - * Created by william on 2017/2/18. - */ -public class LRDSearchType implements SearchType { - @Override - public void printByType(BinaryTree.Node root) { - if (root != null) { - printByType(root.getLeft()); - printByType(root.getRight()); - System.out.print(root.getData() + " "); - } - } -} diff --git a/group17/785396327/binarytree/SearchType.java b/group17/785396327/binarytree/SearchType.java deleted file mode 100644 index 606124a781..0000000000 --- a/group17/785396327/binarytree/SearchType.java +++ /dev/null @@ -1,9 +0,0 @@ -package binarytree; - -/** - * Created by william on 2017/2/18. - */ -public interface SearchType { - - void printByType(T root); -} diff --git a/group17/785396327/list/ArrayList.java b/group17/785396327/list/ArrayList.java deleted file mode 100644 index 9d79bd2013..0000000000 --- a/group17/785396327/list/ArrayList.java +++ /dev/null @@ -1,135 +0,0 @@ -package list; - -import java.util.Arrays; -import java.util.NoSuchElementException; - -/** - * Created by william on 2017/2/25. - */ -public class ArrayList implements List { - private static final int DEFAULT_CAPACITY = 10; - private int size; - private Object[] elementData; - - public ArrayList() { - elementData = new Object[DEFAULT_CAPACITY]; - } - - public ArrayList(int initialCapacity) { - if (initialCapacity < 0) - throw new RuntimeException("非法初始化大小参数!"); - elementData = new Object[initialCapacity]; - } - - public boolean add(T ele) { - grow(); - elementData[size] = ele; - size++; - return true; - } - - public T get(int index) { - checkBounds(index); - return (T) elementData[index]; - } - - public T remove(int index) { - checkBounds(index); - T removeEle = (T) elementData[index]; - System.arraycopy(elementData, index + 1, elementData, index, size - index); - size--; - return removeEle; - } - - public boolean add(int index, T ele) { - checkBounds(index); - size++;//有效元素内容先加,保证长度极限情况grow在添加前生效 - grow(); - //将原本数组从待插入的index截取,将原本index后的有效值,复制到原本数组index+1之后 - System.arraycopy(elementData, index, elementData, index + 1, size - index); - elementData[index] = ele; - return true; - } - - @Override - public boolean remove(T ele) { - int index; - if ((index = indexOf(ele)) == -1) - return false; - remove(index); - return true; - } - - private void checkBounds(int index) { - if (index < 0 || index >= size) - throw new IndexOutOfBoundsException("index : " + index + ", size : [ 0 - " + size + " ]"); - } - - public int size() { - return size; - } - - private void grow() { - if (size >= elementData.length) { - int curLen = elementData.length; - int newLen = curLen + (curLen >> 1) > Integer.MAX_VALUE ? Integer.MAX_VALUE : curLen + (curLen >> 1); - elementData = Arrays.copyOf(elementData, newLen); - } - } - - public boolean isEmpty() { - return size == 0; - } - - @Override - public boolean contains(T ele) { - return indexOf(ele) != -1; - } - - public int indexOf(T ele) { - for (int i = 0; i < size; i++) { - if (ele == null) - if (null == elementData[i]) - return i; - else if (ele.equals(elementData[i])) - return i; - } - return -1; - } - - public Iterator iterator() { - return new Itr(); - } - - private class Itr implements Iterator { - int cursor;//待遍历元素的下标 - - @Override - public boolean hasNext() { - return cursor != size; - } - - @Override - public T next() { - if (cursor >= size) - throw new NoSuchElementException(); - return (T) elementData[cursor++]; - } - - @Override - public void remove() { - if (cursor >= size) - throw new NoSuchElementException(); - ArrayList.this.remove(cursor--); - } - } - - @Override - public String toString() { - StringBuilder sb = new StringBuilder("[ "); - for (Object ele : elementData) { - sb.append(ele).append(" "); - } - return sb.append("]").toString(); - } -} diff --git a/group17/785396327/list/Iterator.java b/group17/785396327/list/Iterator.java deleted file mode 100644 index 0df87c6cf1..0000000000 --- a/group17/785396327/list/Iterator.java +++ /dev/null @@ -1,13 +0,0 @@ -package list; - -/** - * Created by IBM on 2017/2/25. - */ -public interface Iterator { - - boolean hasNext(); - - T next(); - - void remove(); -} diff --git a/group17/785396327/list/LinkedList.java b/group17/785396327/list/LinkedList.java deleted file mode 100644 index 1b1fa0fccb..0000000000 --- a/group17/785396327/list/LinkedList.java +++ /dev/null @@ -1,163 +0,0 @@ -package list; - -/** - * Created by william on 2017/2/25. - */ -public class LinkedList implements List { - private int size; - private Node first; - private Node last; - - private static class Node { - Node next; - Node prev; - T data; - - Node(Node prev, Node next, T data) { - this.prev = prev; - this.next = next; - this.data = data; - } - } - - @Override - public int size() { - return this.size; - } - - @Override - public boolean isEmpty() { - return size == 0; - } - - @Override - public boolean contains(T ele) { - Node head = first; - while (head != null) { - if ((ele == null && head.data == null) || (ele.equals(head.data))) - return true; - head = head.next; - } - return false; - } - - @Override - public boolean add(T ele) { - if (first == null) - first = last = new Node(null, null, ele); - else { - //新添加节点的上一个节点是原来链表的最后一个节点 - Node addNode = new Node(last, null, ele); - //原来链表的最后一个节点的下一个节点需要指向新添加的节点 - last.next = addNode; - //更新最后一个节点为新添加的节点 - last = addNode; - } - size++; - return true; - } - - @Override - public boolean add(int index, T ele) { - checkBounds(index, true); - if (index == size) add(ele); - else { - Node head = first; - for (int i = 0; i < size; i++) { - if (i == index - 1)//得到要插入位置的前一个节点 - head.next = new Node(head, head.next, ele); - else - head = head.next; - } - } - size++; - return true; - } - - @Override - public boolean remove(T ele) { - if (!contains(ele)) - return false; - Node head = first; - Node prev = head.prev; - while (head != null) { - if ((ele == null && ele == head.data) || ele.equals(head.data)) { - prev.next = head.next; - size--; - return true; - } - prev = head; - head = head.next; - } - return false; - } - - @Override - public T remove(int index) { - checkBounds(index, false); - T removeEle = get(index); - remove(removeEle); - return removeEle; - } - - @Override - public T get(int index) { - checkBounds(index, false); - if (index > (size >> 1)) { - //索引位置大于1/2size,从后往前 - Node tail = last; - for (int i = size - 1; i >= 0; i--) { - if (i == index) - return (T) tail.data; - else - tail = tail.prev; - } - } else { - //从前往后 - Node head = first; - for (int i = 0; i < size; i++) { - if (i == index) - return (T) head.data; - else - head = head.next; - } - } - return null; - } - - @Override - public int indexOf(T ele) { - if (first == null) return -1; - Node head = first; - for (int i = 0; i < size; i++) { - if ((ele == null && ele == head.data) || ele.equals(head.data)) - return i; - head = head.next; - } - return -1; - } - - /** - * 指定位置查找元素和插入元素到指定位置IndexOutofBounds的判断标准不一样 - * - * @param index - * @param isInsert - */ - private void checkBounds(int index, boolean isInsert) { - if (isInsert && (index < 0 || index > size))//允许插入到最后一个元素之后,不能排除= - throw new IndexOutOfBoundsException("index : " + index + ", size : [ 0 - " + size + " ]"); - if (index < 0 || index >= size)//查询从0 --- size-1 - throw new IndexOutOfBoundsException("index : " + index + ", size : [ 0 - " + size + " ]"); - } - - @Override - public String toString() { - StringBuilder sb = new StringBuilder("[ "); - Node head = first; - while (head != null) { - sb.append(head.data + " "); - head = head.next; - } - return sb.append("]").toString(); - } -} diff --git a/group17/785396327/list/List.java b/group17/785396327/list/List.java deleted file mode 100644 index 706f9f29bb..0000000000 --- a/group17/785396327/list/List.java +++ /dev/null @@ -1,25 +0,0 @@ -package list; - -/** - * Created by william on 2017/2/25. - */ -public interface List { - - int size(); - - boolean isEmpty(); - - boolean contains(T ele); - - boolean add(T ele); - - boolean add(int index, T ele); - - boolean remove(T ele); - - T remove(int index); - - T get(int index); - - int indexOf(T ele); -} diff --git a/group17/785396327/queue/Queue.java b/group17/785396327/queue/Queue.java deleted file mode 100644 index 68bea83b77..0000000000 --- a/group17/785396327/queue/Queue.java +++ /dev/null @@ -1,41 +0,0 @@ -package queue; - -import java.util.NoSuchElementException; - -/** - * Created by william on 2017/2/25. - */ -public class Queue extends LinkedList { - - public boolean add(T ele) { - return add(ele); - } - - public T element() { - if (size() == 0) - throw new NoSuchElementException("队列中没有元素!"); - return get(0); - } - - public boolean offer(T ele) { - return add(ele); - } - - public T peek() { - if (size() == 0) - return null; - return get(0); - } - - public T poll() { - if (size() == 0) - return null; - return remove(0); - } - - public T remove() { - if (size() == 0) - throw new NoSuchElementException("队列中没有元素!"); - return remove(0); - } -} diff --git a/group17/785396327/stack/Stack.java b/group17/785396327/stack/Stack.java deleted file mode 100644 index c917809cc3..0000000000 --- a/group17/785396327/stack/Stack.java +++ /dev/null @@ -1,29 +0,0 @@ -package stack; - -import java.util.EmptyStackException; - -/** - * Created by william on 2017/2/25. - */ -public class Stack extends ArrayList { - - public boolean empty() { - return isEmpty(); - } - - public T peek() { - if (size() == 0) - throw new EmptyStackException(); - return (T) get(0); - } - - public T pop() { - if (size() == 0) - throw new EmptyStackException(); - return (T) remove(0); - } - - public void push(T ele) { - add(0, ele); - } -} diff --git a/group17/82427129/.gitignore b/group17/82427129/.gitignore deleted file mode 100644 index e0db6fed9c..0000000000 --- a/group17/82427129/.gitignore +++ /dev/null @@ -1,7 +0,0 @@ -/.metadata/ -/RemoteSystemsTempFiles/ - -/JavaUtil/.settings/ - -.classpath -.project diff --git a/group17/82427129/JavaUtil/.gitignore b/group17/82427129/JavaUtil/.gitignore deleted file mode 100644 index b83d22266a..0000000000 --- a/group17/82427129/JavaUtil/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/target/ diff --git a/group17/82427129/JavaUtil/pom.xml b/group17/82427129/JavaUtil/pom.xml deleted file mode 100644 index 974fb14110..0000000000 --- a/group17/82427129/JavaUtil/pom.xml +++ /dev/null @@ -1,27 +0,0 @@ - - 4.0.0 - com.coding.basic - JavaUtil - 0.0.1-SNAPSHOT - - - - org.apache.maven.plugins - maven-compiler-plugin - - 1.7 - 1.7 - - - - - - - junit - junit - 4.7 - test - - - \ No newline at end of file diff --git a/group17/82427129/JavaUtil/src/main/java/com/coding/basic/ArrayList.java b/group17/82427129/JavaUtil/src/main/java/com/coding/basic/ArrayList.java deleted file mode 100644 index 07f92770c9..0000000000 --- a/group17/82427129/JavaUtil/src/main/java/com/coding/basic/ArrayList.java +++ /dev/null @@ -1,100 +0,0 @@ -package com.coding.basic; - -import java.util.Arrays; - -public class ArrayList implements List { - - private int size = 0; - - private Object[] elementData; - - private static Object[] EMPTY_ELEMENTDATA = {}; - - private static int INITIALCAPACITY = 10; - - public ArrayList(){ - elementData = EMPTY_ELEMENTDATA; - } - - public ArrayList(int initialCapacity){ - elementData = new Object[INITIALCAPACITY]; - } - - public void add(Object o){ - ensureCapacity(size+1); - elementData[size++] = o; - } - - public void add(int index, Object o){ - rangeCheckForAdd(index); - - ensureCapacity(size+1); - System.arraycopy(elementData, index, elementData, index+1, size-index); - elementData[index] = o; - size++; - } - - public Object set(int index, Object o){ - rangeCheck(index); - - Object oldValue = elementData[index]; - elementData[index] = o; - return oldValue; - } - - public Object get(int index){ - rangeCheck(index); - return elementData[index]; - } - - public Object remove(int index){ - rangeCheck(index); - Object oldValue = elementData[index]; - int movedLength = size - index - 1; - if(movedLength > 0)//ҪɾһԪʱҪƶ飬ֻҪһԪnull - System.arraycopy(elementData, index+1, elementData, index, size-index-1); - elementData[--size] = null; - return oldValue; - } - - private void rangeCheckForAdd(int index){ - if( index > size || index<0 ){ - throw new IndexOutOfBoundsException(outofIndex(index)); - } - } - private void rangeCheck(int index){ - if( index >= size || index < 0){ - throw new IndexOutOfBoundsException(outofIndex(index)); - } - } - - public int size(){ - return size; - } - - public Iterator iterator(){ - return null; - } - - private void ensureCapacity(int minCapacity){ - if(elementData == EMPTY_ELEMENTDATA){ - minCapacity = Math.max(minCapacity, INITIALCAPACITY);//addall״ӵͱINITIALCAPACITY - } - if(minCapacity - elementData.length > 0){ - grow(minCapacity); - } - } - - private void grow(int minCapcity){ - int oldCapacity = elementData.length; - int newCapcity = oldCapacity + (oldCapacity>>1); - if(newCapcity - minCapcity < 0){ - newCapcity = minCapcity; - } - elementData = Arrays.copyOf(elementData, newCapcity); - } - - private String outofIndex(int index){ - return "Index: "+index+", Size: "+size; - } -} diff --git a/group17/82427129/JavaUtil/src/main/java/com/coding/basic/BinaryTreeNode.java b/group17/82427129/JavaUtil/src/main/java/com/coding/basic/BinaryTreeNode.java deleted file mode 100644 index d7ac820192..0000000000 --- a/group17/82427129/JavaUtil/src/main/java/com/coding/basic/BinaryTreeNode.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.coding.basic; - -public class BinaryTreeNode { - - private Object data; - private BinaryTreeNode left; - private BinaryTreeNode right; - - 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){ - return null; - } - -} diff --git a/group17/82427129/JavaUtil/src/main/java/com/coding/basic/Iterator.java b/group17/82427129/JavaUtil/src/main/java/com/coding/basic/Iterator.java deleted file mode 100644 index 06ef6311b2..0000000000 --- a/group17/82427129/JavaUtil/src/main/java/com/coding/basic/Iterator.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.coding.basic; - -public interface Iterator { - public boolean hasNext(); - public Object next(); - -} diff --git a/group17/82427129/JavaUtil/src/main/java/com/coding/basic/LinkedList.java b/group17/82427129/JavaUtil/src/main/java/com/coding/basic/LinkedList.java deleted file mode 100644 index 601c803f74..0000000000 --- a/group17/82427129/JavaUtil/src/main/java/com/coding/basic/LinkedList.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.coding.basic; - -import java.util.NoSuchElementException; - -public class LinkedList implements List { - private int size = 0; - - private Node first; - - private Node last; - - public void add(Object o){ - add(size,o); - } - public void add(int index , Object o){ - rangeCheck(index); - - if(index == size){ - linkLast(o); - }else{ - linkBefore(o, indexOf(index)); - } - } - private void linkBefore(Object o ,Node succ){ - final Node prev = succ.prev; - final Node newNode = new Node(prev, o, succ); - succ.prev = newNode; - if(prev == null){ - first = newNode; - }else{ - prev.next = newNode; - } - size++; - } - private void linkLast(Object o){ - final Node succ = last; - final Node newNode = new Node(succ, o, null); - last = newNode; - if(succ == null){ - first = newNode; - }else{ - succ.next = newNode; - } - size++; - } - private void rangeCheck(int index) { - if(index > size|| index < 0 ) - throw new IndexOutOfBoundsException("Size"+size+":index"+index); - } - private void elementIndexCheck(int index){ - if(index >=size||index < 0) - throw new IndexOutOfBoundsException("Size"+size+":index"+index); - } - /** - * ȡ±ꡱΪindexֵ, - * indexΪsizeʱnull - * @param index - * @return - */ - private Node indexOf(int index){ - if(index < (this.size>>1) ){ - Node x = first; - for (int i = 0; i < index; i++) { - x = x.next; - } - return x; - }else{ - Node x = last; - for (int i = this.size-1; i > index; i--) { - x = x.prev; - } - return x; - } - } - - public Object get(int index){ - elementIndexCheck(index); - - return indexOf(index); - } - public Object remove(int index){ - elementIndexCheck(index); - - if(index == 0){ - return removeFirst(); - }else if(index == size) { - return removeLast(); - }else{ - return unlinkNode(indexOf(index)); - } - } - - private Object unlinkNode(Node node) { - final Node next = node.next; - final Node prev = node.prev; - final Object element = node.data; - if(next == null){ - last = node; - }else{ - next.prev = node; - node.next = next; - } - if(prev == null){ - first = node; - }else{ - prev.next = node; - node.prev = prev; - } - size--; - node.data = null; - - return element; - } - public int size(){ - return size; - } - - public void addFirst(Object o){ - linkBefore(o, first); - } - - public void addLast(Object o){ - linkLast(o); - } - - public Object removeFirst(){ - if(first == null) - throw new NoSuchElementException("first is null"); - - Object oldData = first.data; - final Node next = first.next; - first.data = null; - first.next = null;//GC - first = next; - - if(next == null){ - last = null; - }else{ - next.prev = null; - } - size--; - - return oldData; - } - - public Object removeLast(){ - if(last == null) - throw new NoSuchElementException("last is null"); - - Object oldData = last.data; - final Node prev = last.prev; - last.prev = null; - last.data = null;//GC - last = prev; - - if(prev == null){ - first = null; - }else{ - prev.next = null; - } - size--; - - return oldData; - } - - public Iterator iterator(){ - return null; - } - - private static class Node{ - Object data; - Node next; - Node prev; - Node(Node prev,Object data,Node next){ - this.data = data; - this.next = next; - this.prev = prev; - } - } -} \ No newline at end of file diff --git a/group17/82427129/JavaUtil/src/main/java/com/coding/basic/List.java b/group17/82427129/JavaUtil/src/main/java/com/coding/basic/List.java deleted file mode 100644 index 10d13b5832..0000000000 --- a/group17/82427129/JavaUtil/src/main/java/com/coding/basic/List.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.coding.basic; - -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(); -} diff --git a/group17/82427129/JavaUtil/src/main/java/com/coding/basic/Queue.java b/group17/82427129/JavaUtil/src/main/java/com/coding/basic/Queue.java deleted file mode 100644 index ffed2d52c4..0000000000 --- a/group17/82427129/JavaUtil/src/main/java/com/coding/basic/Queue.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.coding.basic; - -public class Queue { - private LinkedList elementData = new LinkedList(); - - public void enQueue(Object o){ - elementData.addLast(o); - } - - public Object deQueue(){ - return elementData.removeLast(); - } - - public boolean isEmpty(){ - return size() == 0; - } - - public int size(){ - return elementData.size(); - } -} diff --git a/group17/82427129/JavaUtil/src/main/java/com/coding/basic/Stack.java b/group17/82427129/JavaUtil/src/main/java/com/coding/basic/Stack.java deleted file mode 100644 index 2d47d3eaea..0000000000 --- a/group17/82427129/JavaUtil/src/main/java/com/coding/basic/Stack.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.coding.basic; - -import java.util.EmptyStackException; - -public class Stack { - private ArrayList elementData = new ArrayList(); - - public void push(Object o){ - elementData.add(o); - } - - public Object pop(){ - int length = size(); - Object lastData = peek(); - elementData.remove(length - 1); - - return lastData; - } - - public Object peek(){ - if(size()<=0) - throw new EmptyStackException(); - - return elementData.get(size()-1); - } - public boolean isEmpty(){ - return size() == 0; - } - public int size(){ - return elementData.size(); - } -} diff --git a/group17/876385982/.classpath b/group17/876385982/.classpath deleted file mode 100644 index fb5011632c..0000000000 --- a/group17/876385982/.classpath +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/group17/876385982/.gitignore b/group17/876385982/.gitignore deleted file mode 100644 index ae3c172604..0000000000 --- a/group17/876385982/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/bin/ diff --git a/group17/876385982/.project b/group17/876385982/.project deleted file mode 100644 index 4062c6c28f..0000000000 --- a/group17/876385982/.project +++ /dev/null @@ -1,17 +0,0 @@ - - - 876385982 - - - - - - org.eclipse.jdt.core.javabuilder - - - - - - org.eclipse.jdt.core.javanature - - diff --git a/group17/876385982/src/test/Test.java b/group17/876385982/src/test/Test.java deleted file mode 100644 index b023a3ea07..0000000000 --- a/group17/876385982/src/test/Test.java +++ /dev/null @@ -1,10 +0,0 @@ -package test; - -public class Test { - - public static void main(String[] args) { - // TODO Auto-generated method stub - System.out.println("Test!"); - } - -} From a337e28cd50b7b7086196e174a7527c8629fec4b Mon Sep 17 00:00:00 2001 From: MrXingmf Date: Sun, 26 Feb 2017 21:55:25 +0800 Subject: [PATCH 210/216] homework --- .../src/com/coding/basic/MyQueue.java | 32 +++++++++++++++++ .../src/com/coding/basic/MyStack.java | 34 +++++++++++++++++++ .../homework/src/com/coding/basic/Queue.java | 18 ---------- .../homework/src/com/coding/basic/Stack.java | 22 ------------ 4 files changed, 66 insertions(+), 40 deletions(-) create mode 100644 group17/116665530/homework/src/com/coding/basic/MyQueue.java create mode 100644 group17/116665530/homework/src/com/coding/basic/MyStack.java delete mode 100644 group17/116665530/homework/src/com/coding/basic/Queue.java delete mode 100644 group17/116665530/homework/src/com/coding/basic/Stack.java diff --git a/group17/116665530/homework/src/com/coding/basic/MyQueue.java b/group17/116665530/homework/src/com/coding/basic/MyQueue.java new file mode 100644 index 0000000000..c5e79cdf4e --- /dev/null +++ b/group17/116665530/homework/src/com/coding/basic/MyQueue.java @@ -0,0 +1,32 @@ +package com.coding.basic; + +public class MyQueue { + private Object[] elementData; + private int elementCount; + private int head; + private int next; + public void enQueue(Object o){ + elementData[next] = o; + elementCount++; + next++; + } + + public Object deQueue(){ + Object obj = elementData[head]; + elementData[head] = null; + elementCount--; + head++; + return obj; + } + + public boolean isEmpty(){ + if(elementData.length==0){ + return true; + } + return false; + } + + public int size(){ + return elementData.length; + } +} diff --git a/group17/116665530/homework/src/com/coding/basic/MyStack.java b/group17/116665530/homework/src/com/coding/basic/MyStack.java new file mode 100644 index 0000000000..194a8259d3 --- /dev/null +++ b/group17/116665530/homework/src/com/coding/basic/MyStack.java @@ -0,0 +1,34 @@ +package com.coding.basic; + +public class MyStack { + Object[] elementData; + private int size; + + public void push(Object o){ + elementData[size++]=o; + } + + public Object pop(){ + if(size>0) + { + elementData[--size]=null; + } + return null; + } + + public Object peek(){ + if(elementData.length == 0){ + return null; + } + return elementData[size - 1]; + } + public boolean isEmpty(){ + if(elementData.length == 0){ + return true; + } + return false; + } + public int size(){ + return elementData.length; + } +} diff --git a/group17/116665530/homework/src/com/coding/basic/Queue.java b/group17/116665530/homework/src/com/coding/basic/Queue.java deleted file mode 100644 index 47e60d8f27..0000000000 --- a/group17/116665530/homework/src/com/coding/basic/Queue.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.coding.basic; - -public class Queue { - public void enQueue(Object o){ - } - - public Object deQueue(){ - return null; - } - - public boolean isEmpty(){ - return false; - } - - public int size(){ - return -1; - } -} diff --git a/group17/116665530/homework/src/com/coding/basic/Stack.java b/group17/116665530/homework/src/com/coding/basic/Stack.java deleted file mode 100644 index 0520714e18..0000000000 --- a/group17/116665530/homework/src/com/coding/basic/Stack.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.coding.basic; - -public class Stack { - private MyArrayList elementData = new MyArrayList(); - - public void push(Object o){ - } - - public Object pop(){ - return null; - } - - public Object peek(){ - return null; - } - public boolean isEmpty(){ - return false; - } - public int size(){ - return -1; - } -} From 6c540cbb64690a0906c9c8cd8681884a1036ccc5 Mon Sep 17 00:00:00 2001 From: onlyliuxin <14703250@qq.com> Date: Sun, 26 Feb 2017 22:12:40 +0800 Subject: [PATCH 211/216] =?UTF-8?q?2=E6=9C=8826=E6=97=A5=E4=BD=9C=E4=B8=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- liuxin/.classpath | 13 +-- .../src/com/coderising/array/ArrayUtil.java | 96 +++++++++++++++++++ .../coderising/litestruts/LoginAction.java | 39 ++++++++ .../src/com/coderising/litestruts/Struts.java | 34 +++++++ .../com/coderising/litestruts/StrutsTest.java | 43 +++++++++ .../src/com/coderising/litestruts/View.java | 23 +++++ .../src/com/coderising/litestruts/struts.xml | 11 +++ 7 files changed, 253 insertions(+), 6 deletions(-) create mode 100644 liuxin/src/com/coderising/array/ArrayUtil.java create mode 100644 liuxin/src/com/coderising/litestruts/LoginAction.java create mode 100644 liuxin/src/com/coderising/litestruts/Struts.java create mode 100644 liuxin/src/com/coderising/litestruts/StrutsTest.java create mode 100644 liuxin/src/com/coderising/litestruts/View.java create mode 100644 liuxin/src/com/coderising/litestruts/struts.xml diff --git a/liuxin/.classpath b/liuxin/.classpath index fceb4801b5..b387714202 100644 --- a/liuxin/.classpath +++ b/liuxin/.classpath @@ -1,6 +1,7 @@ - - - - - - + + + + + + + diff --git a/liuxin/src/com/coderising/array/ArrayUtil.java b/liuxin/src/com/coderising/array/ArrayUtil.java new file mode 100644 index 0000000000..78845d06d0 --- /dev/null +++ b/liuxin/src/com/coderising/array/ArrayUtil.java @@ -0,0 +1,96 @@ +package com.coderising.array; + +public class ArrayUtil { + + /** + * 给定一个整形数组a , 对该数组的值进行置换 + 例如: a = [7, 9 , 30, 3] , 置换后为 [3, 30, 9,7] + 如果 a = [7, 9, 30, 3, 4] , 置换后为 [4,3, 30 , 9,7] + * @param origin + * @return + */ + public void reverseArray(int[] origin){ + + } + + /** + * 现在有如下的一个数组: int oldArr[]={1,3,4,5,0,0,6,6,0,5,4,7,6,7,0,5} + * 要求将以上数组中值为0的项去掉,将不为0的值存入一个新的数组,生成的新数组为: + * {1,3,4,5,6,6,5,4,7,6,7,5} + * @param oldArray + * @return + */ + + public int[] removeZero(int[] oldArray){ + return null; + } + + /** + * 给定两个已经排序好的整形数组, a1和a2 , 创建一个新的数组a3, 使得a3 包含a1和a2 的所有元素, 并且仍然是有序的 + * 例如 a1 = [3, 5, 7,8] a2 = [4, 5, 6,7] 则 a3 为[3,4,5,6,7,8] , 注意: 已经消除了重复 + * @param array1 + * @param array2 + * @return + */ + + public int[] merge(int[] array1, int[] array2){ + return null; + } + /** + * 把一个已经存满数据的数组 oldArray的容量进行扩展, 扩展后的新数据大小为oldArray.length + size + * 注意,老数组的元素在新数组中需要保持 + * 例如 oldArray = [2,3,6] , size = 3,则返回的新数组为 + * [2,3,6,0,0,0] + * @param oldArray + * @param size + * @return + */ + public int[] grow(int [] oldArray, int size){ + return null; + } + + /** + * 斐波那契数列为:1,1,2,3,5,8,13,21...... ,给定一个最大值, 返回小于该值的数列 + * 例如, max = 15 , 则返回的数组应该为 [1,1,2,3,5,8,13] + * max = 1, 则返回空数组 [] + * @param max + * @return + */ + public int[] fibonacci(int max){ + return null; + } + + /** + * 返回小于给定最大值max的所有素数数组 + * 例如max = 23, 返回的数组为[2,3,5,7,11,13,17,19] + * @param max + * @return + */ + public int[] getPrimes(int max){ + return null; + } + + /** + * 所谓“完数”, 是指这个数恰好等于它的因子之和,例如6=1+2+3 + * 给定一个最大值max, 返回一个数组, 数组中是小于max 的所有完数 + * @param max + * @return + */ + public int[] getPerfectNumbers(int max){ + return null; + } + + /** + * 用seperator 把数组 array给连接起来 + * 例如array= [3,8,9], seperator = "-" + * 则返回值为"3-8-9" + * @param array + * @param s + * @return + */ + public String join(int[] array, String seperator){ + return null; + } + + +} diff --git a/liuxin/src/com/coderising/litestruts/LoginAction.java b/liuxin/src/com/coderising/litestruts/LoginAction.java new file mode 100644 index 0000000000..1005f35a29 --- /dev/null +++ b/liuxin/src/com/coderising/litestruts/LoginAction.java @@ -0,0 +1,39 @@ +package com.coderising.litestruts; + +/** + * 这是一个用来展示登录的业务类, 其中的用户名和密码都是硬编码的。 + * @author liuxin + * + */ +public class LoginAction{ + private String name ; + private String password; + private String message; + + public String getName() { + return name; + } + + public String getPassword() { + return password; + } + + public String execute(){ + if("test".equals(name) && "1234".equals(password)){ + this.message = "login successful"; + return "success"; + } + this.message = "login failed,please check your user/pwd"; + return "fail"; + } + + public void setName(String name){ + this.name = name; + } + public void setPassword(String password){ + this.password = password; + } + public String getMessage(){ + return this.message; + } +} diff --git a/liuxin/src/com/coderising/litestruts/Struts.java b/liuxin/src/com/coderising/litestruts/Struts.java new file mode 100644 index 0000000000..44cc35bf01 --- /dev/null +++ b/liuxin/src/com/coderising/litestruts/Struts.java @@ -0,0 +1,34 @@ +package com.coderising.litestruts; + +import java.util.Map; + + + +public class Struts { + + public static View runAction(String actionName, Map parameters) { + + /* + + 0. 读取配置文件struts.xml + + 1. 根据actionName找到相对应的class , 例如LoginAction, 通过反射实例化(创建对象) + 据parameters中的数据,调用对象的setter方法, 例如parameters中的数据是 + ("name"="test" , "password"="1234") , + 那就应该调用 setName和setPassword方法 + + 2. 通过反射调用对象的exectue 方法, 并获得返回值,例如"success" + + 3. 通过反射找到对象的所有getter方法(例如 getMessage), + 通过反射来调用, 把值和属性形成一个HashMap , 例如 {"message": "登录成功"} , + 放到View对象的parameters + + 4. 根据struts.xml中的 配置,以及execute的返回值, 确定哪一个jsp, + 放到View对象的jsp字段中。 + + */ + + return null; + } + +} diff --git a/liuxin/src/com/coderising/litestruts/StrutsTest.java b/liuxin/src/com/coderising/litestruts/StrutsTest.java new file mode 100644 index 0000000000..a44c1878ac --- /dev/null +++ b/liuxin/src/com/coderising/litestruts/StrutsTest.java @@ -0,0 +1,43 @@ +package com.coderising.litestruts; + +import java.util.HashMap; +import java.util.Map; + +import org.junit.Assert; +import org.junit.Test; + + + + + +public class StrutsTest { + + @Test + public void testLoginActionSuccess() { + + String actionName = "login"; + + Map params = new HashMap(); + params.put("name","test"); + params.put("password","1234"); + + + View view = Struts.runAction(actionName,params); + + Assert.assertEquals("/jsp/homepage.jsp", view.getJsp()); + Assert.assertEquals("login successful", view.getParameters().get("message")); + } + + @Test + public void testLoginActionFailed() { + String actionName = "login"; + Map params = new HashMap(); + params.put("name","test"); + params.put("password","123456"); //密码和预设的不一致 + + View view = Struts.runAction(actionName,params); + + Assert.assertEquals("/jsp/showLogin.jsp", view.getJsp()); + Assert.assertEquals("login failed,please check your user/pwd", view.getParameters().get("message")); + } +} diff --git a/liuxin/src/com/coderising/litestruts/View.java b/liuxin/src/com/coderising/litestruts/View.java new file mode 100644 index 0000000000..0194c681f6 --- /dev/null +++ b/liuxin/src/com/coderising/litestruts/View.java @@ -0,0 +1,23 @@ +package com.coderising.litestruts; + +import java.util.Map; + +public class View { + private String jsp; + private Map parameters; + + public String getJsp() { + return jsp; + } + public View setJsp(String jsp) { + this.jsp = jsp; + return this; + } + public Map getParameters() { + return parameters; + } + public View setParameters(Map parameters) { + this.parameters = parameters; + return this; + } +} diff --git a/liuxin/src/com/coderising/litestruts/struts.xml b/liuxin/src/com/coderising/litestruts/struts.xml new file mode 100644 index 0000000000..99063bcb0c --- /dev/null +++ b/liuxin/src/com/coderising/litestruts/struts.xml @@ -0,0 +1,11 @@ + + + + /jsp/homepage.jsp + /jsp/showLogin.jsp + + + /jsp/welcome.jsp + /jsp/error.jsp + + \ No newline at end of file From 010e684c4c4c4045edb71297220b50bcb9dea8eb Mon Sep 17 00:00:00 2001 From: 240094626 Date: Sun, 26 Feb 2017 22:14:27 +0800 Subject: [PATCH 212/216] 'article' --- ...351\227\264\347\232\204\345\205\263\347\263\273_20170226.md" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/group17/article/\345\206\231\344\270\200\347\257\207\346\226\207\347\253\240\344\273\213\347\273\215cpu, \345\206\205\345\255\230, \347\243\201\347\233\230, \346\214\207\344\273\244\344\273\245\345\217\212\344\273\226\344\273\254\344\271\213\351\227\264\347\232\204\345\205\263\347\263\273_20170226.md" "b/group17/article/\345\206\231\344\270\200\347\257\207\346\226\207\347\253\240\344\273\213\347\273\215cpu, \345\206\205\345\255\230, \347\243\201\347\233\230, \346\214\207\344\273\244\344\273\245\345\217\212\344\273\226\344\273\254\344\271\213\351\227\264\347\232\204\345\205\263\347\263\273_20170226.md" index 0cec6481d5..b3e07da87a 100644 --- "a/group17/article/\345\206\231\344\270\200\347\257\207\346\226\207\347\253\240\344\273\213\347\273\215cpu, \345\206\205\345\255\230, \347\243\201\347\233\230, \346\214\207\344\273\244\344\273\245\345\217\212\344\273\226\344\273\254\344\271\213\351\227\264\347\232\204\345\205\263\347\263\273_20170226.md" +++ "b/group17/article/\345\206\231\344\270\200\347\257\207\346\226\207\347\253\240\344\273\213\347\273\215cpu, \345\206\205\345\255\230, \347\243\201\347\233\230, \346\214\207\344\273\244\344\273\245\345\217\212\344\273\226\344\273\254\344\271\213\351\227\264\347\232\204\345\205\263\347\263\273_20170226.md" @@ -20,7 +20,7 @@ 1059107701 -240094626 +240094626 http://note.youdao.com/noteshare?id=d129c169ed611f6099b96e8e0f3f5c51 82427129 http://blog.csdn.net/walk_er/article/details/57406278 From d53e01405e82666570666d5edc01f7cfe66cf75c Mon Sep 17 00:00:00 2001 From: luoziyihao Date: Sun, 26 Feb 2017 23:56:53 +0800 Subject: [PATCH 213/216] resolve article conflics --- ...2\204\345\205\263\347\263\273_20170226.md" | 63 +------------------ 1 file changed, 2 insertions(+), 61 deletions(-) diff --git "a/group17/article/\345\206\231\344\270\200\347\257\207\346\226\207\347\253\240\344\273\213\347\273\215cpu, \345\206\205\345\255\230, \347\243\201\347\233\230, \346\214\207\344\273\244\344\273\245\345\217\212\344\273\226\344\273\254\344\271\213\351\227\264\347\232\204\345\205\263\347\263\273_20170226.md" "b/group17/article/\345\206\231\344\270\200\347\257\207\346\226\207\347\253\240\344\273\213\347\273\215cpu, \345\206\205\345\255\230, \347\243\201\347\233\230, \346\214\207\344\273\244\344\273\245\345\217\212\344\273\226\344\273\254\344\271\213\351\227\264\347\232\204\345\205\263\347\263\273_20170226.md" index d1db5b8684..506628c5af 100644 --- "a/group17/article/\345\206\231\344\270\200\347\257\207\346\226\207\347\253\240\344\273\213\347\273\215cpu, \345\206\205\345\255\230, \347\243\201\347\233\230, \346\214\207\344\273\244\344\273\245\345\217\212\344\273\226\344\273\254\344\271\213\351\227\264\347\232\204\345\205\263\347\263\273_20170226.md" +++ "b/group17/article/\345\206\231\344\270\200\347\257\207\346\226\207\347\253\240\344\273\213\347\273\215cpu, \345\206\205\345\255\230, \347\243\201\347\233\230, \346\214\207\344\273\244\344\273\245\345\217\212\344\273\226\344\273\254\344\271\213\351\227\264\347\232\204\345\205\263\347\263\273_20170226.md" @@ -1,61 +1,3 @@ -<<<<<<< HEAD -# 写一篇文章介绍cpu, 内存, 磁盘, 指令以及他们之间的关系 - -## 须知 ---- - -交作业时请在QQ 号后面填上各自的文章链接, 比如: - -51075907 http://m.blog.csdn.net/article/details?id=57083764 - -## 文章 ---- - -1204187480 - -102228177 http://note.youdao.com/noteshare?id=74a51e7f93461dfb77c69a1cf4755624&sub=004F10FA5D2046ABAA060F19C0D2A18F - -876385982 http://www.totoro-fly.com/?p=59 - -785396327 - -1059107701 - -240094626 - -82427129 http://blog.csdn.net/walk_er/article/details/57406278 - -296910598 - -1264835468 http://www.jianshu.com/p/191d731ec00a - -516886559 - -1282579502 - -614982500 - -865797761 - -1540186032 http://blog.csdn.net/mpx_xb/article/details/56679603 - -176653813 - -116665530 - -51075907 http://m.blog.csdn.net/article/details?id=57083764 - -1158154002 - -345450234 - -919764878 - -1368331120 - -517970312 - -======= # 写一篇文章介绍cpu, 内存, 磁盘, 指令以及他们之间的关系 ## 须知 @@ -78,13 +20,13 @@ 1059107701 -240094626 http://note.youdao.com/noteshare?id=d129c169ed611f6099b96e8e0f3f5c51 +240094626 82427129 http://blog.csdn.net/walk_er/article/details/57406278 296910598 -1264835468 +1264835468 http://www.jianshu.com/p/191d731ec00a 516886559 @@ -112,4 +54,3 @@ 517970312 ->>>>>>> 010e684c4c4c4045edb71297220b50bcb9dea8eb From 9f1545db5ffdfa9a95512c687260b2132053638e Mon Sep 17 00:00:00 2001 From: earliest Date: Sun, 26 Feb 2017 13:08:21 -0800 Subject: [PATCH 214/216] test checkin --- ...351\227\264\347\232\204\345\205\263\347\263\273_20170226.md" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/group17/article/\345\206\231\344\270\200\347\257\207\346\226\207\347\253\240\344\273\213\347\273\215cpu, \345\206\205\345\255\230, \347\243\201\347\233\230, \346\214\207\344\273\244\344\273\245\345\217\212\344\273\226\344\273\254\344\271\213\351\227\264\347\232\204\345\205\263\347\263\273_20170226.md" "b/group17/article/\345\206\231\344\270\200\347\257\207\346\226\207\347\253\240\344\273\213\347\273\215cpu, \345\206\205\345\255\230, \347\243\201\347\233\230, \346\214\207\344\273\244\344\273\245\345\217\212\344\273\226\344\273\254\344\271\213\351\227\264\347\232\204\345\205\263\347\263\273_20170226.md" index e4a02969a7..bee1e801a8 100644 --- "a/group17/article/\345\206\231\344\270\200\347\257\207\346\226\207\347\253\240\344\273\213\347\273\215cpu, \345\206\205\345\255\230, \347\243\201\347\233\230, \346\214\207\344\273\244\344\273\245\345\217\212\344\273\226\344\273\254\344\271\213\351\227\264\347\232\204\345\205\263\347\263\273_20170226.md" +++ "b/group17/article/\345\206\231\344\270\200\347\257\207\346\226\207\347\253\240\344\273\213\347\273\215cpu, \345\206\205\345\255\230, \347\243\201\347\233\230, \346\214\207\344\273\244\344\273\245\345\217\212\344\273\226\344\273\254\344\271\213\351\227\264\347\232\204\345\205\263\347\263\273_20170226.md" @@ -30,7 +30,7 @@ 516886559 -1282579502 https://www.evernote.com/shard/s413/sh/3af5f6a4-a580-4a49-b63c-90f5b178aca4/7cf052e3789c862e38d6d6b3cce1ceed +1282579502 #https://www.evernote.com/shard/s413/sh/3af5f6a4-a580-4a49-b63c-90f5b178aca4/7cf052e3789c862e38d6d6b3cce1ceed 614982500 From 135f98b29f73dca6ce9e8b49e1ab7c79db16b564 Mon Sep 17 00:00:00 2001 From: earliest Date: Sun, 26 Feb 2017 13:12:40 -0800 Subject: [PATCH 215/216] modified article link --- ...351\227\264\347\232\204\345\205\263\347\263\273_20170226.md" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/group17/article/\345\206\231\344\270\200\347\257\207\346\226\207\347\253\240\344\273\213\347\273\215cpu, \345\206\205\345\255\230, \347\243\201\347\233\230, \346\214\207\344\273\244\344\273\245\345\217\212\344\273\226\344\273\254\344\271\213\351\227\264\347\232\204\345\205\263\347\263\273_20170226.md" "b/group17/article/\345\206\231\344\270\200\347\257\207\346\226\207\347\253\240\344\273\213\347\273\215cpu, \345\206\205\345\255\230, \347\243\201\347\233\230, \346\214\207\344\273\244\344\273\245\345\217\212\344\273\226\344\273\254\344\271\213\351\227\264\347\232\204\345\205\263\347\263\273_20170226.md" index bee1e801a8..e4a02969a7 100644 --- "a/group17/article/\345\206\231\344\270\200\347\257\207\346\226\207\347\253\240\344\273\213\347\273\215cpu, \345\206\205\345\255\230, \347\243\201\347\233\230, \346\214\207\344\273\244\344\273\245\345\217\212\344\273\226\344\273\254\344\271\213\351\227\264\347\232\204\345\205\263\347\263\273_20170226.md" +++ "b/group17/article/\345\206\231\344\270\200\347\257\207\346\226\207\347\253\240\344\273\213\347\273\215cpu, \345\206\205\345\255\230, \347\243\201\347\233\230, \346\214\207\344\273\244\344\273\245\345\217\212\344\273\226\344\273\254\344\271\213\351\227\264\347\232\204\345\205\263\347\263\273_20170226.md" @@ -30,7 +30,7 @@ 516886559 -1282579502 #https://www.evernote.com/shard/s413/sh/3af5f6a4-a580-4a49-b63c-90f5b178aca4/7cf052e3789c862e38d6d6b3cce1ceed +1282579502 https://www.evernote.com/shard/s413/sh/3af5f6a4-a580-4a49-b63c-90f5b178aca4/7cf052e3789c862e38d6d6b3cce1ceed 614982500 From d3abcb2a7900cf87f6d616a8e6aae22658be1779 Mon Sep 17 00:00:00 2001 From: earliest Date: Sun, 26 Feb 2017 13:33:18 -0800 Subject: [PATCH 216/216] fix article link --- group17/1282579502/.classpath | 1 + ...351\227\264\347\232\204\345\205\263\347\263\273_20170226.md" | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/group17/1282579502/.classpath b/group17/1282579502/.classpath index fb5011632c..3e0fb272a8 100644 --- a/group17/1282579502/.classpath +++ b/group17/1282579502/.classpath @@ -2,5 +2,6 @@ + diff --git "a/group17/article/\345\206\231\344\270\200\347\257\207\346\226\207\347\253\240\344\273\213\347\273\215cpu, \345\206\205\345\255\230, \347\243\201\347\233\230, \346\214\207\344\273\244\344\273\245\345\217\212\344\273\226\344\273\254\344\271\213\351\227\264\347\232\204\345\205\263\347\263\273_20170226.md" "b/group17/article/\345\206\231\344\270\200\347\257\207\346\226\207\347\253\240\344\273\213\347\273\215cpu, \345\206\205\345\255\230, \347\243\201\347\233\230, \346\214\207\344\273\244\344\273\245\345\217\212\344\273\226\344\273\254\344\271\213\351\227\264\347\232\204\345\205\263\347\263\273_20170226.md" index e4a02969a7..2c2f93b818 100644 --- "a/group17/article/\345\206\231\344\270\200\347\257\207\346\226\207\347\253\240\344\273\213\347\273\215cpu, \345\206\205\345\255\230, \347\243\201\347\233\230, \346\214\207\344\273\244\344\273\245\345\217\212\344\273\226\344\273\254\344\271\213\351\227\264\347\232\204\345\205\263\347\263\273_20170226.md" +++ "b/group17/article/\345\206\231\344\270\200\347\257\207\346\226\207\347\253\240\344\273\213\347\273\215cpu, \345\206\205\345\255\230, \347\243\201\347\233\230, \346\214\207\344\273\244\344\273\245\345\217\212\344\273\226\344\273\254\344\271\213\351\227\264\347\232\204\345\205\263\347\263\273_20170226.md" @@ -30,7 +30,7 @@ 516886559 -1282579502 https://www.evernote.com/shard/s413/sh/3af5f6a4-a580-4a49-b63c-90f5b178aca4/7cf052e3789c862e38d6d6b3cce1ceed +1282579502 https://www.evernote.com/shard/s413/sh/3af5f6a4-a580-4a49-b63c-90f5b178aca4/7cf052e3789c862e38d6d6b3cce1ceed 614982500

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⁡H5h zHdWiY;hM&C=~JzF&PaZt>9G+5w#&9RnHo{snDct!sS8$<%5`g> zx$3IX{EnYuiY%acpEgXXN~(GV3c*)Qf~Q7cG;;IAc7cjvtiS}fH+g!n92L=vUABP; z*Y!h8^_Y%l`pf0(MyTf&XwBtTS{OX9Jw~w}+=wrvXKlHV1&TQ8i zayeq!o}-?mlsvkIQKQmi9~2~7gH{Vz;BX;a5JUvc?kGdxUzcoAb3LLR}qZJvj*- z;^Uus>PKguG;YTCDDUAH<8>C?grEw^XbNUxBNl+1kFyIR^%v?oF`KZ|vuuYPM%{t> zJ$jaHBiKNzZX{jt$ZUFEnd^iLHBfI&3p-?#=%q79`w(xXzO4NRG;M=7!hc4yNdR98 zCB5YNuv41|k%-N#@iMwM(usxPoUC@y4)`r}qF?7nZF^EtlPjrZkS+ZEFY`mA7~Oh2 zihESh0&=`Eks2i`2v6_W#-OC?W!Ed~$YYRgnOn2%m4Df-VV*73{+%*;KnazE978mp^M1PGs0PGdf!OMus)#--#_=f2vPPQoLDn z-a6x2d&akk^?vTX1;G{qcYmBBeK73>&jMHBUDlKoZXPYP541&%S?r}(YH)8eT zJ=#;#rG4$)Rb+x%Jqd+FHUfPUV0bt_Lcn<{(C8pa4(WxIfn+AyYSrKQPKnznNGd@s zmc1z>XOmhTjlLIu?EabQxF}}a_I-?c$7lM{jpXjL-y7RLp6?uAz@&|XAol%kJ@lBz zW%g#^CxLSw)eltE)SLSGYgIiWJTMG1v3kJZE1$|~dT(|GiWV?_-4#m0hN6xPJ4kUg z3Y@##3%(9totO4nlYN?N=Q_Hjwd}|N5vxsByH1YAecq{em6UwR7u87$_m_+U3B`L0 z{IM&e;H#zJI5xOB3)!nj3bf^PCU|j#^L<=-$Fw#SN~;3=%arvcy0h+MSuTO#E(#k zZAXegx1MDf%S0%7IRqKDDi*6RnQmRV7)eEoyy&j3NW>;5=Y}8uq!%eKd*OtN{@}$E zD!eFQq@93tkUUurK(oUi$A5rTXfXA4a$b1Zp&)=CRvg0&6bV^TedrD zP6=cMkMYgkU~jU3;<(<}zB63Ic%)au>A5VW2bZGuv%bV=wKW7DxWNs`n<O2Y17-F|H55wZ0*ElXqhAzlEHkH3s=H zLZR%>Ad|55hJq*VW!4SnJ35H;72j!BxAzbB1h6b#Cf~Lj`J6m$;Y9y&wrl*)*eOyJ z2un$mu?CGuutXmtcH@o@@s2aL4;bDT>otn!#`pK#VfvR9wn$|BwVt2swbosk zalfxU&plCezd6?~I?KE;yGRYA!bVO}c~bC66w{WGY0I!+?t3%)TSyka52oZfuF{j8 z+Pv;VdO5qUhfwSD&vdj2Z~tHx_{t3%W8G(eu7B0^xM|q&M5bA_;hl1Gz zGpG&CeSl59Fj&DQN_q+mLv3`&t*P6v8cq=otigy}ucPy+3STleUFCSn+yPQ-^fmLxY^|E|ZN13LZGfvj+$ZX{WCv&}#6DWhz505hC zN6%}0z5V*4%hPFE8R#&i{W&rI@eutd!|(o4b7#B!5od74U?U>}u^cw}Jwg$XGAn>R zNGV1jD;gTA{)=>>XDXqfB6g#=DgW^(Eqex&p?b%!-0{~oNA3s5UmL)g8AQ2;g#JQ; zajYGZ5eQf>vb1q0?jlJbJ+Vpiz?G!4gEtb!X@`X_TZ@0IDKr1}>u!#83K_1OSKjk; zw~k5>W&oCjDs@~On<9dM_89=N=<<%of&j&pUDg^9v`cz%MRxGuXh`;w`6lV@nQs#r zS9jp5X%yPpB&8X-3AYh4V|7eMw74F+4Jav6vj&JgJ;fGR7JouJw>*Y1?j?jSKDebu zRHr;fLPv?5o#2yKz#w$MpaZsXdc>m^5K0&le=n&STKswfBu!PiiATuj>#Py2gDu+M zUY~KGbYHJ%vMYZ;vL_vH^|Lv7hw`U;P|t4ucT)y8{trHv{P$zqC?v^E;PSO1#RP|- zAW3E1cCZiK!VeQ*2pO*-!@Hhfu8K#?>Hc!pi-(rfDiYDge-8|Oj#1TNd@^}D6}CTiz9{&iIRfBCN#JS0Z&c7*$YKnD%3JB z)0X)PW4y)xN#9M-1)H^BDsN}qACG_r#{;^^R^i-%2pX+0nmZ?G=$u3P<(xK|_MDe! z#r+MB6g;m*WsNhm(0`9l96}#+yE-#Vh42&nYgHToJ!%0t*aSGJxP;a4iIL9VLfhfL zh47l1$Ij|#r*{`PJnv^zB7kc=^oF3_Sz~bnU~ExgrC-waz>9H+ZV<%<-u+P(#AF*f zKc`2jC6LvhnkNRdzIq(Cu@QV=DF2VYDCbz-jSpGMZ!(fxNcDgJ83FuX-U1klPg!rl zFu#LRZ|ZL$$}WCxaMG%CCPn36heAd$!GJwQ0}Xnm77qY82hEQT{=Ki7?}oI}4l!7)sgl{-9Y zzNf6U6yTo^-2ml-%CQfNxw`9##l}TBV&?gM;BI z&AXC^meufJ7kXbx`0+&YYpP%d#<#9m=YMF_t*MRz94Q6KeSREuXk}QE%E{)KlO;#aOXR(=wI10oLttKcfp7_RzwSJ zqNCxS$bkjAwY}-{JI7j6m)y&UqU2@U8RxqYfz!pFb#jk*4>-VjQ9;^0sjUhree)`4 z7t0aB=Dnh?^tKz=!Fsz9V3NYW73Z1rU-A4H4g`wG z)4_D@8qNqt*otU7F1&;`M_!wFw9U**rOjwGA_cuHHDBg~m>gryeBE$$S=Uu+WKY6s z!u-h4vC*Teg&TEe^BR*`+mNLmP3=G|UoRw(sl|x3um(+?yyJ6%d;@4vk)0IkL|vz1 z5Th}d@D($u8G7eB8xh}9@U`Be$c&gjQt$h-P|)*3iz`LYT~L*JFP}@6t>!1zTjd@= zN>DtPm7vQ{c~9r>ji3z{n5FZQhly7|**0A7qGLvkn}Tz#Nus!rUiaTZDPCn*!bPpc zwi2cim6BpwWH~j}-~QlG%9ok$`;MP`@cnMmtkuuX9_<7%^n}pramBxqS_j+ib1)oz z`Ex0EB)xkNt_tUc$mM$l`BYu=emzTjqEMNJt;?>dNVpmGeyJq45N778Tax$Y{K3i5 z`-wN_4`df*rg3HXgchKMwkRhI@eT+7zxXF-^D+7J1_A$K#~nugIwiUY_HI9-Adkk! z|M;_WDrx|MzzKd7VafNmP=6f?aFM=5yoa4e#|RGbQPW^edijz5ZCcm=f))NzX@A`J zNm7LjI~*LdyBo4J&aY>V(4~=U0G7=knD5X_m#csnzW(VHYuGO>7J5e z3LCA+irtM;fZvwCN#VCphx`&yVD5e%b*O$b=3xA9p$o*wDx{k+k`7loZyzi6s2j$KvQfRnt<_6#j3d|oem+Ls=`?6efZjZDl6`I zGSSb8Q~^W^;w?y#CHw}jAa{deMvQ(HtLh2w;GI&h(D{wZgTdCfAO1j4kEn(Q4lB5) zFx^C1A|t?EiGH~NSiUa>YU4c3B>Lsgcok0Mi1)Gk{r6BGX@P{>s3$%)FY`MiK z?w&a|==j@6H>Fpwe(5!6N>PF8!W;Q--p@-gNYJ6FwjX8 zq%MEFj;%bisFq61GBp_bQhO)9R}U5U*Zou^-4frA(3GOYQ_v6UjTMjIDrfn`pl`gE zWW8BC^TSTmyE8oz{&nPR<~U}Dpc^G)Vs1jhRz>-E120UI_GxiQNV6J}P>rpTPXUL>qMgxp0_(O3(v^vJB4ZmcZlM}fhNO&{r~Xwps-O%Rn2Dr-{q5yWo% z4Qqc0swZ3FoM)_#3=N=6MAtDrg+*LY^0R~Kp>JW$w<@`NUIaZox_sG%QNZ+LjbA{h z<2Lp+9>NBwL<}^-P*V5hOy2duc~u&)7NwS%!2--fWH~BqmlbQ7(=f2yD}!)NjlJJ# zY_+H)>KIsKSqR&b$>r)~e-Ef~C7d56m_(tv1*wLxc zeL>WJa+wyv!9x{+@JCDfP&sOst4=3z8@6P)d|_%ne~@|UEOJyw@`B}b4QdCzLs_a1 zQ59Iuq=y}~ni31n~0*%v-5?ScJEzlj@ ziyEI*-dACe-jL(Z5KoSt*RcP9g{Jndk<$dGb1+5Z4R2915USmph?Z+KO=Wm5^Hc=N zEXio43dP7J^)u?;M(Y;R9ZKoKNAp@tPC71ceBk9Uu=S#iQ;tOw$i~WRkx}(GCz0{A za|%0H>hA!MkJos-XVA$+KM*H%wY9f)sWj8RI6;A@8M(v;ZcM`n+sY4>v z@v9aUj25^`cV9Hf2vG<>egap+#=+Yy)3HJ-PUS+8^E?{3iV!;)Ip zB|~|}#ZX!6`rkpwh-IGw%xkR%B_4$%J}(s9Z&6o zsuYWdIKz8e1Rvl2?anNFImJE0mS9+Z)_wX|)c@Y~cY9)NsJ8H?+W2L6_en|rQdCei90H!k=C{-Q30LB1=ZtBFlS^hxLewYMSauNmFFG|4-WW0%k zkBP-HqK@9muZHgi$Cqy*6_xy&{QGMi)|RQmtS;$yQC{Wy;0cf z!Z765wjL{y03}`Q&Lw^8Panv6dL=Kzsx{ucxq0#K3*R-l7V_}gB?@~JQiP78< z?Yfg(a-S>Y`x5K3=SGLeE|SXU7(wNa3$F2JnQmH%Y{zz(f}r0)paywx^=B&skrMh_ zrh8YZkwM=?Ts1nM?#fa+GRhS6rFv@K`0&WqZtUQ$0Hc5m?tXm7_?}Ako}nO%u#)-{ zF`8aOz50TxqNB0lPA*>>>mM9_DjoQCV_7!fqMqQ{2@7`FF0O!A5d?}-Bi-ep}24irhN z$f;=2%*<>ry>J95~Ok%@%b3;2LH9c>k--v2myqg&2ng( zBs%w8kw18sWL?G4%T*x6yM;F3Vq$-GS+_fu#wwDf(N$~r3{1b*3bTZFZTPVXSxQ`d zMeq(@-t>`~9)FY21U)B_xEsz6Zyr0Zd_TA{;{c@J}WEJ zTcTjWODplKt4|2;3>WKgjOF+1YBNvBFJan4;T4@+D|^!xGyg}tR~z;DnF3R+*5_)V zKfj6%Wy(BO&zy>}_VyWmI9q%quYyLdJu8X#I*u?D^rFN?d2W>9U-h2!5xg2`4A-Rd zG-GdB>3!tY4ak2)IA##f|3og%u!ovTQc)rVuLl3gDsC+@o=G1%^h`LjF{rp=UYNhE zpD~^WXG*gR=$0K!DVFR4cjE*f6J5WB`sRvee5tKR1%{ba=w5oEv3mNU-jXU{#@)e4 zxQ%!D=0J@LEwjBgzA1gH4Qe^N4_)~s$FYT7&CH4Yp+!fAinA#v*;n{Qxjp`5n#UwO z!j5}_b%m04gRLDNF|&RBxs?2r3){a;*q3Yd=#1FtrFBE5QVwq`zs$sjMFGvyCN3X& zkxeBgx>`81J0f5=$CK%hL}ysKWpql)(izz~jBmo)$BWUNWl7v6D2%IdWfrl4|MF){ zhzkJ7?r{!CU`wB<{Nb(rSL_x#(Xq^C;`+W5sB(*EV)Hv6no3_`Q5N}JPe|n~n-pHr z2L?SHH?obo@1#I=>A}domTjhPdiS=qvQKC5+Yza&%Z~*HU>fUjMuQw(j%lU3vxWRg z8+Vi~F>I1)eA%zr1$E%p9e?5Oji>GR+&ONHMlo!gLy1qaF@0y|(ywK_Ob zS3QoQg%i2rFYj)wx>Lub4(Jeqp6{?^l-F+uJ72^^g<~iW!^&ZhAN85D^Pgn5v@44b zyzL!1N=(FNJl1|g!PDkV?oWnqy0BRi#1k9*2iPh&e`wpa9)zxE&*uK}L5xmIYd|4& zn7j*DbXNpV^^g0|vF+?m&534WbfYp>t3%qd;YhkioN zXWy9@?|*d|O_WOl;kXoJ*c!(@%TwsfT5hX7y%8x31#Jjpi=@hb)HK?Ds^=c(hyUGe z9-+De;p9(?oMXP#=l!uu!Tv{_9OU!TzU-9I`MMCc8=2?lww0Y40er}|C)ia_RyPlr z7&EMI)>Nbg7x_CVUGDzwYOC4w_(O4*h2SLUa{}}Ymmw|=7Ned;|UyB;f z5m;hcsOvuod_^^HXku!pX*oQ--VFxSuEb`+#-W0Tu4*Y|ubqd_cfZqAmFm(weyZtV z(_c@`v8BaYOChK4vd)ga0(C*?Vir;fZ|c<{7-bTm=#wntjt&8Oyckey0w_Fl3~*Ok zEOwO4r~5=?3wo5na*4ZzWqNCC`*-fXmF0Ow(_)Y3agV_3GM7)PKHth?{ZW~N9a#<< zYN5y?Lk@B2@h~iu&*g*R&#Fhb7#j-%= z&DRjMmBOOJ%0)vlh#mO;EZM%e{&n2DPMzcu+6ft$eGmE5mXhMDrR52_E-?Y#i3Mkn zscR(GMO&IR17F3O>d2BCx=(#lnI$r)Z>3M%9;eK;uN>5SHqIF8tno9^-fh1pP}jAk zeBTGn`F?(VO^wglmo~+zKTGf*K+X`y{w;)L<0~*c;R@jTIsjhs?kT~9@<0AUYii64 zphUn(dD7PvOQ@KRR+6Su+b}Xbi$0!o0ri_A7g_4IaCnYA#!q+ZNth0GWgNV@S!_3> z@fK)}GErR6=wV2#u643c`gXtwN z^h3_m#*Z!e4C-!4zkEUYr2HWjiKe#~EU!)~{8|IM1!6BG)4}T!2Gb*_UxzvQsrf1N z@B1(TH!B8hhKcx&4hJX=G6a3l~stKaasbZ&^-~91g4*fL}59mRHUg z3HEI+)VEJgxEB53CgcNVpl)7j^s{)q;=(~`Q0u+1_3a&1siXX1%TfEMn zE?{iG$6|?bdq>BtQxZnPt|o;!=dfJp<};57bTxi9uyA<0^)63YM7>E5vEx|4u6OHw z7dctrRQB9rlenPv!pXGv?(JGs&`vC5BE3kFLzIe?qWkHjmSyoSzZ{%?U!cg9Yj*Cn z12@lQraHzNoRJramr)W=Pikc>aN3}}BHpp`GzR}!qvS+ny{+DjFt+kLvF-flZxE|- zX+mRvF|2f9C(uXj!oo=m)JTk-O(4p!QJVks{+wU_96`TfA|}g#F};w}mirAqudLu3 zj?TcP512p?JZS zv0rgF`Pq%zM++humGze*%v=<44dZDyZ*voOC2F^+C&Y$dKBG|)3^ z1;1PzyzFm&ioWPU^)gK<&O+kx!-Q9{>=kA7j3SC?gj#IjnnN9&U`U!?hl#00wiUe$ zc`<9`{W+l0S)y^i>%mRaPRae_VpF!|Z!Rt;TsbWD&V;uua>~>bd0GD^|$GYh0Dv2F$=I@^&+Z=Y^%jmA2aAwyB-L?`o?L z99_)OGiTXzlA#w4D^rdgzf3mdx+-d~Q>g1WQ1Aefk)M<;{LqbMEJUR|NJeUj5;rPOb?Eo^UoZpuj=HIMjy1 z)9xc-t@@pYyG8%16%n63DZG0HrWE!Uno=nljo&<{5Vy>{$qHJbFJ-E2MCebR#z4pjm9Us4L5bb9sp8N)IN{NX>X-%oAjJL_0cyy`#3b(l)m^mTr^( zpICdZs3zNRO&CE%r1vI7sVV{@O(75vX@W*j=@6A(1JVM7L_vB}P*AFf0!oSWPUuLJ z-i46Rq$eUFn)3bcH*5VfduGka?7a`N7Mws9ym_AczG_aWN6A2Q>~#zC%1FKV9<1!&l(+tt&+t#M-oWp6wO`~Mr`E6!yIfL$t-@R)Znkb4?I8C;> zs;#Q2rg=gs%3;BQ#k+zMXcPSsL0_-?!9A#zS9#;q>oL}>9YER)*?suM0SHu`PB}=# zy5A z;*huQ$zl_J*RBlI(mtb^^BVk4jhJ=4+b4##yLEE=pdB!J~tA>3v_mBg?541(|3z-p@D^d1pq zL>-WUCis@XS{omQsauo%DJiQG5F3*G?mDT!f{N}fh~>F5V^@=cUHmJpF%+q9483tz zs^uQa)+qdHr9AmfJwWh=lJe5_67cVYx(#Z0JR!WlS33FcO^9|GhL^n*JG|@uqo9W* zbQghnj`c2Byo@7+#)J7+(ew7*S(=iUD5?QE>m{j`lLJu^p3W{!)%A73d@uv8M;Y>2 zBEgnT;8`bb7JFX#vpi2Deqstc-)_A1kr6b1`0z}FcY`m?U=PZ}2_oB4s3o5A_o8o8 zw5fM+-+X*!f(<8;w~dZ%UcO3-G}ZSx5t9o#n4QW_6GOdMi8>E3g!<~g`k!N6A<-}i zU3Orc>zfAOF9l+cqDg@UW@XCaJLzE!nfxXvzvhUt`AiT&6I{kq82tGM9 z{appgV)9+1EFNfXT415K-Q6a9fNV=`h^2%6)kD!Yg!Jc?EXY=fyHaRuM#k5AQWYaI2OSwgM_jV^H;f?Y_y-PiTh`d&v5}eJq z>TWeH-)d9w&x6%p_KT+!JPQXY6HY@`AXY+Ye&XUnv&l- zrVT#~tTUC#4}jg};{{TmzvQMPn7Hjee+CG-SFXB6UvLH`p5&sSjJtSVy?xtw=9<@j zDl6ck1m2%KI^Y=9OmIiId9#~sPE;0#m9*GTxBKeD;i8Z0CRb9~ z_%7z#K2`WDlta#?+|4l0%xX@p;_!LkU_0kJvRpVo$vLUF^M|E0I?$q+p`~FR~=XrXs!{Yq+T4? z{qADox{&hWx%r6UO|P<7G8gfU|=6{YWHe>ooBFaDDm`*6Ge)y^2%>*9y@C~=Ue zJ;D9|&S(A`kPz(xlo*@=RVmZIL;hxYA5jM^3|7)UDF1H&_5@=MfU^HaAO5FDdh73E zz6q2zs-0&u@{1Buka}%v=<^Td2N^wL)z$Vab9J9yzM>}&djGWF*}0?CcYJ?JPKYe# zqZ|NE_7}Q7RimQw?4Bt`g`TLElfd9{K;D~vbd?gl+Kve$EJm$v@;K@)ULUOu3Fu+k zno6x3Nc-$DAFN}ZowBy}R|HhsnL#-2Id}o79!U}!qZw<`WS7+!$2_thBtC9Hg~MQf zOpHlV5TC>bs-0JONwRVG=sc`5tK!oRL}C+Bmz3jNw~N$t5jfRUt zZjfN8zzp$ux7nBIfb z(1I;pLCRfw{PBzD>nFdyQo@Af)m+(=XvZ(`siroPvrlJG?=U9w)u&q@78?+t(ZJ3h z1UN76er-u{t8JYW$6D^3eq~sCif^hE; z!t2GCcXrb$BdDHib=S(c?&{61m7d|5ol9vKRr)_8R>_&@1^d2sar#TeiX-SewKrdC zNxA2YdZwA#oZ8R&4Cmruao4Hrm)ceyY>QkQB48$N`)Q>8DxeDNvBO271Q4-@9iW=D zIQIyN(7q7G_2r$K!bSDW40)T1jMv#mVe;!qgCbD*-pD**&PBG*W z?U3C9R!Yc)>V*Xn0XAj7`a_8~A6`yit)B?+jXZ2+2kLu9cgt2rg^-UZZL21AIFOf0 zWKD1W^_i=3ji@ob);~gn{jP20=eeRe`kv_`DYB7NW7I4|bPB_equFGv2uSix$&Ljd zoI&Vb;HnVZtK_o?Exjv2;OAa8Qhd#sd?s+FEfF@KMV6x&h|bU=@uOT0+X~eAI=F-r zr_qKbI@L7zlIs=IgG5Rk0Ti!$Z3o6%NdMRh@vLMFVQZ}W?AtWEQ5UD4@G3P0o^VSY zwMk$0_~@vi;cgc4nnAfWI4sNpdJ5?2v>E-NQx(o6>mCKgvxoPyHsHJn@}FS#rrg6u zXzA^Lm{h}!PDfs3S+fEAQaP3Pib`(>V`B~QlQfOgQ$C)!c_2M}T&6N$EsSBseGIG# zGgndHAzu&rZ2HPp;2ac7NBwq09psdwY|OB0z+t~q&K2{I;j=@Q$N+lkeezVpY*wEx z2Q1E$ICDp_^2I&+GcVTrsro`B;Wrz9&NskXmfOFAnEr>YFqLRV05Nanix)h&YwbwX zA=u#b=z-)EEt4NtcM`7Ylr~Cgl0Kt!fqjK5t*3yUacz{8b7%U%_qU^XXS)WVfOl|O zz8ZT5=;gcVpk1i@*ghtBE~P2XZkqn)Hzvvn;2kO%qgZ|<7|u{~9MLTU;2ds5^_*ep z53kT(j>6YJ)rh&T6q136$?8EA_U|0AWf zFjDuVeX2rG>ejU3J3f1(@3)2v2l*_)8u-Zk%ZF;phd zp{1Uo@hFeAlcyIdH5?YqHS!;3sh!v$FKniupU`1usYGbV|R9EB~AViHOh^db&vlpC2Dq>EoFa2C-s|?uS64OXD z^zbY66Adjp`v(PD$X+E^Pz)-NT*TQBcv4bw!q3?)rX0Ud$S0}X%!oK>b;{$~hAIAl z31tl>Ufa34vIeUk@8r)hAsTjDh$<*)?||O{xl5%JpejE+;FUOC^v0}P))hO-(M0UbKTKnm{j0+H<&WFRU)y(sc^uw;6#c0gs(#eUo7c+q_^vNC{n+*A zKTHGLs4zkt$CX+63L}N%m&dC+phIh8fQmmkLwO}1*Q!sFC;Lt9qX~{)_Pr=!Ye>k< z_ML|Mtv${mHYSOa`EPzhlGP3<4**mvtD=*d#>$v%4ybOn=#r0Di$A`}c)q_IdO^qZ zne|$6(rQk@3y2_to90&cx*NWd@>JZ>HqLmWPD;@)+8@}}Pqsm#rL*Y{^m5dB3VWYW zGxxLKaQ?-4L_?R@NLu`pnbzK4YE3@4;Zv!ipTc;mMegxEObu{!2zXt7+TB9m?%HwI zD7q=vNicwAr24XD>4Bx>TAOnX>P!Du#3+F)YvtRXFGrxaliYM#R>_t|f%-^y{#%RV z2cXtXriWM-iX4n%`3JBLja1m#Q9gD!H^iDUFL+uV45Vs2VY%I%AhR9LrO?$b;YfKt z;RrYhywV`Kc6p6g?pqmC2u{Rsoecp2T#jlTuS$qU)g*C>+RUkoPl@S zdnU}Sd_9!^d%p9i(iJ7*gvkFZ;Z49LxRDrz{P4t{G=)3Qj=JolYfhMxf9UJFE-cvt->hD-|x3ty$B&0dUAx2s}w6*&tEncIs1k65i8RJ zhVws6h}9kQ56w-&&V%HMeeDP|a=h&yrdH3|`|J99u0KM^TaBbUVEV-mNvyS5R)9e7 znt1!>|I6fS`!AZELIT$7G8&+`uecldzua*D*~$0aVb-4S7uXiA2G?WHDR=*L-RkuV z#H9?b50OqDyD!rUbJX{6!gVdm&kAaUQ|c5Y)f=Mmm=_-#CRe|+zB`4@@OzfJC)X>o z@7;ymE)5+Hiy7-a*;~({h5k4-=qx$GE+TS41|j!p%cy}3Ds`EkV(GVe?liy7N*r#P>`R0>3|!Rp#Ko^oAtX~_r- zPxpdx55cLI89i3vd1C;!-wi#bQF#42r^W~3I|shNcXBN+pXX+}l|uaD>_?;XMTnOR z0pvVy70%_MZT-yIo8l*HsaqxX8GK*y#>GIer}B-kxY1 zH)hNxKWELml?6WIi**IfeOYvzc@6!HVC~BAZhi$8Pq~d)*l_G|*|7htvH2t1f*7)_ z49pzhdJ;SZ6&Z1B%&*mvaO2$L&8Y)Hj9+NLakl%M)+!U%Yuut6WG^iixF1nseQ~=0 zI|2STWr6$q7k|#GCSlb=iD`Vji}ctOtbQ@i9uKHRVggKfkglZfari$){mZrd^e<}x zV__O21s1QCpUKhleistO$xoUn2_%ixLDJn8?}*g{;U&}Kk#(YXle7HiU(O25%8#CL zT~+uFl#{bk!UzYz90?MDc&2gMc`+_fhQJK%*-H3xe$Og!#GZ6iu!16X&L>^nD&=)7 zhq2uOfOyttSX1Cc>dI02TOh6=j52CW>=}Fu`YClkG(?3yQ&$&seXG%uu>hAVBw{-Y zPO8}&ri}KF@@?gFOM#=BgVHu|zWwkj11XT9vmT%r8DW3`mWx}(tHf1YNfy^F_qPy|;YOpIk5uR16>^zW|L zXxG7u2CO@=AX+|{FY>eAQrWgull<_L#Vg~T5AMM-!4cMbXmn%|@*EM@iD7OU55}f6 z*QGuCy&1jk?QQlRH7(`5|3^dRwvpC3>r}=Z>=a6jqK(HqE27xq$wWxMeNvldr_;$9 zwM%zWegn-5k8YEk_k_mmWzq-EB@W&s%d4GOq&br|6CfT`U=>0Q|HH%*w8#n7v-vnq z3s_aW4XO29c=RSfHm_VSrgbU`)Y2%!dW!M5zKsQs-n~zh#`kDBZhXRT>0U-Qx^0-{Wc?{= zdehuGIcR76#8hUsc#QQLSa^lxNzVt%7jr@w2zHxREOpZlH_?s;vY*6}rzwem0TFx& zzz8<`u62zY61dOan1B<0s4%K=Prm6`Jq*@;bEFP9IR6mSdY5JB>BU6l-96HmnPH^n z>;58&a=#rC;$GYM6#B;Xb8n`-{U5C>@Bf5y=RW?fkU=j3Lsv%U0trF|RKqQ;qsr$i z=!DSmdBkd$_vJDtRa#k@jlBzhnD4}zQDdeObod0O4bVg0AU5;Rx9yY1e5E1L=BY zKCWDS?{r+Rqi#33oSq>?vW{}S>K(rP%9C)waW{9s`^$VxOMT}`tm))nK>w-N$HkOv zcI8EWvTFLFIe=MC>q;X$)x}v^HfpCUrp)-2{l}boQ~MK(sA6RltJ&4j&KoT3@Msix z%D49SldH|BFZ}oG^&rhjA=Z=UQ>PB*=1O8$fZ{@)*d7=g0YV7m|E%T}m2 z0D@c6lOwx)B3iYg&x!r*c!4%kuWP;oKkBd(u6P%I$wCqdz3 zbl&LZ!I>{ZY`JcKjOUVn6dn4atkfYcW@T>~XFM2u*p~yPG^MFv5Zg#TmUOu}a|yzI z$y##y_Xu*Hs0A$93Fx}CSf)j;yw#bhCk~NQQ$7`L(xjK#?#t~Nn7HoSMC0un$v3>( z0lBEPe#d_dLi+dX|Es&@UmKSOlyUDlmG2*>AHWXxIRp!9ee>pD)#y*)vi%Q4`v2@! z{!h;yq=P-3Rc+`APHE z9N7l9rRzSSf5Li0SP;ekFp;0easwAOkD~M#N_NXGcP9d0M&YPh>$%l!92VNa%BC3Pu%ECM| z7ubUYk6?RAf%F{V-Jy!B^zW}o-Z#VStIMmFx<{u!vXDw4-gW6fjC(aK;k(t49;K+b zS2Y9#kKGtiJqmjUvRl(m%R+m=78W~~rGXUb%Wc?h3~0fV0U{N7SzleE`27`?`&GXA zfX9dwn{Vho@ZeO`8eqcFK}|C_NyfdJnKC}$E7;b zzl43Sxcap0+e5`M>nTW`Prw{v5eQu}uMP{?0`XP&ye0PmtzBHEdxwuuYN#oIBqH&X zHA$*QsQzN4iP@#K-6D%g_})wY#h}XQ9i#Wi8d5j86lhG=y}=j|OX=?#jkj~k!ruwB z#%8i(xE-%dHcq;xLTY*n^W9Q%YxY2wY5j@7u~=6Ujnt>!LJej`P3a$=iAni8ai6V!52REJwkd@G(H+Q$+$-mW%hX$Lk)>lgwv3g{_A zfHF@#k2HE+9)71F0n@4)c7XxfThvJ9gX*;hooy{>?fT4^7zT5aipUQri~i1rO_bP}S z7Y8;ZNT?FvQNKBzywO~qp<+1|OSQ-K`7ULC$WZfhqQM6eIYw!8>3iP0cU|{qlv)Q^45a@VEdnLjcXje!gx07-&?|FXw;o&5d2wicns`V_n7inqs zlDpW0WgQa(I1AuWYLJBpa^Wm6+d3lkGVYLKFtM9vHb`}}?C{fGU$CXx*p&!8mms*_ zUo+;qydcnQu`t;w#=XZ)wf2g`W75{ENRj)|5dv2cUVqKv^A&HLN9zhEw`vbE=X5OJ zIA=YHJ@Kv%2mFpv(t~SkSA32nSi2J+Y#wK$a^+s4JM0cUk54|p*7S^&Gsdv>4e^<( zz(-9ft*BS|$&Ax=^P36^zu6!1*O20>GCb$K)xyY2Q9K3eDgm#8rh6LfU$pv-!g`vbz0=qq>sAnN^&1z;@ye;1Y zN)9?hz)Knba(owhxoYSV$9451(C&<|B?U+ILS)_u?bl592@3A7EGS;g1U@zUqUf^_ zH;CpvN;lO5@r>DLpB8+&Ks-e8af$t{Rox!KGl&@SKEW}x9}B{ILIr>_3)Ymn3Xm-c ztomFi$zLueCFaBHe7SqXZ@2f)cJO`Fys5CwJts|$jl=6EkVdaY;`~0!;_s`$PFBzk{03?jKC7{9?WJO1D+y4%nV z+v@}HRombWz|`??;P3zc`Zu@xKW{@t|1U%RfBHr~)Z8>d9neH8JV?)ub7+k=GxE7Xg3JRJLFaEEQ1NSo@S`p5=z_RvG5Olsb0!y`K&nv zXeT7miM4K&oE9HsR_c59NLcFH*vkms%avz-dbd&FWuDkt=x#qgXXy@~JuK0Q-#&se z=fb9>IIQ|v0%aS@tW!4Fj|o%#`Rg4uRVPi0UI!%~@0Jh>M1Kx#4&eQ(IPX-29=TD{d35fltQs%Rc?k4{7k~*aI_3`2wGp`-4PNReOouea?G! zv)z~mnhuHM8u#1wT)RnG``kOe>)+m!103YPXp;L6!S|_GwsE{jr2@Y;;-v{%aEXuj z5T_CXZsHJxJFArrd6At#u8U&`fp+UkkvEA>!P*CB`im*YhAJ-axbkE|i~MfLu5i5% z&yFVRwE{bF(uzhI(Z27e@)0iDI%}C}W+i9iTBnc3Vhc<1r{3hMt1`%rDRkBJq#f-# zsbF`DFhfPPP<6dRB?TH&S2G(Ya)l?0eO9VRT(+C`AC@u$<5r0oDT8d?Lc(;D#Zs$2 z+HJLii96kgqH>e@iZ{={U^dNEbLm)baBjOpYA}P;Vt0!G2Zd&L!Yzi>l-eS+LeKLu*VtjH7SB@yU>A|6C=Db(Ky{XXnVto4Pg;bYp=r!uj<|U!(tQlM+IJ>n zpI+G!IF8OSClS5$PDj(MrQ;{3JVb-zg%4r~?1?+{eon*5Q)_pWqF-5h9_oO|J zXY|Xwz_s_OdQy|liR&zt>z<@2jZHONY{AJ^K`I|=Y-S-V^*)0i@E`lXx-fwZsQBm` z{E-r6<(@x2|L}2L!_->f6-BX1nNw^x1b?G@L2-bKjvIMv8ts93)@(-kpv?0nO#&e$ zB}}!I5;5E1L)jc%=a1qZ@-Mj5&E&xnNDihm|^aP`-GBC_<{mn_&E@W4&_I}NwH0mDJwj~b zx9NWJxtHvdEK0g6WQXA~j|y#gy4s>mnt-fIZae#}?3s-BjOp-Gxn7@37w$HnuKR_d z)yG;W=59iI(nNJ;!DFmH1gtx7#D!%w$*Zu~G^!NkC(vw$r8=I2fnMm^ z<>x5~y`iH3WINf=>)I9d7DD4_@`b3Oznlwu84suZgdL}+O*X&PJu~*?|EpH53uz7? zV|At)&;qBx7s(LTc0Rk3M1Xfj#|Nm{8Rf=ZDgo{%rgF#6nEm%xQ#z3zK5=|&l9(-JIPcej~qN6)<`kNm3*|QK#4oZ^- zBFgV|lYT+iD9(2rS-K%7^U@NLVV^F`uJ@HPdHc$--Bt^%sENtn8Rq(O^E^|AlPA@X zc8`L`w^V@0mXz^8)}B$8?E}wpN?BjKaBbG!3_~bth0WS>^06&ALCNJoLU96F&CTeH zN(U>Tny;e2>5qZ9mthj~HNWSSBdyw|bq$y{wxmP~R?+k;0yV%tx9V3`@`UVTE8 ztllEGGmlBfMZ@7*FPh%zt;tp--d;<6D>=o4t-Ai0sPKSNR`%Rixla*oODa$8_7s|J z;2IN>|B~dfdO6&;SD(r?ut8&+(Y@^D`W_^LG^<36e0=%4uC*y+cW;;TqlH)<75W`} z7VE}Ktif;7)0{}Jg&^FmsvJmOb&9>=BUX<`I0c^TXYWABFS3=N0p-bsD`=KWaSz1| zv!2s5#klkK4`^+=%*@X-PYuVh%M@EgrF z9Y;pf(~mG5h=AzrW@8{7Te-0O)_&&xw%TO*bl49U&rbG&pE93$INEYC6~V--*9W&yNtKidCmV(<&TZO*l&NRWZ&1`p|Dy|>I1)|J{<2+ zXbiSZFz(HxkKv!GD$)(=zo!xIyW@BT+({%W#kp|1>g~~hS`T*0Aeid7rK!3(l^`pv zJG~#ggJ1QKLC$Ddm(Bq}8BKlv-3Y|Ye_8kQekD42Wj2;E&;aNW_-RimC!Qi-tvCj> z>VLSf8uF^L=7-!kea`O%=`Y6#r&ZWhqOP!5PK zt65#3Gd~Mh{SI2uq#Y}JZXt>?l=$Q3_AwOuqWtRsf|{vtQGbcEKX>c35|jEW$UGdE z;tG8Rse{F#WCqTErMOaW+Z*89P(~Ln)Xn-B)aN~2!&~q9t1i}@Lw~A}vHwv!FD3eO^AISu;@G?h+T1uLZET%67$)JuQ$~=#;o7fb9j7Zo z*SetU*}lu=J%~p%lxx`aqZ= zYDBCuZWSIQDF>KaWhrKN##_CKUw%-Wd&M|g6*xalmlc{|d#%XhiF){UPz0b7?&O|89%*|JqxYVbq3EYj*PTsXxDtp z6ZY?)0W3u{VSu(z!Ye;VNg*Xj541FsXkh7C8av^-@OoVndz#z>r#r1fIT59IbsduZ zEF9cBa6;a&6G*r>^%Bx*+I32;iFb_xCz$nJpQ>Hkq-uDIR~9}hxOj5InK2-IFwA z3fBaBrzy(h&yXOifV#I8haEUTpfjbi+9xYqm6IMUVwihL0owEhw zX}`ee-vff)u8%~LxXF>VJ>kkdGFFW(lNZj();EYTuS}GrlA#ZGPkjXYFycTQf;77Orqx+TsJaQj`|@cB97(M zJ?V+7L-#<>p%zfWBtsyDr_J8FQOo+7ddi8%w(^s{ng)tTyGqGf1{N71eCE7oE6>QQ z|4!V&Hpq7uk?%k|mU-zPY7txjhIzZqm&G!8l(gs|LyjR$mH$*-D3IR`!=pJ(mM_rX zwM%(nYkH4<@<-+v1hb}tw7V=8n42*n_#7xQ46&Y|*d;G=oQ#SwSzKzY% z!`6a}SAUUOLRNF1v=^ZH89&fG4)Z@@oM2fhWGj%5tEh6Dvl8|JxNCjV%d{z!iVNFiTzqC`#I)ZWaN54+86TQoIOP45++j2@b=LEQ~V{5t|v zSq4#h2E0pa!a9$}Jm^^k+8uiWaB&e1`nd%ba5Q65cwR)` z-^09mQkY4Io&ElRy|$X}gGf#Ko2Gam1$pXMv!suYLpjlKg%R#8wd6jD6dR z^W3m1bzc*{4{59G=xMKko8+Ib|9zNRNA*Df%N9KTieC_DUbC|y0dP`jTrBQ4R#enIqi1^q8y<-F@uD8R)w4b5z5OE#Y*!DA%G&4flxtsX{#L$>Z zXYT6dA(Mj5dG%RW#JT zYvRXBGV}fGGGfFf=n5P-AXf??r#_JSJ3)yDWEfXB+YC~=vdCepdB4Q}A@|%v6`eOr zQ$1I_xz@nUtuD&Dv!tX>2s_|wh=49!Bdp?qnp$2!rICb$3da*{+85R0h82r{_<2XP zAQYWV9-FKm3UD{Gseh7b%F^f)Nify_r3iJWM7x7}3l^MLa9t+YNMQ4gt%meK_-?&F zY2D!7F!3n(#)<6pk2#+5>+zC}>XVGQV;C`Wj&_-H!t;VE&5d+Y{=OkNMf|oxSop|K zO!dXUv3Dvv)>s$rGv3Bs3Y^8Bg&=fqk=CxY<`(OE2Nuu zwv<`wg(1@^2_^|vyqTfkzM;(@t&EK+0E#L){~u7Of6=J_DiZZStLgr;NYq;^*2Gqo z4}ddR3pn+_#vToSxf3d6t6E}W4Ggcnf%mYy`ss~IoVdN+7qsafxPpCg6-aOp*ax8c zs|XCC7Q$Yu{M?)C9s2XuvjGB>$1|0CZoep7?@4W}4O6OZ5%;B6Hpt?Zv?yIxB4*cs z^x=4=BIQ{XMTbOQ+twAB-iL&NwFZq&&AbZ^nol>-Dk<=Cd19&*oxQ884#cn9DK!9) zFTkFcryTTPV=Y=k!@bUN!VO<;Ym|u8_vV_7aGfPe?3!N%E4~ zT0=vGXEujgCJ&^vi!xP@-?!G}g|VJ;yxkxwxbnoK(S&+VQuaa2_$o-C0*-YpNc-`r$$V9o(ssCbUH&xCgW~X@L=uJXOas}$j?{xJH0SO1wwJ%7u*i62D-<}!A;8O z(r{6$?mLA^2#P(eKBf4k-FjKqzSPJZo=YoN_+GAD2b+WUC=`0TMcR|~NQN6r%J*)( zqJaXn1AP6%oIifsJhm*L977Z&K8kH>joz^YRwv^eYUHGX2e|Yt? zsl&5@jO;`Bd_+I!EZ7{&8&t3mcRRWZTdUbGVR&$a5I=}hMe7>9G_oYvbVS2 zTU@`PJ^!}U*~yduJ&m-gr2zXjJ3~~r1}LQ(fz;?0Ib*ySqS)qmC;iXYv==>RW-|gy z6%+TGsA{`s)00|rt(WXV`=ImoLp9zdQS~S#_*2yqLq$%_I}4D& zI^Toj^q#h7iNQ=EBlZapID``jV?}pE67MMmf|E);CPBwhk@eT0UrPV=QbqvsA2J41 z-&Xk%S5qGc;EdlW&R5urffA-Qame2FfyTr3k=z9Te5)TT``;C|kEXByTqq#b%N?tG zj&?C&kyCwoX}?N~BiQCc>Wti9QA1=s*qUl*M)i*@V+d?Ur=?tBh>8b#ssCa0lW(Z2 z!?nL_NV>njbdGEe#0yJLSf zW2O4oLO`;;6sHTd$?04iIS&F!l4*EcvN2)3q#GFXIlaja^h}87($fQr$=W1aJY$+M zr6N7_Sh2^JF_?6J;qZ!uN+kaEwG3DUkWXOTiJn*OZkM1~5LY|9ElK%bJ|Q71a4sX6 zDP zAiJd1g1B1lMPWiH@X2tiosgPp=cOs7a|ZS|M_*KuTd?alje2Be2>t=}|JIp)Uf`uu z^Fb1X7mhra&rdI4ux?pp!9-||9=^5SCif!KOea^nOiPz9GYL%$GkxttWZvU7WlB5( zM9K =n@Hyl;_XHESD`#$~8cMNmZ1Ha0EVGBz5U^O{=^zxl`OJQRLkv2(HaqT=7& zx9*n)rXzG-k+S+EG|A8DxgUrPouFu(Kw3{4H}YvVjQeN3q!dudh~EhmJv{I|5YEXl z6A5G9+_1XHlK+OR`HUu5NV`FV#Uk18jk=?S6szyr*I7f(+z2@e^{J6u%WzU8y5A%j zr?y&D0?9!9J|J`8n~Io{IJL02kq~VcavbZXA7eW2bN~F5rI%!UxMUmNK6Z;qo##Kl zvXZKehxM(la^3`v;V^m;QpXh!Pf@W0hl&Laikp)-^EGsqb6v#UV)ci=o@h0-KF#c!&d`9>6Pg}Op1!%L+`k$q}nN&vi=<9 zLqJ#1dtt;$!zn^rT(1^KrE-vCp!w_Gh>|5`Q{PPoGv5Gl|3QCrOy`!9gxy`G;lG0- z@lz>;QGWOdAlNWnX=AFLeajjxjCPL;l%0J(oO9$Tz@Hf@X$-;EJ7J%^jJ04?U}GC0 z3)Y0t-9Mz+6%=r)vh;&eQHnUP01w@>_M%SRPLnkKry(DGhU)i+7XuXsuP?3_`JH^y zc6O353h0{V6Fq=tfNRUEgwQUNx5myS(Cr4f2%EzgN5Ah^`=pAZ!?>LNDnDlvmAPo5 zV?bn7s-yNnSZ~Kie0C@*9%^w@@|Cjgbg|No6MR*L zqn#%n?+H?cDHebx1j>xrlU}i>ehzko_MpU0LwJ&gK1goZ4_#V&j0*LyHn57*T! z_MrK7~Jo2a~d@r5DzfAId`k+8~*vG$O-UxZ}&iJa$Z(J&hg_Pdk;cMMJtMQbVF=>x8 zc|m;vy3O?GHgL_1fa*tRfFC7pZxuta8t)sYxBs?{OrqX;bsh)_+YD;=nr+#i>E-7h8ER-RA5@+qt}KB3nc@0Fp?{-9~->H_c2SHu%a zPMd4*rGN0hxqApyL2OEEYaEY6I^=WGTY?eu>Yx-HH|@O4_JVudKE_27Sa^TF20e}2 z(&GSCr=@_Mfwa5@IPf&_06}q%@WF45gFEUB;{Q=6{Js3C~1hJ zu@E>7*6(PVC+&q#@5Y@AvtYwi$^HFI`0K}xFuWi1YvFIG^Yk8H#6Lp9%=sre(h;M27##IduApO3@#c(BP@FDn(ZsXP=G)0$X9t8vuAX%x8 zXyznknv!$bj}%b<-{l%#4rg=fJ(KbyZ4rwQyIxPJay};87uVcFPrsBrP>w|@qvrU+ z+96d_C|1VE$AhHqe5hgiI_M+>w|d7|0(TQ!NoE6~_0 zG;dP&_OM(Ien@3)eybiEtaNlbO~KQd=jVIY4Dow>^8yDz!`TCR(Y_pUbhpWCnU50k z{mGQBycc<#`&ZOHrZ9Q&@VOfPS~4abFiXV2nat znsw)M!i_F_mu3A~3mlg|r+hY1!RFy>6u(#_;sIs)8;S!dKBjvD;oZZyM#3aa_F#Ei z%?lP#S4qK)xz<&_jH+uPi*t6Bx2{Il3An5$s2}#$Z4^=+5ksb=4UDf&-0tFvcVQqt z?;8F#h-bMEb?5H72(wQic)q856TV!47ic&D_@)J_Mg0``VX-3xM0TEBx7`g=s8fMa z-o4y6J;;cSzRSufQT6B3%E0qqv(sbUoV8aM?QhnTXTC|Ns-1ZF(1`ijbtWz*356E6 z7~eyaUxyr>hS&ACO?MU&FJf%|eAaIH3S6-~K+g};|M5EU|B}&U^+5N`U+JR%&Cosm z-*e9beA9^l{m#+be_DEAr)UOvh`=^l0P7Ct=_Vfc+ZFv;s84zNsaD4~jz;e&*!JVr z4?e@CdU#s!cZ}d0yW6)%BoIF4pSRxuLcw0>LR?RQpc;+?HRO$V1U%^d=;Yb{Thm4# z9xU2!T~0op&D1R7S^D!;!O%~bk2Ro4pd#WXqi+VwVJ=p(Td_(VefGDl_F{&oJqq_8 zSL-DlIr1X8P!@?i)EjTwe(F62#Az*dUyeN4$si#LcSu#qwY1gDN%m5EuC*}B6QkGH zwxF!L7F0*0jBj9hlDu6#-u2J<>Akm9#`a$!)?8%kWKi0oai`dwwQ%KrZq^-a4Ws_< zsJ3InwJl3c`n9RO*2SA_TN`RFf33p^kSJV@@E*6faC{x)3<6F#@fIFuH)#i{jk^0Z zt3I{n(viaXN==~#or@zn?>4*1H>X?GJ^}gu6Tl(bF4-xj!_yUOSv7}7NLL=9Qr z*e~k#7WvN%KKBO|8k;k#?pQek8wG4Dpf=onFVMN%2y$4hj&9gW<%aWtyBp{MR1SBhIC4-1WLE=izAUVn^C^?7<3J54c zl7M6hvXVpvL_k1tQY6YQ3M{ZJukri*e)rt#edqUo|99Ry@0~k3vqevLPgQqyO?ORo zRRnJ^Ic|u+{Mci(NbA+U_-F9_?(#8}?R7#>);pA(*R(|DURnhBR1un(6`((k?BM2U zh@co$Jj)fck9KQ$;Jk_yP@AJ0-zRW78w?GBPc-_8=s8QxZ-$<<`a)~Saei{J!TJ!g z66j%_NouictwG(+t>-R0mST8N?%&5Iv5T(8i+CNU+qMZS0gg~_ihw;&0>Sq?^Ld!j zZalFz=OgvnEtQlvm1qar){OO&g?&~O*En)!)DGfN4vwCeui}L-#*@xCdywC}P}l9?^NK5PsviMW)Mk_b0a6&*crmKb?eTWM**A zvqEd#7zW`M{bx9lj%k{gG2gPRhBF+R79PJ^UwtP>?3{6KJs$euif~26&oCBP(v3CG zvJ{oO?i?47$GbMG4Knd8Bnz2-5{vPvCLyb_d-`x&`6cf8;0my1>vYCGO6wiTKY}mgLeCKj+u-jzzdCsDZ z0O6K0erRigFLl|y zb7S?>(?~<$Kc}N>F*#ICoo6WiR9^GIyv_;`XvBAbIq#84?|(jd{#U#}I|2cgCol0I zw-O#X(Rj9jw2-STzoD|bivv!D{@`XW9f^~R+CDhA9RchC+qe-9bkPWQv?ua5nnIZ$ z=S*OzTo9Q)0pp;NefG*+mZi!l#M}x3b4h$p``c?2UL21&gnBss zls1|jbp8O$Gt&+sB;SU-$ZS6@GzHH{MYwk!16*4GZ#{H}(B_+zKc*%JOe+1qQr2;@ zkfI`SzkYFie0y3~w>P(riWAcOfcN4TVFw?xxRnY>8YSd2kPJKm9{z8 zY{Om&s(g7SjNEz>&zsehq^M2=t)+QxhsazMMZ>4?N&&Bkp+%1$QfQy~WQO5xt;zze?OJn!JPO(-dX6BDw_va2xDIFBw*QK8T@9vvn#4{8T3b>2}u$rpF za;S*U)M4t<(o^axq&xI6>9}e!p1+ft3Il{A&`=AJWX^zpE7@zM@9o z?th5KNfEe#K_@XVK`BTMCj(|FfNc&Td{zE`m!2KOTAjOzUj1_8n?^W07(#}?3eOfb zsHF@Cmhvd@?Tc`A;J-=!&>ZtWW&fXSt8lJA%4|~fEHHy7kb^y4z>m&H&}Y9kb%l+N zeM#-bm4Tu&sP6hMEe{S`+8 zKI4(apm&kT07K)q%^YFoz&naEGw={?j%qu52rVB+!_b(Um>ppLx%9`>)$gUJzF0?% z_wVLz{rI1fe`vS=X`%n&p}$7Z|A#r@JQ^O%_!>>E$Oi-!kR3GPoCSDA4D0Rn^!|$j z(jwX(XU@#(H#5JgYto{Ys0da!$RBKKsVrB~FwAn;MOsL<){!v54#y01;lz~CUk5Mr zxbeFB&D#)kbh3cNAa7p>aZg7FS6gvcPg`e4NinzUj?Ral4`-oc7d3S>As7sTw81~< za1Oel5$x&&L3(=7X;73Lg2lK(!~g(Ds^7jJ)W zKNs)oC#1yALg!R<^oWmY0LL#_;1_u86IbF`3RF$Je3RnQ8csFhaGsN2M@ir}AsXm7Bx-B#cU{H6;L=f@zkh$# z|IcN6a4iH8v)Nzw^@kvmUXacg^g!DoKuF)>mDc`ktFrM9*8b%r3?Bm7SU+B<`KXaSC- z3|a?|W{s;bx7ElsA zSl!j{x`%DZuRs3pym)#9fcE-zoCH^D7hi27@XG|+t=QdL_Xws2aEq7SWqklM0Qjvd zpy+RS+$BK!3V@IDui5*lfwnwiVIs)ER$Ujs#{tX|;C@BrZ&=dS7eK%A6J2)o*D?7U zw)6Ei`n!IjKrfHWN9}u5Pppfh&Tlx!(NDt|qyrp?0-annbpQ-Fji@%%#l#H208gUM zKv&bt0Hy`-M?ZJtBOH$EnGSVPJ4*kR#}{}I1~5NJ|LNqbc|;?~184K}1JJMf;bQi- zzn%qn0e->X#RQDCqq6X;j(%5<@cD&mI*& z9ps1SIC^LurGs{czwiq*{#|y^-`C_Q9kd~Q-p%%+0f3L5wSC>+;HZ57Zp1{;B}ffY zhfY8N;IxChAvehN!&<`{`0KAbnvgBz3pqoMkm%njze||?y5j||#!x7<4taq*e*ctH z{dLz73Iyo~|D^s^RuppjbvN)=33q4_Ji(KggIJkZf%p=*UI3>g@j2r2zssGV`;8~5 z2B|u!HmN45@b47J9$@VOPG89N4{5sKo+F^n7hJu5)9|nQNES&3Najg~NoGmLAXDhe zuUh`56zLl2`x}FQYSx2hL2ZAviX&(-FKGF99%4a&wG6Q;u@b-^;7-g!%mIlKO9M(& zh!KD`8IbzB^^UL(_y@OtwdL=2|DEp$>l6Qh#=p~PPt(f$jfLHBsz6WvZi)X~%fIfp zLJlC8?tjh+kA>I3yWwr{ckmW?19Sq8hQEaO!e1T1f8(tAt96|Jd79C$7IgX$+Hr2 z5OgHlkMcm!52If)8^+TAuQbOc2vP)NgW}`A(%kMtP-zzgvBv)^P0$j8*v~*v)u4TV zZ{T0`5g+}KK$H+27!~XgH^c{>0`y2ivXBCF0n&gjLi&&iWDePY7I%R>0nR~CICKk& zh7zE=P#Tm8WSKjdWeRJ zW{Fmbw%`z)3eE!Og^R+^!PVgUa0|E-+!r1JkB6tj^WYWmCeY7A@LBj8e3zJ%n34Dd zu_)k8ZQ?7$_QXEK5yXkanZ(7!^~9aTL&S5$7-9km4asp55fXV49g?dg&Llx3(In|4 z&q(S>y1=;kO0rE#O3FeiL@Ecyr8%h^X&7lDX*Ovk>1)yf(go5jGBPrDG7&N*GJP^z zGJmpYvJA54WN5NMvae(~aw>8ja!GPcatm@V@<{S@@>23v@FQn^cde zUQoTInxopKW}rSztwwD{9YCE-T}1twdW`x94GoPT%>^0@8h@H(ni850nrRvwEhDWM ztq!dNEs8daww`v7_B$N~odBH*oefM2T|eF0F^Xe?$JCD59*a1Zb*%B&=&>z& zMtTW)eR@y&MEX+tcl1jPWDJ4~8Vn8$w;A#oIv5rh;f#EYYK-=bQH%wQU5sCuNSTC~ zbePaRCZ}a{?{`4+Xjfb_9h4%>-iv8w8hx*o1V1LWRnNCQs3vLY(qBm3Qis zFsbl4VRzwd;g6?@PRpEjIh}R7UxY|RR>V~#TV&u2$(i$Kyw2pE85N}#RS^voEfbv+ zV-dR~7Ae*s_FbG`+(JB6yjz@bR_3h7*@CkZ5)2X-B_bu7BsL{aOWI3jNq&-|ka54iRa#)CpoWr z9(BIu{I0yLyuW<4{Dy+4g1bVg!jhtpqN8Gg;)2piC0nJZO0&u*l&>j2QJzKcB5V