Skip to content

Commit 797ed57

Browse files
committed
Java
1 parent 2f1e9e0 commit 797ed57

18 files changed

+816
-10
lines changed

docs/DataStructure/1_绪论.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,12 @@
4343

4444
与线性结构不同,非线性结构中结点存在着一对多的关系,它又可以细分为树形结构和图形结构。
4545

46+
47+
48+
<div align="center"><img src="https://gitee.com/duhouan/ImagePro/raw/master/java-notes/dataStructure/ds_1.png" width="700px"/></div>
49+
50+
51+
4652
### 7. 数据的物理结构
4753

4854
也就是存储结构,是数据的逻辑结构在计算机中的表示(又称映像)。它包含数据元素的表示和关系的表示。当数据元素时由若干数据项构成的时候,数据项的表示称为数据域。

docs/DataStructure/2_线性表.md

Lines changed: 164 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,164 @@
1-
{\rtf1}
1+
# 线性表
2+
3+
线性表是具有**相同特性**数据元素的一个**有限**序列。该序列中所含元素的个数叫做线性表的长度,用 n(n>=0)表示。其中,n 可以等于零,表示线性表是一个空表,空表也可以是一个线性表。
4+
5+
注意:线性表是**逻辑概念**,表示元素之间一对一的相邻关系。
6+
7+
## 线性表的顺序表示
8+
9+
线性表的顺序存储称为**顺序表**
10+
11+
用一组地址连续的存储单元,依次存储线性表中数据元素,从使得逻辑上相邻的两个元素在物理位置上也相邻。
12+
13+
注意:线性表中元素的位序是从 1 开始的,而数组中元素的下标是从 0 开始的。
14+
15+
### 顺序表的结构定义
16+
17+
```java
18+
public class SeqList {
19+
20+
private int[] data;
21+
private int size;
22+
23+
public SeqList(int capacity){
24+
data=new int[capacity+1];
25+
//注意:线性表中元素的位序是从 1 开始的,而数组中元素的下标是从 0 开始的。
26+
size=0;
27+
}
28+
29+
}
30+
```
31+
32+
33+
34+
### 顺序表的算法操作
35+
36+
#### 1. 插入操作
37+
38+
- 代码
39+
40+
```java
41+
//在 index 位置插入元素
42+
public void add(int index,int e){
43+
if(size==data.length-1){ //注意:数组 0 位置不放元素
44+
throw new IllegalArgumentException("Add failed,array is full");
45+
}
46+
if(index<1 || index>size+1){
47+
throw new IllegalArgumentException("Add Failed,1<=index<=size is required");
48+
}
49+
//index位置后的元素向右移动
50+
for(int i=size;i>index;i--){
51+
data[i]=data[i-1]; //元素右移语句
52+
}
53+
data[index]=e;
54+
size++;
55+
}
56+
```
57+
58+
- 复杂度分析
59+
60+
- 最好情况:在表尾插入元素,元素右移语句将不执行,时间复杂度 O(1)
61+
62+
- 最坏情况:在表头插入元素,元素右移语句执行 n 次,时间复杂度 O(n)
63+
64+
- 平均情况:在 i 位置插入一个节点的概率为 1/(n+1)(因为有 n+1 个位置可以随机插入),则在长度为 n 的线性表中插入一个节点时所需移动节点的平均次数为
65+
$$
66+
\sum_{i=1}^{n+1}\frac{1}{n+1}(n-i+1)=\frac{1}{n+1}\sum_{i=1}^{n+1}(n-i+1)=\frac{n}{2}
67+
$$
68+
所以,时间复杂度是 O(n)。
69+
70+
71+
#### 2. 删除操作
72+
73+
- 代码
74+
75+
```java
76+
//删除指定位置元素
77+
public int remove(int index){
78+
if(size==0){
79+
throw new IllegalArgumentException("Remove failed,array is empty");
80+
}
81+
if(index<1 || index>size){
82+
throw new IllegalArgumentException("Remove failed,index is illegal");
83+
}
84+
int ret=data[index];
85+
for(int i=index+1;i<size;i++){
86+
data[i-1]=data[i];
87+
}
88+
size--;
89+
return ret;
90+
}
91+
```
92+
93+
- 复杂度分析
94+
95+
- 最好情况:删除表尾元素,无需移动元素,时间复杂度为 O(1)
96+
97+
- 最坏情况:删除表头元素,需要移动一个元素外的所有元素,时间复杂度为 O(n)
98+
99+
- 平均情况:在 i 位置删除一个节点的概率为 1/n,则在长度为 n 的线性表中删除一个节点时所需移动节点的平均次数为
100+
$$
101+
\sum_{i=1}^{n}\frac{1}{n}(n-i)=\frac{1}{n}\sum_{i=1}^{n}(n-i)=\frac{n-1}{2}
102+
$$
103+
所以,时间复杂度是 O(n)。
104+
105+
106+
107+
#### 3. 按值查找
108+
109+
- 代码
110+
111+
```java
112+
//查找数组中元素e所在位置
113+
public int find(int e){
114+
for(int i=0;i<size;i++){
115+
if(data[i]==e){
116+
return i;
117+
}
118+
}
119+
return -1;
120+
}
121+
```
122+
123+
- 时间复杂度
124+
125+
- 最好情况:查找的元素就在表头,仅需比较一次,时间复杂度为 O(1)。
126+
127+
- 最坏情况:查找的元素在表尾(或者元素不存在),需要比较 n 次数,时间复杂度为 O(n)。
128+
129+
- 平均情况:查询元素在 i 位置上的概率为 1/n,则在长度为 n 的线性表中查找值为 e 的元素所需比较的平均次数为
130+
$$
131+
\sum_{i=1}^{n}\frac{1}{n}i=\frac{1}{n}\sum_{i=1}^{n}i=\frac{n+1}{2}
132+
$$
133+
所以,时间复杂度为 O(n)。
134+
135+
136+
137+
## 线性表的链式表示
138+
139+
线性表的链式存储称为**单链表**
140+
141+
单链表是指通过一组任意的存储单元来存储线性表中的数据,为了建立数据元素之间的线性关系,对每个链表节点,除了存放元素的自身信息外,还需要存放一个指向其后继的指针。
142+
143+
### 单链表的结构定义
144+
145+
```java
146+
class Node{
147+
int e;
148+
Node next;
149+
}
150+
```
151+
152+
153+
154+
### 单链表的算法操作
155+
156+
157+
158+
159+
160+
<div align="center"><img src="https://gitee.com/duhouan/ImagePro/raw/master/java-notes/dataStructure/ds_2.png" width="500px"/></div>
161+
162+
163+
164+
<div align="center"><img src="https://gitee.com/duhouan/ImagePro/raw/master/java-notes/dataStructure/ds_3.png" width="500px"/></div>
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
1-
{\rtf1}
1+
# 栈和队列
2+

