
数据结构与算法
浙江大学数据结构与算法的实现
勤奋的Kevin
andriod开发工程师, 广州大学 本科
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
3-1-queue_队列_顺序存储
/* 队列 queue 顺序存储实现数组循环队列 (这里数组循环 front 指向的数组位置是空的, 下一位才是队首, 是为了区分队列是满还是空而这样处理) 创建空队列 判断是否队列为满 入队列 判断是否队列为空 出队列*/#include <iostream>#include <stdio.h>#include <stdlib.h>using namespace原创 2021-04-12 20:51:23 · 146 阅读 · 0 评论 -
3-2-queue_队列_链式存储
/* 队列 queue 链式存储实现 创建空队列 判断是否队列为满 入队列 判断是否队列为空 出队列*/#include <iostream>#include <stdio.h>#include <stdlib.h>using namespace std;typedef int ElementType;typedef struct Queue *PointQueue原创 2021-04-12 20:51:00 · 151 阅读 · 0 评论 -
6-4-ShellSort希尔排序
/* * 希尔排序 插入排序的升级 * * 增量 m=n/2 * 从数组[0]开始选取间隔为 m 的数 组成新数组 * 进行插入排序 * 从数组[1]开始选取间隔为 m 的数 组成新数组 * 进行插入排序 * 直到数组[x]已经在之前被选取 * 增量 m=(n/2)/2 * 从数组[0]开始选取间隔为 m 的数 组成新数组 * 进行插入排序 * 从数组[1]开始选取间隔为 m 的数 组成新数组 *原创 2021-04-12 20:49:38 · 131 阅读 · 0 评论 -
6-3-InsertionSort插入排序
/* * 插入排序(递减) * * 将数组[0]作为最开始的牌堆 * 选择数组[1]向前比较 * 遇到小于的牌就交换 * 直到遇到大于的牌就停止代表加入了牌堆 * 选择数组[2]向前比较 * 遇到小于的牌就交换 * 直到遇到大于的牌就停止代表加入了牌堆 * 选择数组[3]... */#include <stdio.h>void printNums(int* nums, int size);void InsertSort(int nums[]原创 2021-04-12 20:45:57 · 211 阅读 · 0 评论 -
6-2-HeapSort堆排序
/* * 堆排序 选择排序的升级 * * --------算法一 : * 把原有数组变成一个最小堆数组 * 申请一个 n 空间的新数组 * 从最小堆数组中取最小的数依次放入新数组[0][1][2]... * 然后将新数组的值复制到原有数组 * --------需要额外 O(N) 空间, T(N)=O(NLogN) * * --------算法二 : * 将原有数组变成一个最大堆 * 将数组[0]既数组最大的数交换到堆的末尾 数组[n] * 然后将 0到n-1的数组变成一个最大原创 2021-04-12 20:45:11 · 150 阅读 · 0 评论 -
6-1-SelectionSort选择排序
/*选择排序从数组[0]开始在 1-n 中互相比较选择一个最小的数 数组[min]将 数组[min]与数组[0]交换从数组[1]开始在 2-n 中互相比较选择一个最小的数 数组[min]将 数组[min]与数组[1]交换从数组[2]开始 …/#include <stdio.h>void printNums(int nums, int size);void SelectionSort(int nums[], int size);// 递减排序void Selecti原创 2021-04-12 20:44:29 · 430 阅读 · 0 评论 -
栈的顺序存储实现, 创建, 入栈, 出栈
/* 栈 stack 创建空栈 判断是否栈满 入栈 push 判断是否栈空 出栈 pop*/#include <iostream>#include <stdio.h>#include <stdlib.h>using namespace std;typedef int ElementType;typedef struct Stack *PointStack;ty原创 2021-04-05 01:34:26 · 476 阅读 · 0 评论 -
栈的链式存储实现
/* 栈 stack 创建空栈 入栈 push 出栈 pop*/#include <iostream>#include <stdio.h>#include <stdlib.h>using namespace std;typedef int ElementType;typedef struct StackNode *PointStack;typedef struct StackNode *Poi原创 2021-04-05 01:34:38 · 166 阅读 · 0 评论 -
链表的创建, 插入, 删除与查找
/* 链表 link list 创建链表 插入 删除 查找*/#include <iostream>#include <stdio.h>#include <stdlib.h>using namespace std;typedef struct LNode *List;typedef struct LNode *NodePoint;typedef int ElementType;原创 2021-04-04 22:32:40 · 243 阅读 · 0 评论 -
线性表的数组实现
/* 线性表 List List MakeEmpty() // 初始化空线性表 ElementType FindKth( int K, List L) // 查找位序为 K 的元素并返回 int Find( ElementType X, List L ) // 查找 X 第一次出现顺序 void Insert( ElementType X, int i, List L) // 在位序 i 前插入一个新元素 X void原创 2021-04-04 22:31:57 · 232 阅读 · 0 评论 -
哈希表原理
散列表定义 :每个 key 对应一个 value每次获取 key, 带入散列函数 h(key) 运算得到下标数组的相应的下标位置放 value装填因子 = 表中元素 / 表大小散列函数的构造方法 :(虽然函数要求输入的是数字, 但是 key实际可以为字符串, 因为字符串可以用二进制表示)直接定址法h(key) = a * key + b (a, b 为常数)除留余数法h(key) = key mod p (p 一般去素数)数字分析法h(key) = atoi(key+n原创 2021-04-04 22:26:49 · 291 阅读 · 0 评论 -
基于分离链接法的哈希表实现
/* 哈希表 基本操作 : - 创建空的哈希表 - 查找 key 对应的 value - 插入键值对 ( 分离链接法)*/#include <stdio.h>#include <stdlib.h>#include <string.h>#include <math.h>// hashTable 地址空间存放的结构体typedef struct Node* pointerNode;// hashTa原创 2021-04-04 22:25:13 · 121 阅读 · 0 评论 -
基于平方探测法的哈希表实现
/* 哈希表 基本操作 : - 创建空的哈希表 - 查找 key 对应的 value - 插入键值对 (平方探测法)*/#include <stdio.h>#include <stdlib.h>// hashTable 地址空间存放的结构体struct Cell;// hashTable 结构体typedef struct HashTable* pointerHashTable;// 操作函数 --------原创 2021-04-04 22:24:37 · 611 阅读 · 0 评论 -
哈夫曼树的创建和最小堆的建立,插入与取出
/* * 哈夫曼树 * 带权路径长度最小的二叉树的形态 * 树的带权路径长度 : 所有结点的(路径长度✖️结点的权值)的和 * * 构建哈夫曼树 : * 从规模为 n 的最小堆中取两次最小值, 然后把权值加起来, 结果放入最小堆 * 再次取两次最小值 ... * 由于每次都取两个放回去一个, 相当于每次取了一个 * 那就可以取 n-1 次, 因为第 n 次取的时候堆里面只有一个值了 * PS : 前面实现了最大堆, 现在先实现一下最小堆吧 */原创 2021-04-04 22:23:18 · 357 阅读 · 0 评论 -
最大堆的建立, 插入, 取出
/* * 最大堆 * 常使用完全二叉树表示, 用数组来存储 * 定义 : * 每个结点的值不小于子结点的值 * * 操作 : * 建立空的堆 * 利用已有的数组建立堆 * 插入 * 取出最大值 * */#include <stdio.h>#include <stdlib.h>#include <memory.h>#define ElementType int#define MaxData 1000typedef struc原创 2021-04-04 22:21:20 · 257 阅读 · 0 评论 -
二叉搜索树的查找与插入操作
/* * 二叉搜索树 * * 定义 : * 对于一颗二叉树其 * 非空左子树的所有键值小于其根结点的值 * 非空右子树的所有键值大于其根结点的值 * 左右子树都是二叉搜索树 * * 操作 : * 查找 * 递归查找 * 迭代查找 * 插入 * 递归插入 * 迭代插入 * * * * */#include <iostream>#include <stdio.h>#include原创 2021-04-04 22:19:17 · 242 阅读 · 2 评论 -
二叉树的各种创建与遍历
/* * 二叉树 BinaryTree * 创建树 : * 递归遍历生成 * 层序遍历生成 * 遍历 : * 递归遍历 : 前序、中序、后序 * 非递归遍历(堆栈) : 前序、中序、后序 * 层序遍历(队列) * */#include <iostream>#include <stdio.h>#include <stdlib.h>#include <sta原创 2021-04-04 22:17:24 · 267 阅读 · 0 评论 -
平衡二叉树
平衡二叉树与二叉搜索树不同之处是结点结构里多了平衡因子balance factor : 绝对值(左子树的高度-右子树的高度)定义要么是二叉搜索树要么是空树左右子树的高度差不超过一左右子树都是平衡二叉树高度的定义叶结点高度为 1树的高度等于左子树高度与右子树高度的最大值操作1. 插入平衡二叉树插入结点后可能会导致失衡此时就要调整离插入结点最近的失衡的树 , 失衡的四种情况有不同的应对方式左单旋 : 失衡的树的左子树的左子树比较高让 leftHeight-1, r原创 2021-02-23 17:17:08 · 224 阅读 · 0 评论