1
0
mirror of https://github.com/142vip/408CSFamily.git synced 2026-02-03 02:23:38 +08:00

feat: 更新文档

This commit is contained in:
最近在学桌球
2023-08-30 17:04:20 +08:00
parent 952946ad38
commit 6a1567cd2e
34 changed files with 64 additions and 431 deletions

View File

@@ -1,30 +1,22 @@
/*
* @Description: 折半插入算法【伪代码】
* @Version: Beta1.0
* @Author: 【B站&公众号】Rong姐姐好可爱
* @Date: 2020-04-15 18:27:59
* @LastEditors: 【B站&公众号】Rong姐姐好可爱
* @LastEditTime: 2021-03-27 12:19:13
*/
// 折半查找
void BinaryInsertSort(ElemType Arr[],int n){
int i,j,lowIndex,heightIndex,midIndex;
int i,j,lowIndex,highIndex,midIndex;
for(i=2;j<=n;i++){
// 将待排序的元素暂存在Arr[0]上
Arr[0]=Arr[i];
lowIndex=1; // 左侧子表 折半查找起始位置
heightIndex=i-1; // 左侧子表 折半查找结束位置
highIndex=i-1; // 左侧子表 折半查找结束位置
while(lowIndex<=heightIndex){
while(lowIndex<=highIndex){
// 左侧有序子表的中间位置角标
midIndex=(lowIndex+heightIndex)/2;
if(Arr[midIndex].key>Arr[0].key){
// 小于中间元素,插入位置在子表左侧
heightIndex=mid-1
highIndex=mid-1
}else{
// 大于或者等于中间元素,插入位置在子表右侧
lowIndex=midIndex+1;
@@ -33,11 +25,11 @@ void BinaryInsertSort(ElemType Arr[],int n){
// 跳出循环需要lowIndex>heightIndex说明待插入位置的角标在heightIndex之后为 heightIndex+1,此时需要将heightIndexi之间的所有元素后移
for(j=i-1;j>heightIndex;--j){
for(j=i-1;j>highIndex;--j){
Arr[j+1]=Arr[j]
}
// 后移完成后将元素Arr[0]赋值到位置hightIndex+1
Arr[heightIndex+1]=Arr[0]
// 后移完成后将元素Arr[0]赋值到位置highIndex+1
Arr[highIndex+1]=Arr[0]
}
}

View File

@@ -1,21 +1,11 @@
/*
* @Description: 折半插入排序【JavaScript版本】
* @Version: Beta1.0
* @Author: 【B站&公众号】Rong姐姐好可爱
* @Date: 2021-03-27 12:35:17
* @LastEditors: 【B站&公众号】Rong姐姐好可爱
* @LastEditTime: 2021-03-27 12:50:00
*/
/**
* 折半插入排序
* @param arr
* @param len
* 折半插入排序【JavaScript版本】
*/
function binaryInsertSort(arr, len) {
// 数组长度校验【非必须】
len = arr.length === len ? len : arr.length
len = arr.length === len
? len
: arr.length
for (let i = 1; i < len; i++) {
const temp = arr[i]

View File

@@ -1,13 +1,4 @@
/*
* @Description: 冒泡排序
* @Version: Beta1.0
* @Author: 【B站&公众号】Rong姐姐好可爱
* @Date: 2021-03-31 08:24:18
* @LastEditors: 【B站&公众号】Rong姐姐好可爱
* @LastEditTime: 2021-04-06 07:26:15
*/
// 冒泡排序
void BubbleSwapSort(ElemType A[], int n){
for(i=0;i<n-1;i++){
@@ -18,7 +9,7 @@ void BubbleSwapSort(ElemType A[], int n){
for(j=n-1;j>i;j--){
if(A[j-1].key>A[j].key){
// 将两个元素A[j-1]、A[j]进行交换,有多种方法
swap(A[j-1],A[j])
// 确认已发生交换
@@ -35,7 +26,7 @@ void BubbleSwapSort(ElemType A[], int n){
/**
* 加减法实现两个元素值互换
*
*
*/
void swap(int a, int b){
// 此时a为两值的和
@@ -48,8 +39,8 @@ void swap(int a, int b){
/**
* 临时变量实现两个元素值的互换
*
*/
*
*/
void swap(int a,int b){
int temp;
temp=a;

View File

@@ -1,13 +1,8 @@
/*
* @Description: 冒泡排序【JavaScript版本】
* @Version: Beta1.0
* @Author: 【B站&公众号】Rong姐姐好可爱
* @Date: 2021-04-06 07:26:59
* @LastEditors: 【B站&公众号】Rong姐姐好可爱
* @LastEditTime: 2021-04-06 08:01:19
/**
* 冒泡排序【JavaScript版本】
*/
function BubbleSort(arr, len) {
// 校正数组的长度
len = arr.length === len ? len : arr.length
@@ -38,20 +33,6 @@ function BubbleSort(arr, len) {
return arr
}
/**
* 加减法交换元素的值
* 注意JavaScript中使用需要考虑到作用域的问题
* @param a
* @param b
*/
function swap(a, b) {
a = a + b
b = a - b
a = a - b
}
const initArr = [1, 5, 8, 3, 2, 9, 16]
console.log(`冒泡排序前:${initArr}`)
const sortedArr = BubbleSort(initArr, 7)

View File

@@ -9,102 +9,81 @@
/*
* @Description: 单链表头插法
* @Version: Beta1.0
* @Author: 【B站&公众号】Rong姐姐好可爱
* @Date: 2020-03-04 23:38:04
* @LastEditors: 【B站&公众号】Rong姐姐好可爱
* @LastEditTime: 2020-03-04 23:39:16
*/
// 单链表头插法
LinkList CreateListWithStartNode(LinkList &L){
LNode *s;
int x;
L=(LinkList)malloc(sizeof(LNode)); // 创建头结点L
L->next=NULL; // 初始化空链表
// 控制台输入值
scanf("%d",&x);
// 输入9999 表示结束
while(x!==9999){
// 开辟新结点存储空间
s=(LNode*)malloc(sizeof(LNode));
s=(LNode*)malloc(sizeof(LNode));
// 结点数据域赋值
s->data=x;
s->data=x;
// 修改指针新结点插入表中【注意L->next为头结点的指针域】
s->next=L->next;
L->next=s;
scanf("%d",&x);
}
// 返回单链表
return L;
}
/*
* @Description: 单链表尾插法
* @Version: Beta1.0
* @Author: 【B站&公众号】Rong姐姐好可爱
* @Date: 2020-03-04 23:38:04
* @LastEditors: 【B站&公众号】Rong姐姐好可爱
* @LastEditTime: 2020-03-04 23:39:16
*/
// 单链表尾插法
LinkList CreateListWithEndNode(LinkList &L){
int x; // 输入结点值
L=(LinkList)malloc(sizeof(LNode));
LNode *s; // 新结点s
LNode *r=L; // r为尾指针
// 控制台输入值
scanf("%d",&x);
while(x!==9999){
// 开辟新结点存储空间
s=(LNode *)malloc(sizeof(LNode));
// 新结点s的数据域赋值为x
s->data=x;
// 单链表L的尾指针指向新的结点s
r->next=s;
// 指针r指向新的表尾结点
r=s;
scanf("%d",&x);
}
// 表尾指针置空【重要】
r->next=NULL;
// 返回单链表
return L;
}
/*
* @Description: 单链表按序号查找
* @Version: Beta1.0
* @Author: 【B站&公众号】Rong姐姐好可爱
* @Date: 2020-03-04 23:38:04
* @LastEditors: 【B站&公众号】Rong姐姐好可爱
* @LastEditTime: 2020-03-04 23:39:16
*/
// 单链表按序号查找
LNode *GetElem(LinkList L,int i){
int j=1; // 查询计数初始为1
LNode *p=L->next; // 单链表头结点指针赋值给指针p
// 第0个元素则指向头结点返回头结点
if(i==0){
// 头结点包含数据域和指针域
return L;
}
// 不等于0却小于1则i为负数无效直接返回NULL查询结果空
if(i<1){
return NULL;
@@ -112,7 +91,7 @@ LNode *GetElem(LinkList L,int i){
// p存在且计数没有走到初始i的位置
while(p&&j<i){
// 指针后移
p=p->next;
@@ -125,19 +104,12 @@ LNode *GetElem(LinkList L,int i){
// 跳出循环返回第i个结点的指针
return p;
}
/*
* @Description: 单链表按值查找
* @Version: Beta1.0
* @Author: 【B站&公众号】Rong姐姐好可爱
* @Date: 2020-03-04 23:38:04
* @LastEditors: 【B站&公众号】Rong姐姐好可爱
* @LastEditTime: 2020-03-04 23:39:16
*/
//单链表按值查找
LNode *LocateElem(LinkList L,ElemType e){
// 指针【哨兵】
LNode *p=L->next;
// 从第1个结点开始查找数据域(data)为e的结点
@@ -145,11 +117,11 @@ LNode *LocateElem(LinkList L,ElemType e){
// 无法匹配,指针后移
p=p->next;
}
// 注意p为NULL的时候说明单链表已经遍历的尾结点了跳出循环没有找到目标结点
// 查找到第1个匹配的结点跳出循环返回结点指针
return p;
//
//
}

View File

@@ -15,14 +15,14 @@ typedef struct LinkNode{
// 更为详细的定义
typedef struct StackNode
typedef struct StackNode
{
int data;//结点数据域
struct StackNode* next;//结点指针域
}StackNode,* Linktop;
//链栈的数据结构
typedef struct LinkStack
typedef struct LinkStack
{
Linktop top; //栈顶结点,定义了一个指向上个结构体的指针
int count;//元素个数
@@ -47,20 +47,18 @@ bool linkStackPushNode(LinkStack* linkStack,int e){
// 开辟栈结点元素内存控件
StackNode* node = (StackNode*)malloc(sizeof(StackNode));
// 新结点指针域指向链表,即栈顶指针位置,元素加入链表
node->next = linkStack->top;
node->next = linkStack->top;
// 新结点数据域赋值
node->data = e;
// 元素进栈,移动栈顶指针,指向新入栈的元素
linkStack->top = node;
// 链栈元素总数+1
linkStack->top = node;
// 链栈元素总数+1
linkStack->count++;
//链栈入栈成功返回true
return true;
}
/*
* @Description: 基于单链表链栈的出栈操作
* @Version: Beta1.0
@@ -81,10 +79,10 @@ bool linkStackPopNode(LinkStack* linkStack,int *e){
// 结点元素数据域赋值给变量e
*e = linkStack->data;
// 移动栈顶指向,栈顶指针指向待出栈结点的后继结点
linkStack->top = node->next;
linkStack->top = node->next;
// 变量e已被赋值释放链栈出栈元素的内存控件
free(node);
// 链栈元素个数-1
free(node);
// 链栈元素个数-1
linkStack->count--;
// 出栈成功返回true.
return true;

View File

@@ -9,7 +9,6 @@
void QuickSort(ElemType A[] , int low , int high){
// low > high 表角标越界low=high 子表只有一个元素,不需要进行快排,已经有序
if(low<high){
@@ -36,7 +35,7 @@ int Partition(ElemType A ,int low , int high){
while(low<high && A[high]>=pivot) --high
A[low]=A[high] // 比pivot小的都移到左表 注意--high 从后往前遍历
while(low<high && A[low]<=pivot ) ++low
while(low<high && A[low]<=pivot ) ++low
A[high]=A[low] // 比pivot大的都移到右表注意++low 从前往后遍历
}

View File

@@ -11,9 +11,10 @@
/**
*
* 数组的希尔排序
* - 返回已排序的数组,从小到大
* @param {Array} arr 待排序数组
* @param {int} len 数组长度,可校验
* @returns 返回已排序的数组,从小到大
* @returns
*/
function shellSort(arr, len) {
// 校对数组长度
@@ -60,37 +61,6 @@ function specialStraightInsertSort(arr, len, increment, groupIndex) {
}
/**
* 插入排序
* @param{Array} arr 待排序的数组
* @param{int} len 数组arr的长度可以用arr.length()计算得到
*/
function straightInsertSort(arr, len) {
// 重新确定数组长度
len = arr.length === len ? len : arr.length
// 从第二个元素开始循环共len-1次
for (let i = 1; i < len; i++) {
// 后面的额元素比前面的元素小,需要把前面大于哨兵元素有序序列,移动后面一位
if (arr[i] < arr[i - 1]) {
let j
// 哨兵元素
const temp = arr[i]
for (j = i - 1; arr[j] > temp; --j) {
// 后移
arr[j + 1] = arr[j]
}
// 跳出循环逻辑出现arr[j] > arr[j-1]
// 哨兵即待排序的
arr[j + 1] = temp
}
}
return arr
}
const dealArr = [5, 8, 2, 16, 3, 9, 1]
console.log('插入排序前:', dealArr)
const sortResult = shellSort(dealArr, 7)
@@ -99,8 +69,9 @@ console.log('插入排序后:', sortResult)
/**
* 简化的希尔排序
* - 返回已排序号的数组,从小到大
* @param {Array} arr
* @returns 返回已排序号的数组,从小到大
* @returns
*/
function shellSortBetter(arr) {
const len = arr.length
@@ -108,10 +79,10 @@ function shellSortBetter(arr) {
while (increment !== 0) {
for (let i = increment; i < len; i++) {
const temp = arr[i]
for (var j = i - increment; j >= 0 && temp < arr[j]; j -= increment) {
for (let j = i - increment; j >= 0 && temp < arr[j]; j -= increment) {
arr[j + increment] = arr[j]
}
arr[j + increment] = temp
arr[i + increment] = temp
}
increment = Math.floor(increment / 2)
}

View File

@@ -7,8 +7,6 @@
* @LastEditTime: 2021-02-23 07:48:26
*/
// 基础结构体
define MaxSize 50;
@@ -60,7 +58,7 @@ bool ListDelete(SqList &L, int i, ElemType &e){
if(L.length >= MaxSize){
return false;
}
// 引用变量e赋值
e=L.data[i-1]
@@ -70,7 +68,7 @@ bool ListDelete(SqList &L, int i, ElemType &e){
L.data[j-1]=L.data[j];
}
// 此时表L中的表尾元素和倒数第二个元素值一样将表的长度-1
// 此时表L中的表尾元素和倒数第二个元素值一样将表的长度-1
// 表长度减1
L.length--;

View File

@@ -1,15 +1,4 @@
<!--
* @Description:
* @Version: Beta1.0
* @Author: 【B站&公众号】Rong姐姐好可爱
* @Date: 2021-03-07 21:54:07
* @LastEditors: 【B站&公众号】Rong姐姐好可爱
* @LastEditTime: 2022-04-24 00:10:04
-->
## 基础概念
### 数据

View File

@@ -1,16 +1,4 @@
<!--
* @Description:
* @Version: Beta1.0
* @Author: 【B站&公众号】Rong姐姐好可爱
* @Date: 2021-03-07 21:55:06
* @LastEditors: 【B站&公众号】Rong姐姐好可爱
* @LastEditTime: 2022-04-24 00:08:22
-->
## 数据结构三要素
- 数据的逻辑结构

View File

@@ -1,15 +1,4 @@
<!--
* @Description:
* @Version: Beta1.0
* @Author: 【B站&公众号】Rong姐姐好可爱
* @Date: 2021-03-07 21:55:28
* @LastEditors: 【B站&公众号】Rong姐姐好可爱
* @LastEditTime: 2022-04-24 00:11:34
-->
## 算法和算法评价

View File

@@ -1,12 +1,2 @@
<!--
* @Description:
* @Version: Beta1.0
* @Author: 【B站&公众号】Rong姐姐好可爱
* @Date: 2022-04-24 08:09:44
* @LastEditors: 【B站&公众号】Rong姐姐好可爱
* @LastEditTime: 2022-04-24 09:04:02
-->
![](./basic_introduction.png)

View File

@@ -1,11 +1,3 @@
<!--
* @Description: 恶补算法
* @Version: Beta1.0
* @Author: 【B站&公众号】Rong姐姐好可爱
* @Date: 2022-04-19 08:56:55
* @LastEditors: 【B站&公众号】Rong姐姐好可爱
* @LastEditTime: 2022-04-19 08:56:56
-->
## 算法恶补

View File

@@ -1,15 +1,4 @@
<!--
* @Description:
* @Version: Beta1.0
* @Author: 【B站&公众号】Rong姐姐好可爱
* @Date: 2021-03-07 21:57:27
* @LastEditors: 【B站&公众号】Rong姐姐好可爱
* @LastEditTime: 2022-04-23 23:56:27
-->
# 线性表的基础概念和基本操作
> 强调线性表是一种逻辑结构,不是存储结构

View File

@@ -1,14 +1,4 @@
<!--
* @Description:
* @Version: Beta1.0
* @Author: 【B站&公众号】Rong姐姐好可爱
* @Date: 2021-03-07 21:57:52
* @LastEditors: 【B站&公众号】Rong姐姐好可爱
* @LastEditTime: 2022-04-24 00:15:49
-->
# 线性表的顺序表示

View File

@@ -1,16 +1,3 @@
<!--
* @Description:
* @Version: Beta1.0
* @Author: 【B站&公众号】Rong姐姐好可爱
* @Date: 2021-03-07 21:58:40
* @LastEditors: 【B站&公众号】Rong姐姐好可爱
* @LastEditTime: 2022-04-24 08:07:59
-->
# 线性表的链式表示
顺序表的插入、删除操作需要移动大量元素影响了运行效率虽然时间复杂度为O(1)的情况也存在)。

View File

@@ -1,16 +1,4 @@
<!--
* @Description:
* @Version: Beta1.0
* @Author: 【B站&公众号】Rong姐姐好可爱
* @Date: 2021-03-07 21:59:05
* @LastEditors: 【B站&公众号】Rong姐姐好可爱
* @LastEditTime: 2022-04-24 08:08:04
-->
# 双链表

View File

@@ -1,16 +1,4 @@
<!--
* @Description:
* @Version: Beta1.0
* @Author: 【B站&公众号】Rong姐姐好可爱
* @Date: 2021-03-07 21:59:27
* @LastEditors: 【B站&公众号】Rong姐姐好可爱
* @LastEditTime: 2022-04-24 08:08:08
-->
# 循环链表
- 循环单链表

View File

@@ -1,16 +1,4 @@
<!--
* @Description:
* @Version: Beta1.0
* @Author: 【B站&公众号】Rong姐姐好可爱
* @Date: 2021-03-07 21:59:47
* @LastEditors: 【B站&公众号】Rong姐姐好可爱
* @LastEditTime: 2022-04-24 08:08:15
-->
# 静态链表
> 借助数组来描述线性表的链式存储结构,结点元素同样存在数据域`data`和指针域`next`

View File

@@ -1,15 +1,3 @@
<!--
* @Description:
* @Version: Beta1.0
* @Author: 【B站&公众号】Rong姐姐好可爱
* @Date: 2021-03-07 22:00:10
* @LastEditors: 【B站&公众号】Rong姐姐好可爱
* @LastEditTime: 2022-04-24 08:08:20
-->
# 顺序表和链表的比较

View File

@@ -1,20 +1,5 @@
<!--
* @Description:
* @Version: Beta1.0
* @Author: 【B站&公众号】Rong姐姐好可爱
* @Date: 2021-03-07 22:00:36
* @LastEditors: 【B站&公众号】Rong姐姐好可爱
* @LastEditTime: 2022-04-24 00:18:14
-->
# 存储结构的选取
### 基于存储的考虑
- 对线性表的长度和存储规模难以估计时,不宜采用顺序表存储

View File

@@ -1,15 +1,4 @@
<!--
* @Description:
* @Version: Beta1.0
* @Author: 【B站&公众号】Rong姐姐好可爱
* @Date: 2021-03-07 22:00:53
* @LastEditors: 【B站&公众号】Rong姐姐好可爱
* @LastEditTime: 2022-04-24 00:17:56
-->
# 零碎知识补充
- 无论是链表的插入还是删除操作,必须保证不断链【重要】

View File

@@ -1,12 +1,3 @@
<!--
* @Description: 线性表
* @Version: Beta1.0
* @Author: 【B站&公众号】Rong姐姐好可爱
* @Date: 2022-04-24 08:10:42
* @LastEditors: 【B站&公众号】Rong姐姐好可爱
* @LastEditTime: 2022-04-24 09:03:44
-->
# 线性表
![](./线性表_水印.png)

View File

@@ -1,14 +1,3 @@
<!--
* @Description: 基本概念和基本操作
* @Version: Beta1.0
* @Author: 【B站&公众号】Rong姐姐好可爱
* @Date: 2020-01-11 23:56:02
* @LastEditors: 【B站&公众号】Rong姐姐好可爱
* @LastEditTime: 2021-03-12 00:02:55
-->
# 基本概念和基本操作
`栈` 只允许在一端进行插入或者删除操作的**线性表**`后进先出的线性表`

View File

@@ -1,14 +1,3 @@
<!--
* @Description: 栈的顺序存储结构
* @Version: Beta1.0
* @Author: 【B站&公众号】Rong姐姐好可爱
* @Date: 2020-01-15 16:57:37
* @LastEditors: 【B站&公众号】Rong姐姐好可爱
* @LastEditTime: 2021-03-12 08:05:50
-->
# 栈的顺序存储结构

View File

@@ -1,12 +1,3 @@
<!--
* @Description: 栈的链式存储结构
* @Version: Beta1.0
* @Author: 【B站&公众号】Rong姐姐好可爱
* @Date: 2020-03-12 08:15:40
* @LastEditors: 【B站&公众号】Rong姐姐好可爱
* @LastEditTime: 2021-03-13 17:05:26
-->
# 栈的链式存储结构

View File

@@ -1,12 +1,3 @@
<!--
* @Description: 队列的基本概念和基础操作
* @Version: Beta1.0
* @Author: 【B站&公众号】Rong姐姐好可爱
* @Date: 2020-03-18 06:15:40
* @LastEditors: 【B站&公众号】Rong姐姐好可爱
* @LastEditTime: 2021-03-14 11:08:32
-->
# 队列的基本概念和操作

View File

@@ -1,13 +1,3 @@
<!--
* @Description:
* @Version: Beta1.0
* @Author: 【B站&公众号】Rong姐姐好可爱
* @Date: 2020-03-1 07:23:48
* @LastEditors: 【B站&公众号】Rong姐姐好可爱
* @LastEditTime: 2021-03-18 23:51:35
-->
# 队列的顺序存储结构

View File

@@ -1,12 +1,3 @@
<!--
* @Description: 队列的链式存储结构
* @Version: Beta1.0
* @Author: 【B站&公众号】Rong姐姐好可爱
* @Date: 2021-03-19 08:22:39
* @LastEditors: 【B站&公众号】Rong姐姐好可爱
* @LastEditTime: 2021-03-20 16:10:16
-->
# 队列的链式存储结构

View File

@@ -1,14 +1,3 @@
<!--
* @Description: 栈和队列的应用
* @Version: Beta1.0
* @Author: 【B站&公众号】Rong姐姐好可爱
* @Date: 2021-03-14 21:48:49
* @LastEditors: 【B站&公众号】Rong姐姐好可爱
* @LastEditTime: 2021-03-14 21:49:02
-->
# 栈和队列的应用

View File

@@ -1,12 +1,3 @@
<!--
* @Description: 特殊矩阵的压缩存储
* @Version: Beta1.0
* @Author: 【B站&公众号】Rong姐姐好可爱
* @Date: 2021-03-20 16:18:51
* @LastEditors: 【B站&公众号】Rong姐姐好可爱
* @LastEditTime: 2021-03-20 17:04:44
-->
# 特殊矩阵的压缩存储

View File

@@ -1,13 +1,3 @@
<!--
* @Description: 数据结构-栈和队列
* @Version: Beta1.0
* @Author: 【B站&公众号】Rong姐姐好可爱
* @Date: 2021-03-22 08:02:29
* @LastEditors: 【B站&公众号】Rong姐姐好可爱
* @LastEditTime: 2021-03-22 08:02:43
-->
# 栈和队列
### 主要内容

View File

@@ -120,7 +120,6 @@ deploy_to_github(){
git config --list
# if you are deploying to https://<USERNAME>.github.io
# git push -f git@github.com:<USERNAME>/<USERNAME>.github.io.git master
# if you are deploying to https://<USERNAME>.github.io/<REPO>