From a334fa8d1402835ae518845daeaabc1d02a637e9 Mon Sep 17 00:00:00 2001
From: yinwenbing <312816708@qq.com>
Date: Sat, 25 Feb 2017 22:55:04 +0800
Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E7=AC=AC=E4=B8=80=E6=AC=A1?=
=?UTF-8?q?=E4=BD=9C=E4=B8=9A?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
...64\347\232\204\345\205\263\347\263\273.md" | 29 ++++
group04/312816708/coding/coding01/.gitignore | 7 +
group04/312816708/coding/coding01/pom.xml | 12 ++
.../com/kevin/coding01/basic/MyArrayList.java | 117 +++++++++++++++
.../kevin/coding01/basic/MyLinkedList.java | 135 ++++++++++++++++++
.../java/com/kevin/coding01/basic/MyList.java | 17 +++
.../com/kevin/coding01/basic/MyQueue.java | 35 +++++
.../com/kevin/coding01/basic/MyStack.java | 67 +++++++++
8 files changed, 419 insertions(+)
create mode 100644 "group04/312816708/blog/blog01/CPU\343\200\201\345\206\205\345\255\230\343\200\201\347\241\254\347\233\230\343\200\201\346\214\207\344\273\244\344\271\213\351\227\264\347\232\204\345\205\263\347\263\273.md"
create mode 100644 group04/312816708/coding/coding01/.gitignore
create mode 100644 group04/312816708/coding/coding01/pom.xml
create mode 100644 group04/312816708/coding/coding01/src/main/java/com/kevin/coding01/basic/MyArrayList.java
create mode 100644 group04/312816708/coding/coding01/src/main/java/com/kevin/coding01/basic/MyLinkedList.java
create mode 100644 group04/312816708/coding/coding01/src/main/java/com/kevin/coding01/basic/MyList.java
create mode 100644 group04/312816708/coding/coding01/src/main/java/com/kevin/coding01/basic/MyQueue.java
create mode 100644 group04/312816708/coding/coding01/src/main/java/com/kevin/coding01/basic/MyStack.java
diff --git "a/group04/312816708/blog/blog01/CPU\343\200\201\345\206\205\345\255\230\343\200\201\347\241\254\347\233\230\343\200\201\346\214\207\344\273\244\344\271\213\351\227\264\347\232\204\345\205\263\347\263\273.md" "b/group04/312816708/blog/blog01/CPU\343\200\201\345\206\205\345\255\230\343\200\201\347\241\254\347\233\230\343\200\201\346\214\207\344\273\244\344\271\213\351\227\264\347\232\204\345\205\263\347\263\273.md"
new file mode 100644
index 0000000000..68542a9e7b
--- /dev/null
+++ "b/group04/312816708/blog/blog01/CPU\343\200\201\345\206\205\345\255\230\343\200\201\347\241\254\347\233\230\343\200\201\346\214\207\344\273\244\344\271\213\351\227\264\347\232\204\345\205\263\347\263\273.md"
@@ -0,0 +1,29 @@
+# CPU、内存、硬盘、指令之间的关系
+
+## 1、简介
+
+### 1.1 CPU
+> CPU,中央处理器,是一个超大规模的集成电路,是一台计算机的运算核心和控制核心。它的主要功能是解释计算机指令以及处理计算机软件中的数据。
+
+### 1.2 内存
+> 内存是计算机中重要的部件之一,它是与CPU沟通的桥梁。计算机中所有的程序都是在内存中运行的。其作用是用于暂时存放CPU中的运算数据,以及与硬盘等外部存储器交换数据。
+
+### 1.3 硬盘
+> 硬盘是计算机主要的存储媒介之一。硬盘分为固态硬盘(SSD 盘,新式硬盘)、机械硬盘(HDD 硬盘)、混合硬盘(HHD 一块基于传统机械硬盘诞生出来的新硬盘)。
+
+### 1.4 指令
+> 指挥计算机工作的指示命令。程序是一系列按一定顺序排列的,执行程序的过程就是计算机的工作过程。
+
+## 2、关系
+计算机在运行时,**CPU** 从**内存** 中获取第一条 **指令** ,然后内存再从硬盘中读取所需的数据。然后CPU再取出第二条指令,一直到指令结束。
+
+## 3、参考资料
+[中央处理器 —— 百度百科](http://baike.baidu.com/item/%E4%B8%AD%E5%A4%AE%E5%A4%84%E7%90%86%E5%99%A8/284033?sefr=cr&fromtitle=CPU&fromid=120556)
+
+[内存 —— 百度百科](http://baike.baidu.com/item/%E5%86%85%E5%AD%98?sefr=enterbtn)
+
+[硬盘 —— 百度百科](http://baike.baidu.com/item/%E7%A1%AC%E7%9B%98?sefr=enterbtn)
+
+[计算机指令 —— 百度百科](http://baike.baidu.com/item/%E8%AE%A1%E7%AE%97%E6%9C%BA%E6%8C%87%E4%BB%A4)
+
+
diff --git a/group04/312816708/coding/coding01/.gitignore b/group04/312816708/coding/coding01/.gitignore
new file mode 100644
index 0000000000..22cb2e1fb7
--- /dev/null
+++ b/group04/312816708/coding/coding01/.gitignore
@@ -0,0 +1,7 @@
+# IntelliJ IDEA
+
+target/
+*.iml
+*.ipr
+*.iws
+.idea/
\ No newline at end of file
diff --git a/group04/312816708/coding/coding01/pom.xml b/group04/312816708/coding/coding01/pom.xml
new file mode 100644
index 0000000000..9f29c935ae
--- /dev/null
+++ b/group04/312816708/coding/coding01/pom.xml
@@ -0,0 +1,12 @@
+
+
+ 4.0.0
+
+ com.kevin
+ coding01
+ 1.0-SNAPSHOT
+
+
+
\ No newline at end of file
diff --git a/group04/312816708/coding/coding01/src/main/java/com/kevin/coding01/basic/MyArrayList.java b/group04/312816708/coding/coding01/src/main/java/com/kevin/coding01/basic/MyArrayList.java
new file mode 100644
index 0000000000..5e4c1bdd2e
--- /dev/null
+++ b/group04/312816708/coding/coding01/src/main/java/com/kevin/coding01/basic/MyArrayList.java
@@ -0,0 +1,117 @@
+package com.kevin.coding01.basic;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+
+/**
+ * Created by YinWenBing on 2017/2/25.
+ */
+public class MyArrayList implements MyList {
+ private int size = 0;
+ private Object[] elementData = new Object[10];
+
+ /**
+ * 添加
+ * 判断数组空间是否足够,不够则扩容,将元素放在数组末尾
+ *
+ * @param e
+ */
+ public void add(E e) {
+ isGrow(size + 1);//判断是否需要扩容
+ elementData[size++] = e;
+ }
+
+ /**
+ * 是否需要扩容
+ *
+ * @param size
+ */
+ private void isGrow(int size) {
+ if (size > elementData.length) {
+ grow(size);
+ }
+ }
+
+ /**
+ * 扩容
+ *
+ * @param minCapacity
+ */
+ private void grow(int minCapacity) {
+ int oldCapacity = elementData.length;
+ int newCapacity = oldCapacity + (oldCapacity >> 1);//>>将oldCapacity向右移一位,右移一位代表除2,右移n位代表除以2的n次方。左移则是乘
+ if (newCapacity - minCapacity < 0) {
+ newCapacity = minCapacity;
+ } else if (newCapacity - (Integer.MAX_VALUE - 8) > 0) {
+ newCapacity = hugeCapacity(minCapacity);
+ }
+ elementData = Arrays.copyOf(elementData, newCapacity);
+ }
+
+ private int hugeCapacity(int minCapacity) {
+ if (minCapacity < 0) {
+ throw new OutOfMemoryError();
+ }
+ return (minCapacity > (Integer.MAX_VALUE)) ? Integer.MAX_VALUE : Integer.MAX_VALUE - 8;
+ }
+
+ /**
+ * 添加指定索引的元素
+ * 判断索引是否小于0或大于size
+ *
+ * @param index
+ * @param e
+ */
+ public void add(int index, E e) {
+ if (index < 0 || index > size) {
+ throw new IndexOutOfBoundsException("Index:" + index + ", Size:" + size);
+ }
+ isGrow(index);
+ System.arraycopy(elementData, index, elementData, index + 1, size - index);
+ elementData[index] = e;
+ size++;
+ }
+
+ /**
+ * 根据索引获取数组中的元素
+ *
+ * @param index
+ * @return
+ */
+ public E get(int index) {
+ if (index < 0 || index > size) {
+ throw new IndexOutOfBoundsException("Index:" + index + ", Size:" + size);
+ }
+ return (E) elementData[index];
+ }
+
+ /**
+ * 根据索引移除数组中的元素,如果移除中间的元素,后面的元素要往前移
+ *
+ * @param index
+ * @return
+ */
+ public E remove(int index) {
+ if (index < 0 || index > size) {
+ throw new IndexOutOfBoundsException("Index:" + index + ", Size:" + size);
+ }
+ E oldValue = (E) elementData[index];
+
+ int numMoved = size - index - 1;
+ if (numMoved > 0) {
+ System.arraycopy(elementData, index + 1, elementData, index, numMoved);
+ elementData[--size] = null;
+ size--;
+ }
+ return oldValue;
+ }
+
+ /**
+ * 获取数组中存放值得数量
+ *
+ * @return
+ */
+ public int size() {
+ return size;
+ }
+}
diff --git a/group04/312816708/coding/coding01/src/main/java/com/kevin/coding01/basic/MyLinkedList.java b/group04/312816708/coding/coding01/src/main/java/com/kevin/coding01/basic/MyLinkedList.java
new file mode 100644
index 0000000000..4aa55cb9b9
--- /dev/null
+++ b/group04/312816708/coding/coding01/src/main/java/com/kevin/coding01/basic/MyLinkedList.java
@@ -0,0 +1,135 @@
+package com.kevin.coding01.basic;
+
+/**
+ * Created by YinWenBing on 2017/2/25.
+ */
+public class MyLinkedList implements MyList {
+ private Node first;//头节点
+ private int size = 0;//默认大小为0
+
+ public void add(E e) {
+ if (size == 0) {
+ first = new Node();
+ first.element = e;
+ size++;
+ } else {
+ Node head = first;
+ for (int i = 0; i < size - 1; i++) {
+ head = head.next;
+ }
+
+ Node add = new Node();
+ add.element = e;
+ head.next = add;
+ size++;
+ }
+ }
+
+
+ public void add(int index, E e) {
+ if (index < 0 || index > size) {
+ throw new IndexOutOfBoundsException("index:" + index + ";size:" + size);
+ }
+ Node prev = getNode(index - 1);//当前索引指向的节点的上一节点
+ Node next = getNode(index);//当前索引指向的节点成为添加节点的next
+ Node add = new Node();
+ add.element = e;
+ prev.next = add;
+ add.next = next;
+ size++;
+ }
+
+ private Node getNode(int index) {
+ Node node = first;
+
+ for (int i = 0; i < index; i++) {
+ node = first.next;
+ }
+
+ return node;
+ }
+
+ public E get(int index) {
+ if (index < 0 || index > size - 1) {
+ throw new IndexOutOfBoundsException("index:" + index + ";size:" + size);
+ }
+
+ if (size == 0) {
+ return null;
+ }
+
+ return getNode(index).element;
+ }
+
+ public E remove(int index) {
+ if (index < 0 || index > size - 1) {
+ throw new IndexOutOfBoundsException("index:" + index + ";size:" + size);
+ }
+
+ Node prev = getNode(index - 1);
+ Node next = getNode(index + 1);
+
+ prev.next = next;
+ return getNode(index).element;
+ }
+
+ public int size() {
+ return size;
+ }
+
+ public void addFirst(E e) {
+ if (size == 0) {
+ first = new Node();
+ first.element = e;
+ size++;
+ } else {
+ Node add = new Node();
+ add.element = e;
+ add.next = first;
+ first = add;
+ size++;
+ }
+ }
+
+ public void addLast(E e) {
+ Node oldLast = getNode(size - 1);
+ Node add = new Node();
+ add.element = e;
+ oldLast.next = add;
+ size++;
+ }
+
+ public E removeFirst() {
+ Node oldFirst = first;
+ if (first.next != null) {
+ first = first.next;
+ size--;
+ return (E) oldFirst.element;
+ } else {//只有一个节点或者一个节点也没有
+ first = null;
+ return null;
+ }
+ }
+
+ public E removeLast() {
+ Node last = getNode(size - 1);
+ if (last != null) {
+ E element = (E) last.element;
+ Node newLast = getNode(size - 2);
+ newLast.next = null;
+ size--;
+ return element;
+ } else { //一个节点都不存在
+ return null;
+ }
+ }
+
+ /**
+ * 静态内部类
+ */
+ private static class Node {
+ E element;//节点数据
+ Node next;//下一节点
+ }
+
+}
diff --git a/group04/312816708/coding/coding01/src/main/java/com/kevin/coding01/basic/MyList.java b/group04/312816708/coding/coding01/src/main/java/com/kevin/coding01/basic/MyList.java
new file mode 100644
index 0000000000..15758bd837
--- /dev/null
+++ b/group04/312816708/coding/coding01/src/main/java/com/kevin/coding01/basic/MyList.java
@@ -0,0 +1,17 @@
+package com.kevin.coding01.basic;
+
+/**
+ * Created by YinWenBing on 2017/2/25.
+ */
+public interface MyList {
+
+ void add(E e);
+
+ void add(int index, E e);
+
+ E get(int index);
+
+ E remove(int index);
+
+ int size();
+}
diff --git a/group04/312816708/coding/coding01/src/main/java/com/kevin/coding01/basic/MyQueue.java b/group04/312816708/coding/coding01/src/main/java/com/kevin/coding01/basic/MyQueue.java
new file mode 100644
index 0000000000..feff484d76
--- /dev/null
+++ b/group04/312816708/coding/coding01/src/main/java/com/kevin/coding01/basic/MyQueue.java
@@ -0,0 +1,35 @@
+package com.kevin.coding01.basic;
+
+/**
+ * 队列:先进先出
+ * Created by YinWenBing on 2017/2/25.
+ */
+public class MyQueue {
+ private MyLinkedList elementDate = new MyLinkedList();
+
+ //入队列
+ public void enQueue(E e) {
+ elementDate.addLast(e);
+ }
+
+ //出队列
+ public E deQueue() {
+ return elementDate.removeFirst();
+ }
+
+ public boolean isEmpty() {
+ return elementDate.size() == 0 ? true : false;
+ }
+
+ public int size() {
+ return elementDate.size();
+ }
+
+ public static void main(String[] args) {
+ MyQueue queue = new MyQueue();
+ queue.enQueue(1);
+ queue.enQueue(2);
+
+ System.out.println(queue.deQueue());//1
+ }
+}
diff --git a/group04/312816708/coding/coding01/src/main/java/com/kevin/coding01/basic/MyStack.java b/group04/312816708/coding/coding01/src/main/java/com/kevin/coding01/basic/MyStack.java
new file mode 100644
index 0000000000..10d115d052
--- /dev/null
+++ b/group04/312816708/coding/coding01/src/main/java/com/kevin/coding01/basic/MyStack.java
@@ -0,0 +1,67 @@
+package com.kevin.coding01.basic;
+
+/**
+ * 栈 先进后出
+ * Created by YinWenBing on 2017/2/25.
+ */
+public class MyStack {
+ private MyArrayList elementData = new MyArrayList();
+
+ /**
+ * 往栈中添加元素
+ *
+ * @param e
+ */
+ public void push(E e) {
+ elementData.add(e);
+ }
+
+ /**
+ * 删除栈顶元素
+ *
+ * @return
+ */
+ public E pop() {
+ return elementData.remove(elementData.size() - 1);
+ }
+
+ /**
+ * 返回栈顶元素
+ *
+ * @return
+ */
+ public E peek() {
+ return elementData.get(elementData.size() - 1);
+ }
+
+ /**
+ * 是否为空
+ *
+ * @return
+ */
+ public boolean isEmpty() {
+ return elementData.size() == 0 ? true : false;
+ }
+
+ /**
+ * 返回栈中元素的数量
+ *
+ * @return
+ */
+ public int size() {
+ return elementData.size();
+ }
+
+
+ public static void main(String[] args) {
+ MyStack myStack = new MyStack();
+ myStack.push("A");
+ myStack.push("B");
+ myStack.push("C");
+
+ System.out.println(myStack.peek());
+ System.out.println(myStack.pop());
+ System.out.println(myStack.peek());
+ System.out.println(myStack.size());
+ }
+}