File tree Expand file tree Collapse file tree 7 files changed +44
-14
lines changed
group09/396077060/20170226 Expand file tree Collapse file tree 7 files changed +44
-14
lines changed Original file line number Diff line number Diff line change
1
+ 现代计算机基本都是冯·诺依曼结构,而冯·诺依曼结构中,最核心的思想便是“存储程序思想”,即:把运算程序存在机器的存储器中。
2
+
3
+ 在这种结构下,计算机被分成了五个部分:运算器、控制器、存储器、输入设备和输出设备。其中运算器和控制器构成了CPU的最重要部分。早期的冯·诺依曼结构型计算机是以运算器为核心的,譬如穿孔纸带机,运算核心通过从穿孔纸带中获取控制信息与运算信息完成指定的任务。在这种结构下,任何操作都要先与运算核心打交道。直到后来发明了内存,将大量的控制信息与运算信息存储到集成电路上,让计算机有了飞跃式的发展。内存拥有着大大超过于穿孔纸带的存储效率,于是,计算机的中心慢慢地从运算器转移到了存储器。在这种模式下,运算器、控制器、以至于输入输出设备,都是通过与内存交换信息得到很好的协作。
4
+
5
+ 存储器的读写效率确实高,但是它也有着单位造价高和相对容量较小的缺点,虽然现在SSD已经也很便宜了,但是对于以前的工程师来说,这都是不可想象的。于是乎,经过伟大的科学家们与工程师们的探索,他们发现了计算机程序运行过程中的“局部性原理”。“局部性原理”包括时间局部性和空间局部性,时间局部性是指:一段被访问过的程序在不久的时间内很有可能会被再次访问,空间局部性是指:一段被访问过的程序的临近的程序很可能马上被访问到。在有的资料中还提到了顺序局部性,它的意思是指:大部分程序是顺序执行的。在“局部性原理”的指导下,存储分级结构便出现了。存储器被分为若干个级别,越靠近CPU计算速度越快但存储容量小、造价高,如寄存器、Cache,越远离CPU,从内存到硬盘,计算速度越慢,但容量大,造价也越低。采用这种结构,最终使工程师们在性能与造价上得到了很好的平衡。
6
+
7
+ 再回到冯·诺依曼结构来,它的“把程序存储起来”到底是什么意思呢?好比我们照着菜谱学做菜,菜谱就是存储好的程序。我们要按照菜谱上的步骤,从选材、买菜、炒菜、出锅、上桌等一系列步骤来达到最终的目标。“存储程序”的思想就是要求把这些基本的步骤存到存储器中,然后当我们要实现某一运算的时候,就将实现这一运算所需要的操作调取出来。菜谱上的一条条步骤,就相当于计算机中的指令,程序指令指挥着计算机各个部件的运行。
8
+
9
+ 一个计算机指令包含操作码和操作数两个部分,顾名思义,操作码指示的是计算机需要做的操作,操作数则标识了某一次操作需要用到的数据。由于指令长度有限,操作数的最大寻址范围又远小于内存的寻址范围,于是操作数的获取方式又分为很多种,包括立即数寻址、直接寻址、间接寻址、相对寻址、基址寻址、变址寻址等。一条指令的执行主要包括如下几个步骤:取指令、分析指令、执行指令,有的指令还包括内存写回。
Original file line number Diff line number Diff line change 1
1
/**
2
2
* @Title: ArrayList.java
3
- * @Description: TODO(用一句话描述该文件做什么)
3
+ * @Description: ArrayList的实现
4
4
* @author glorychou
5
5
* @date 2017年2月22日 下午10:41:58
6
6
*/
@@ -33,8 +33,8 @@ public class ArrayList<E> implements List<E> {
33
33
* 构造初始元素数组
34
34
*/
35
35
public ArrayList () {
36
- this .elementData = CAPACITY_EMPTY_ELEMENTDATA ;
37
- }
36
+ this .elementData = CAPACITY_EMPTY_ELEMENTDATA ;
37
+ }
38
38
39
39
/***
40
40
*
@@ -158,7 +158,7 @@ private void grow(int minCapacity) {
158
158
int oldCapacity = elementData .length ;
159
159
// 容量增大一半
160
160
int newCapacity = oldCapacity + (oldCapacity >> 1 );
161
- elementData = Arrays .copyOf (elementData , newCapacity );
161
+ elementData = Arrays .copyOf (elementData , newCapacity );
162
162
}
163
163
164
164
/***
@@ -169,6 +169,6 @@ private void grow(int minCapacity) {
169
169
*/
170
170
private void rangeCheck (int index ) {
171
171
if (index < 0 || index > size )
172
- throw new IndexOutOfBoundsException ("Index: " + index + ", Size: " + size );
173
- }
172
+ throw new IndexOutOfBoundsException ("Index: " + index + ", Size: " + size );
173
+ }
174
174
}
Original file line number Diff line number Diff line change 1
1
/**
2
2
* @Title: BinaryTree.java
3
- * @Description: TODO(用一句话描述该文件做什么)
3
+ * @Description: 二叉排序树的实现
4
4
* @author glorychou
5
5
* @date 2017年2月25日 下午10:22:03
6
6
*/
7
7
package per .zyf .bds ;
8
8
9
- import java .util .Comparator ;
10
-
11
9
/**
12
10
* @author glorychou
13
11
*
@@ -52,6 +50,7 @@ public boolean add(E e) {
52
50
} else
53
51
root = newNode ;
54
52
53
+ size ++;
55
54
return true ;
56
55
}
57
56
@@ -66,6 +65,22 @@ public void inorderPrint(Node<E> e) {
66
65
inorderPrint (e .rightChild );
67
66
}
68
67
68
+ /**
69
+ * @Description: 判断树是否为空
70
+ * @return boolean 是否为空
71
+ */
72
+ public boolean isEmpty () {
73
+ return size > 0 ? false : true ;
74
+ }
75
+
76
+ /**
77
+ * @Description: 获取树的节点数
78
+ * @return int 树节点数
79
+ */
80
+ public int size () {
81
+ return size ;
82
+ }
83
+
69
84
// 树节点
70
85
private static class Node <E > {
71
86
E item ;
Original file line number Diff line number Diff line change 1
1
/**
2
2
* @Title: LinkedList.java
3
- * @Description: TODO(用一句话描述该文件做什么)
3
+ * @Description: 双向链表的实现
4
4
* @author glorychou
5
5
* @date 2017年2月24日 上午12:23:00
6
6
*/
@@ -81,17 +81,23 @@ public E remove(int index) {
81
81
rangeCheck (index );
82
82
83
83
Node <E > p = node (index );
84
+ E e = p .item ;
84
85
85
86
// 所需删除节点的前面有节点,则改变前一节点的下一跳
86
87
if (p .prev != null )
87
88
p .prev .next = p .next ;
88
89
// 所需删除节点的后面有节点,则改变后一节点的上一跳
89
90
if (p .next != null )
90
91
p .next .prev = p .prev ;
92
+
93
+ // 清空数据
94
+ p .prev = null ;
95
+ p .item = null ;
96
+ p .next = null ;
91
97
92
98
size --;
93
99
94
- return p . item ;
100
+ return e ;
95
101
}
96
102
97
103
/**
Original file line number Diff line number Diff line change 1
1
/**
2
2
* @Title: List.java
3
- * @Description: TODO(用一句话描述该文件做什么)
3
+ * @Description: List接口的实现
4
4
* @author glorychou
5
5
* @date 2017年2月24日 下午3:02:34
6
6
*/
Original file line number Diff line number Diff line change 1
1
/**
2
2
* @Title: Queue.java
3
- * @Description: TODO(用一句话描述该文件做什么)
3
+ * @Description: 队列的实现
4
4
* @author glorychou
5
5
* @date 2017年2月24日 下午3:10:08
6
6
*/
Original file line number Diff line number Diff line change 1
1
/**
2
2
* @Title: Stack.java
3
- * @Description: TODO(用一句话描述该文件做什么)
3
+ * @Description: 栈的实现
4
4
* @author glorychou
5
5
* @date 2017年2月24日 下午3:05:29
6
6
*/
You can’t perform that action at this time.
0 commit comments