diff --git a/.gitignore b/.gitignore
index f08278d..3e9d3ed 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,3 @@
-*.pdf
\ No newline at end of file
+*.pdf
+/Code/.vs/
+/Code/x64/
\ No newline at end of file
diff --git a/Code/Code.sln b/Code/Code.sln
new file mode 100644
index 0000000..374aacd
--- /dev/null
+++ b/Code/Code.sln
@@ -0,0 +1,31 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 16
+VisualStudioVersion = 16.0.31205.134
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Code", "Code.vcxproj", "{82E38FA5-0EDC-487C-9E6F-8BFCE2D77216}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|x64 = Debug|x64
+ Debug|x86 = Debug|x86
+ Release|x64 = Release|x64
+ Release|x86 = Release|x86
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {82E38FA5-0EDC-487C-9E6F-8BFCE2D77216}.Debug|x64.ActiveCfg = Debug|x64
+ {82E38FA5-0EDC-487C-9E6F-8BFCE2D77216}.Debug|x64.Build.0 = Debug|x64
+ {82E38FA5-0EDC-487C-9E6F-8BFCE2D77216}.Debug|x86.ActiveCfg = Debug|Win32
+ {82E38FA5-0EDC-487C-9E6F-8BFCE2D77216}.Debug|x86.Build.0 = Debug|Win32
+ {82E38FA5-0EDC-487C-9E6F-8BFCE2D77216}.Release|x64.ActiveCfg = Release|x64
+ {82E38FA5-0EDC-487C-9E6F-8BFCE2D77216}.Release|x64.Build.0 = Release|x64
+ {82E38FA5-0EDC-487C-9E6F-8BFCE2D77216}.Release|x86.ActiveCfg = Release|Win32
+ {82E38FA5-0EDC-487C-9E6F-8BFCE2D77216}.Release|x86.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {5CDFB3EB-662D-456D-B96A-FC26C765E06A}
+ EndGlobalSection
+EndGlobal
diff --git a/Code/Code.vcxproj b/Code/Code.vcxproj
new file mode 100644
index 0000000..04d046a
--- /dev/null
+++ b/Code/Code.vcxproj
@@ -0,0 +1,148 @@
+
+
+
+
+ Debug
+ Win32
+
+
+ Release
+ Win32
+
+
+ Debug
+ x64
+
+
+ Release
+ x64
+
+
+
+ 16.0
+ Win32Proj
+ {82e38fa5-0edc-487c-9e6f-8bfce2d77216}
+ Code
+ 10.0
+
+
+
+ Application
+ true
+ v142
+ Unicode
+
+
+ Application
+ false
+ v142
+ true
+ Unicode
+
+
+ Application
+ true
+ v142
+ Unicode
+
+
+ Application
+ false
+ v142
+ true
+ Unicode
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ true
+
+
+ false
+
+
+ true
+
+
+ false
+
+
+
+ Level3
+ true
+ WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)
+ true
+
+
+ Console
+ true
+
+
+
+
+ Level3
+ true
+ true
+ true
+ WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)
+ true
+
+
+ Console
+ true
+ true
+ true
+
+
+
+
+ Level3
+ true
+ _DEBUG;_CONSOLE;%(PreprocessorDefinitions)
+ true
+
+
+ Console
+ true
+
+
+
+
+ Level3
+ true
+ true
+ true
+ NDEBUG;_CONSOLE;%(PreprocessorDefinitions)
+ true
+
+
+ Console
+ true
+ true
+ true
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Code/Code.vcxproj.filters b/Code/Code.vcxproj.filters
new file mode 100644
index 0000000..9a0b995
--- /dev/null
+++ b/Code/Code.vcxproj.filters
@@ -0,0 +1,25 @@
+
+
+
+
+ {4FC737F1-C7A5-4376-A066-2A32D752A2FF}
+ cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx
+
+
+ {93995380-89BD-4b04-88EB-625FBE52EBFB}
+ h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd
+
+
+ {67DA6AB6-F800-4c08-8B7A-83BB121AAD01}
+ rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms
+
+
+
+
+ 源文件
+
+
+ 头文件
+
+
+
\ No newline at end of file
diff --git a/Code/Code.vcxproj.user b/Code/Code.vcxproj.user
new file mode 100644
index 0000000..88a5509
--- /dev/null
+++ b/Code/Code.vcxproj.user
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/Code/head.h b/Code/head.h
new file mode 100644
index 0000000..091a856
--- /dev/null
+++ b/Code/head.h
@@ -0,0 +1,3 @@
+// ʼ
+#define MAXSIZE 25
+typedef int element_type;
\ No newline at end of file
diff --git a/Code/linear_list.c b/Code/linear_list.c
new file mode 100644
index 0000000..b76c4ac
--- /dev/null
+++ b/Code/linear_list.c
@@ -0,0 +1,76 @@
+#include
+#include
+#include "head.h"
+
+// 静态顺序表
+typedef struct {
+ element_type data[MAXSIZE];
+ int length;
+} StaticSequenceList;
+
+// 动态顺序表
+typedef struct {
+ element_type *data;
+ // 已分配的最大容量
+ int max_size;
+ int length;
+} DynamicSequenceList;
+
+// 初始化静态顺序表
+void InitStaticSequenceList(StaticSequenceList* list) {
+ // 初初始化静态顺序表长度为0
+ list->length = 0;
+}
+
+// 初始化动态顺序表
+void InitDynamicSequenceList(DynamicSequenceList* list) {
+ // 初初始化动态顺序表长度为0
+ list->length = 0;
+ // 申请一片连续的存储空间
+ list->data = (element_type*)malloc(MAXSIZE * sizeof(element_type));
+ list->max_size = MAXSIZE;
+}
+
+// 分配其他地址增长动态顺序表的数据空间长度
+void OtherIncreaseDynamicSequenceList(DynamicSequenceList* list, int len) {
+ // 申请一片连续的存储空间
+ int new_length = list->max_size + len;
+ element_type* space = (element_type*)realloc(list->data, new_length);
+ if (space != NULL) {
+ list->data = space;
+ list->max_size += len;
+ }
+ else {
+ list->max_size = 0;
+ list->length = 0;
+ printf("分配空间失败!");
+ }
+}
+
+// 重新分配地址增长动态顺序表的数据空间长度
+void ReIncreaseDynamicSequenceList(DynamicSequenceList* list, int len) {
+ // 申请一片连续的存储空间
+ int new_length = list->max_size + len;
+ element_type* space = (element_type*)realloc(list->data, new_length);
+ if (space != NULL) {
+ list->data = space;
+ list->max_size += len;
+ }
+ else {
+ list->max_size = 0;
+ list->length = 0;
+ printf("分配空间失败!");
+ }
+}
+
+int main()
+{
+ /*StaticSequenceList static_list;
+ InitStaticSequenceList(&static_list);*/
+ DynamicSequenceList dynamic_list;
+ InitDynamicSequenceList(&dynamic_list);
+ printf("%d\n", dynamic_list.max_size);
+ ReIncreaseDynamicSequenceList(&dynamic_list, 25);
+ printf("%d\n", dynamic_list.max_size);
+ return 0;
+}
\ No newline at end of file
diff --git a/Data-Structrue/introduction.md b/Data-Structrue/introduction.md
index 1fbb91f..d43ef1b 100644
--- a/Data-Structrue/introduction.md
+++ b/Data-Structrue/introduction.md
@@ -1,2 +1,115 @@
# 绪论
+## 基本概念
+
++ 数据项:一个数据元素由若干个数据项组成。
++ 数据元素:组成数据对象的基本单元。
++ 数据对象:性质相同的数据元素的集合。
+
+### 数据类型与抽象数据类型
+
+数据类型是一个值的集合和定义在此集合上的一组操作的总称。
+
++ 原子类型:其值不可再分的数据类型。
++ 结构类型:其值可以再分解为若干成分(分量)的数据类型。
+
+抽象数据类型ADT用数学化的语言定义数据的逻辑结构、定义运算。与具体的实现无关。
+
+## 数据结构三要素
+
++ 逻辑结构:元素之间的逻辑关系:线性结构、非线性结构 || 集合、线性结构、树结构、网状结构。
++ 存储结构:数据在计算机中的表示(映像),也称物理结构:顺序存储结构(顺序表)、链式存储结构(链表)、索引存储(索引表)、散列存储(散列表、哈希表)。
++ 数据运算:运算的定义是针对逻辑结构的,指出运算的功能;运算的实现是针对存储结构的,指出运算的具体操作步骤。
+
+## 算法
+
+程序=数据结构+算法。算法为了处理信息。
+
+### 算法的特性
+
++ 有穷性。
++ 确定性。
++ 可行性。
++ 输入。
++ 输出。
+
+### 好算法的特点
+
++ 正确性。
++ 可读性。
++ 健壮性。
++ 高效率与低储量需求。
+
+### 效率度量
+
+#### 时间复杂度
+
+时间开销$T(n)$与问题规模$n$的关系。
+
+当n规模够大时可以只考虑阶数高的部分。即$T(n)=O(T(n))$。
+
++ $T(n)=f(n)+g(n)=O(f(n))+O(g(n))=O(\max(f(n),g(n)))$。多项相加只保留最高阶的项,系数为1。
++ $T(n)=f(n)×g(n)=O(f(n))×O(g(n))=O(\max(f(n)×g(n)))$。多项相乘就都保留。
++ $O(1) 1) {
+ check(n-1)
+ }
+}
+check(n);
+```
+
+此时每一次的递归会使变量空间减去1,所以$S(n)=S((1+n)n/2)=O(n^2)$。
diff --git a/Data-Structrue/linear-list.md b/Data-Structrue/linear-list.md
new file mode 100644
index 0000000..8d6454c
--- /dev/null
+++ b/Data-Structrue/linear-list.md
@@ -0,0 +1,111 @@
+# 线性表
+
+## 基本概念
+
+### 逻辑结构
+
+是具有相同数据类型的n个数据元素的有限序列。n表示表长。
+
+$L=(a_1,a_2,\cdots,a_i,\cdots,a_n)$,其中$i$表示元素在线性表中的位序,从一开始。
+
++ 存在惟一的第一个元素。
++ 存在惟一的最后一个元素。
++ 除第一个元素之外,每个元素均只有一个直接前驱。
++ 除最后一个元素之外,每个元素均只有一个直接后继。
+
+### 物理结构
+
++ 顺序存储结构:顺序表。
++ 链式存储结构:链表。
+
+## 顺序表
+
+把逻辑上相邻的元素存储在物理位置上也相邻的存储单元中,元素之间的关系由存储单元的邻接关系来实现。
+
+### 定义
+
+使用C语言的结构体定义顺序表,使用`typedef`定义一个ElemType表示数据基本类型,并定义最大长度MaxSize:
+
+可以使用静态分配空间:
+
+```c
+// 静态顺序表
+typedef struct {
+ ElemType data[MaxSize];
+ int length;
+} StaticSequenceList;
+```
+
+也可以使用动态分配空间:
+
+```c
+// 动态顺序表
+typedef struct {
+ element_type *data;
+ // 已分配的最大容量
+ int max_size;
+ int length;
+} DynamicSequenceList;
+```
+
+max_size表示动态顺序表当前可以使用的最大存储空间。
+
+### 特点
+
+1. 随机访问,可以在$O(1)$时间内找到对应元素。
+2. 存储密度高,只用存储数据。
+3. 拓展容量不方便。
+4. 插入删除操作不方便。
+
+### 操作
+
+#### 初始化
+
+```c
+// 初始化静态顺序表
+void InitStaticSequenceList(StaticSequenceList* list) {
+ // 初初始化静态顺序表长度为0
+ list->length = 0;
+}
+```
+
+静态顺序表因为数组部分在创建时就已经设置好了,所以初始化就直接设置数据长度就可以了。
+
+```c
+// 初始化动态顺序表
+void InitDynamicSequenceList(DynamicSequenceList* list) {
+ // 初初始化动态顺序表长度为0
+ list->length = 0;
+ // 申请一片连续的存储空间
+ list->data = (element_type*)malloc(MAXSIZE * sizeof(element_type));
+ list->max_size = MAXSIZE;
+}
+```
+
+动态顺序表不仅需要设置数据长度与最大长度,还得分配数组初始空间。
+
+#### 增长数据空间长度
+
+只有动态顺序表才能增加。
+
+```c
+// 增长动态顺序表的数据空间长度
+void IncreaseDynamicSequenceList(DynamicSequenceList* list, int len) {
+ // 申请一片连续的存储空间
+ int new_length = list->max_size + len;
+ element_type* space = (element_type*)realloc(list->data, new_length);
+ if (space != NULL) {
+ list->data = space;
+ list->max_size += len;
+ }
+ else {
+ list->max_size = 0;
+ list->length = 0;
+ printf("分配空间失败!");
+ }
+}
+```
+
+#### 插入
+
+插入时间复杂度为:$T(n)=O(n)$,空间复杂度为$S(n)=O(1)$。