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());
+ }
+
+}