docs/DataStructure/4_串.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
#
2+
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{\rtf1}
1+
# 树和二叉树

docs/DataStructure/6_图.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{\rtf1}
1+
#

docs/DataStructure/7_查找.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
1-
{\rtf1}
1+
# 查找
2+

docs/DataStructure/8_排序.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
1-
{\rtf1}
1+
# 排序
2+

docs/JavaIO/07JavaIO方式.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,10 @@
99

1010
Java IO 的方式通常分为阻塞的 BIO(Blocking IO)、同步非阻塞的 NIO(New IO) 和异步非阻塞的 AIO(Asynchronous IO)。
1111

12+
JDK1.4 之前只支持 BIO,JDK1.4 以后开始支持 NIO,JDK1.7 开始支持 AIO。
13+
14+
15+
1216
### 1. BIO
1317

1418
BIO 是同步阻塞的。服务器的模式为**一个连接一个线程**

docs/Linux/1_Linux概论.md

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
# Linux 概论
2+
3+
Linux 是一套作业系统,不是应用程序。
4+
5+
Linux 有如下优点:
6+
7+
- 免费
8+
9+
- 开源,可被定制
10+
11+
- 很多软件原生是在 Linux 下运行的,庞大的社区支持,生态环境好
12+
13+
- 相对安全稳定
14+
15+
Linux 是基于 UNIX 的概念而开发出来的操作系统,因此,Linux 具有与 UNIX 系统相似的程序接口和操作方式,当然也继承了 UNIX 稳定并且有效率的特点。安装 Linux 的主机连续运行一年以上而不曾宕机、不必关机是很平常的事。
16+
17+
- 多任务、多用户
18+
19+
与 Windows 系统不同,Linux 主机上可以同时允许多人上线来工作,并且资源的分配较为公平。可在一部 Linux 主机上规划不同等级的用户,而且每个用户登录系统时的工作环境都可以不同,此外,还允许不同的用户在同一时刻登录主机,以同时使用主机的资源。
20+
21+
Linux 还存在一些不足:
22+
23+
- 没有特定的厂商支持
24+
- 游戏的支持度不足
25+
- 专业软件的支持度不足

0 commit comments

Comments
 (0)