From ea664afb3f3ae64eead08ab0014ab700258b94d0 Mon Sep 17 00:00:00 2001 From: Mori <1363044717@qq.com> Date: Sat, 25 Feb 2017 19:27:24 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BD=9C=E4=B8=9A=E4=BD=9C=E4=B8=9A=E4=BA=A4?= =?UTF-8?q?=E4=BD=9C=E4=B8=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ArrayList.java" | 119 +++++++++++++ .../BinaryTreeNode.java" | 68 ++++++++ .../Iterator.java" | 6 + .../JavaTest.java" | 62 +++++++ .../LinkedList.java" | 165 ++++++++++++++++++ .../List.java" | 10 ++ .../Queue.java" | 30 ++++ .../Stack.java" | 30 ++++ 8 files changed, 490 insertions(+) create mode 100644 "group10/1363044717/\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232(\346\225\260\346\215\256\347\273\223\346\236\204)/ArrayList.java" create mode 100644 "group10/1363044717/\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232(\346\225\260\346\215\256\347\273\223\346\236\204)/BinaryTreeNode.java" create mode 100644 "group10/1363044717/\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232(\346\225\260\346\215\256\347\273\223\346\236\204)/Iterator.java" create mode 100644 "group10/1363044717/\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232(\346\225\260\346\215\256\347\273\223\346\236\204)/JavaTest.java" create mode 100644 "group10/1363044717/\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232(\346\225\260\346\215\256\347\273\223\346\236\204)/LinkedList.java" create mode 100644 "group10/1363044717/\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232(\346\225\260\346\215\256\347\273\223\346\236\204)/List.java" create mode 100644 "group10/1363044717/\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232(\346\225\260\346\215\256\347\273\223\346\236\204)/Queue.java" create mode 100644 "group10/1363044717/\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232(\346\225\260\346\215\256\347\273\223\346\236\204)/Stack.java" diff --git "a/group10/1363044717/\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232(\346\225\260\346\215\256\347\273\223\346\236\204)/ArrayList.java" "b/group10/1363044717/\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232(\346\225\260\346\215\256\347\273\223\346\236\204)/ArrayList.java" new file mode 100644 index 0000000000..620e8ead95 --- /dev/null +++ "b/group10/1363044717/\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232(\346\225\260\346\215\256\347\273\223\346\236\204)/ArrayList.java" @@ -0,0 +1,119 @@ +package com.coding.basic; + +import java.lang.reflect.Array; +import java.util.Arrays; +import java.util.NoSuchElementException; + +public class ArrayList implements List { + + private int size = 0; + + private Object[] elementData; + + //默认容量 + private static final int DEFAULT_CAPACITY = 10; + + public ArrayList(int capacity){ + if(capacity >= 0){ + elementData = new Object[capacity]; + }else { + throw new IllegalArgumentException("Illegal Capacity: " + + capacity); + } + + } + public ArrayList(){ + this(DEFAULT_CAPACITY); + } + + /** + * 保证集合容量 + * @param minCapacity + */ + private void ensureCapacity(int minCapacity){ + int oldCapacity = elementData.length; + if(minCapacity > oldCapacity){ + //扩容 + int newCapacity = oldCapacity + (oldCapacity >> 1) + 1; + if(minCapacity - newCapacity > 0){ + newCapacity = minCapacity; + } + elementData = Arrays.copyOf(elementData, newCapacity); + } + } + private void checkIndexRange(int index) + { + if(index >= size || index < 0) + { + throw new IndexOutOfBoundsException("Index out of bounds, index : " + index); + } + } + public void add(E o){ + ensureCapacity(size+1); + elementData[size++] = o; + } + public void add(int index, E o){ + checkIndexRange(index);//检查下标 + ensureCapacity(size+1);//保证数组容量 + System.arraycopy(elementData,index,elementData,index + 1,size-index);//数组复制,把index后的元素全部向后移一位 + elementData[index] = o;//插入元素值 + size++;//元素size加一 + } + + @Override + public E get(int index) { + checkIndexRange(index);//检查下标 + return (E)elementData[index]; + } + + @Override + public E remove(int index) { + E e = this.get(index); + int numMoved = size - index - 1; + if(numMoved > 0) + { + System.arraycopy(elementData, index+1, elementData, index, numMoved);//数组复制,把index后的元素全部向前移一位 + } + elementData[--size] = null;//最后一位赋值为null,size-1 + return e; + } + + + public int size(){ + return size; + } + + @Override + public boolean isEmpty() { + return size == 0; + } + + public Iterator iterator(){ + return new ArrayListIterator(this); + } + + private class ArrayListIterator implements Iterator{ + + private Object [] array; + private int endIndex = 0; + private int index = 0; + + public ArrayListIterator(ArrayList list){ + this.array=list.elementData; + this.endIndex = list.size(); + } + @Override + public boolean hasNext() { + return this.index < this.endIndex; + } + + @Override + public E next() { + if(!this.hasNext()) { + throw new NoSuchElementException();//没有元素了 + } else { + return (E)Array.get(this.array, this.index++); + } + } + } +} diff --git "a/group10/1363044717/\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232(\346\225\260\346\215\256\347\273\223\346\236\204)/BinaryTreeNode.java" "b/group10/1363044717/\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232(\346\225\260\346\215\256\347\273\223\346\236\204)/BinaryTreeNode.java" new file mode 100644 index 0000000000..a1653b6e9f --- /dev/null +++ "b/group10/1363044717/\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232(\346\225\260\346\215\256\347\273\223\346\236\204)/BinaryTreeNode.java" @@ -0,0 +1,68 @@ +package com.coding.basic; + + +public class BinaryTreeNode implements Comparable { + public BinaryTreeNode(Object data) { + this.data = data; + } + + 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 node = new BinaryTreeNode(o); + insertNode(node); + return node; + } + private void insertNode(BinaryTreeNode node){ + insertNode(this,node); + } + private void insertNode(BinaryTreeNode parentNode, BinaryTreeNode node) { + if (parentNode.compareTo(node) <= 0) {//数字大于父节点 + if (parentNode.right == null) { + parentNode.right = node; + return; + } + insertNode(parentNode.right, node); + } else { + if (parentNode.left == null) { + parentNode.left = node; + return; + } + insertNode(parentNode.left, node); + } + } + + @Override + public int compareTo(BinaryTreeNode o) { + Integer i = (Integer) this.data; + return i.compareTo((Integer) o.data); + } +} diff --git "a/group10/1363044717/\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232(\346\225\260\346\215\256\347\273\223\346\236\204)/Iterator.java" "b/group10/1363044717/\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232(\346\225\260\346\215\256\347\273\223\346\236\204)/Iterator.java" new file mode 100644 index 0000000000..09e5b73661 --- /dev/null +++ "b/group10/1363044717/\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232(\346\225\260\346\215\256\347\273\223\346\236\204)/Iterator.java" @@ -0,0 +1,6 @@ +package com.coding.basic; + +public interface Iterator { + public boolean hasNext(); + public E next(); +} diff --git "a/group10/1363044717/\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232(\346\225\260\346\215\256\347\273\223\346\236\204)/JavaTest.java" "b/group10/1363044717/\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232(\346\225\260\346\215\256\347\273\223\346\236\204)/JavaTest.java" new file mode 100644 index 0000000000..208fa8390d --- /dev/null +++ "b/group10/1363044717/\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232(\346\225\260\346\215\256\347\273\223\346\236\204)/JavaTest.java" @@ -0,0 +1,62 @@ +package com.coding.basic; + +import org.junit.Assert; +import org.junit.Test; + +/** + * Created by Mori on 2017/2/21. + */ +public class JavaTest { + @Test + public void testBinaryTreeNode(){ + BinaryTreeNode node = new BinaryTreeNode(5); + node.insert(4);//左 + node.insert(7);//右 + node.insert(2);//左左 + node.insert(6);//右左 + node.insert(5);//右左左 + node.insert(6);//右左右 + System.out.println(node.getData()); + System.out.println(node.getLeft().getData()); + System.out.println(node.getRight().getData()); + System.out.println(node.getLeft().getLeft().getData()); + System.out.println(node.getRight().getLeft().getData()); + System.out.println(node.getRight().getLeft().getLeft().getData()); + System.out.println(node.getRight().getLeft().getRight().getData()); + } + @Test + public void testArrayList(){ + ArrayList list =new ArrayList<>(); + list.add(1); + list.add(2); + list.add(3); + list.add(5); + Assert.assertEquals((Object) list.get(2),3); + Assert.assertEquals((Object) list.remove(2),3); + Assert.assertEquals((Object) list.get(2),5); + Iterator listIterator = list.iterator(); + while (listIterator.hasNext()){ + System.out.println(listIterator.next()); + } + } + @Test + public void testLinkedList(){ + LinkedList linkedList = new LinkedList<>(); + linkedList.add(1); + linkedList.add(2); + linkedList.add(5); + linkedList.addFirst(10); + linkedList.add(1,6); + // linkedList.removeLast(); + //linkedList.removeFirst(); + Iterator linkedListIterator = linkedList.iterator(); + while (linkedListIterator.hasNext()){ + System.out.println(linkedListIterator.next()); + } + System.out.println("----"); + System.out.println(linkedList.remove(0)); + System.out.println(linkedList.remove(2)); + //System.out.println(linkedList.get(3)); + //System.out.println(linkedList.get(4)); + } +} \ No newline at end of file diff --git "a/group10/1363044717/\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232(\346\225\260\346\215\256\347\273\223\346\236\204)/LinkedList.java" "b/group10/1363044717/\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232(\346\225\260\346\215\256\347\273\223\346\236\204)/LinkedList.java" new file mode 100644 index 0000000000..760fec91e9 --- /dev/null +++ "b/group10/1363044717/\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232(\346\225\260\346\215\256\347\273\223\346\236\204)/LinkedList.java" @@ -0,0 +1,165 @@ +package com.coding.basic; + +import jdk.nashorn.internal.ir.ReturnNode; + +import java.lang.reflect.Array; +import java.util.NoSuchElementException; + +public class LinkedList implements List { + + private Node head;//链表的头 + private Node tail;//链表的结尾 + private int size;//记录当前元素的size + + public void add(E e) { + Node node = new Node(e); + if (head == null) { + head = node; + } else { + tail.next = node; + } + tail = node; + tail.next = null; + size++; + } + + private void checkIndexRange(int index) { + if (index < 0 || index >= size) { + throw new IndexOutOfBoundsException(); + } + } + + public void add(int index, E e) { + checkIndexRange(index); + Node node = new Node(e); + Node temp = head; + Node temp2 = null; + for (int i = 0; i < index - 1; i++) { + temp = temp.next; + } + temp2 = temp.next; + temp.next = node; + node.next = temp2; + size++; + } + + @Override + public E get(int index) { + checkIndexRange(index); + Node temp = head; + + for (int i = 0; i < index; i++) { + temp = temp.next; + } + return (E) temp.data; + } + + @Override + public E remove(int index) { + checkIndexRange(index); + if (index == 0) { + E e = removeFirst(); + return e; + } + if (index == size) { + E e = removeLast(); + return e; + } + Node temp = head; + Node temp2 = null; + for (int i = 0; i < index - 1; i++) { + temp = temp.next; + } + E e = (E) temp.next.data; + temp2 = temp.next.next; + temp.next = null; + temp.next = temp2; + size--; + return e; + } + + public int size() { + return size; + } + + @Override + public boolean isEmpty() { + return size == 0; + } + + public void addFirst(E e) { + Node node = new Node(e); + node.next = head; + head = node; + size++; + } + + public void addLast(E e) { + this.add(e); + } + + public E removeFirst() { + E e = (E) head.data; + head = head.next; + size--; + return e; + } + + public E removeLast() { + Node temp = head; + for (int i = 0; i < size - 1; i++) { + temp = temp.next; + } + temp.next = null; + E e = (E) tail.data; + tail = temp; + size--; + return e; + } + + public Iterator iterator() { + return new LinkedListIterator(this); + } + + private static class Node { + E data; + Node next; + public Node(E e) { + this.data = e; + } + } + private class LinkedListIterator implements Iterator{ + + private Node head;//链表的头 + private Node tail;//链表的结尾 + private Node node;//当前遍历的node + private int index; + private int endIndex; + + public LinkedListIterator(LinkedList list){ + this.head=list.head; + this.tail=list.tail; + this.endIndex = list.size(); + node=head; + } + @Override + public boolean hasNext() { + return this.index < this.endIndex; + } + + @Override + public E next() { + if(!this.hasNext()) { + throw new NoSuchElementException();//没有元素了 + } else { + if(index == 0){ + node = head; + }else { + node = node.next; + } + index++; + return (E)node.data; + } + } + } +} diff --git "a/group10/1363044717/\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232(\346\225\260\346\215\256\347\273\223\346\236\204)/List.java" "b/group10/1363044717/\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232(\346\225\260\346\215\256\347\273\223\346\236\204)/List.java" new file mode 100644 index 0000000000..899ba2bd3e --- /dev/null +++ "b/group10/1363044717/\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232(\346\225\260\346\215\256\347\273\223\346\236\204)/List.java" @@ -0,0 +1,10 @@ +package com.coding.basic; + +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(); + boolean isEmpty(); +} diff --git "a/group10/1363044717/\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232(\346\225\260\346\215\256\347\273\223\346\236\204)/Queue.java" "b/group10/1363044717/\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232(\346\225\260\346\215\256\347\273\223\346\236\204)/Queue.java" new file mode 100644 index 0000000000..a8d5741846 --- /dev/null +++ "b/group10/1363044717/\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232(\346\225\260\346\215\256\347\273\223\346\236\204)/Queue.java" @@ -0,0 +1,30 @@ +package com.coding.basic; + +public class Queue { + + private LinkedList elementData = new LinkedList(); + + /** + * 进队列 + * @param o + */ + public void enQueue(E o){ + elementData.addLast(o);//添加到队尾 + } + + /** + * 出队列 + * @return + */ + public E deQueue(){ + return elementData.removeFirst();//移除队首 + } + + public boolean isEmpty(){ + return elementData.isEmpty(); + } + + public int size(){ + return elementData.size(); + } +} diff --git "a/group10/1363044717/\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232(\346\225\260\346\215\256\347\273\223\346\236\204)/Stack.java" "b/group10/1363044717/\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232(\346\225\260\346\215\256\347\273\223\346\236\204)/Stack.java" new file mode 100644 index 0000000000..de407c8548 --- /dev/null +++ "b/group10/1363044717/\347\254\254\344\270\200\346\254\241\344\275\234\344\270\232(\346\225\260\346\215\256\347\273\223\346\236\204)/Stack.java" @@ -0,0 +1,30 @@ +package com.coding.basic; + +public class Stack { + + private ArrayList elementData = new ArrayList(); + public void push(E o){ + elementData.add(o); + } + + /** + * 移除栈顶并返回他 + * @return + */ + public E pop(){ + return elementData.remove(elementData.size()-1); + } + /** + * 得到栈顶元素 + * @return + */ + public E peek(){ + return elementData.get(elementData.size()-1); + } + public boolean isEmpty(){ + return elementData.isEmpty(); + } + public int size(){ + return elementData.size(); + } +}