
数据结构与算法
文章平均质量分 94
用C语言实现数据结构
geditzh
硕士毕业:哈尔滨工业大学深圳
工作地点:四川成都
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
C++标准模板库方法STL和函数使用说明
STL提供了一组表示容器,迭代器,函数对象和算法的模板。(1)容器是一个与数组类似的单元,用来存储值,且存储的值的类型相同;(2)迭代器能够用来遍历容器的对象,与能够遍历数组的指针类型;(3)函数对象和算法是完成特定任务的发给发,类似有排序查找等0.非成员函数的方法如果要为每一个容器类型,单独定义一个排序,查找的方法,则工作量会非常巨大,并且很多都是重复性的工作,因此STL定义了非成员函数,来完成通用的容器算法,如sort(),find(),swap().如果该容器类型vector.swap()存在,则原创 2021-04-11 20:08:23 · 449 阅读 · 0 评论 -
几种常用算法的整理和思考分析
一、暴力穷举法 穷举法简单粗暴,没有什么问题是搞不定的,只要你肯花时间。同时对于小数据量,穷举法就是最优秀的算法。二、贪心算法 利用局部最优解当作是问题的答案,只要找到符合条件的其中一种情况, 同时该解并不一定是全局最优解。每一步都将最好的结果保存起来,结合起来作为最终答案。三、分治算法 分治算法是将一个大问题,分解为若干的子问题,并且每个子问题之间没有交集,相互独立,所有子问题的答案组合起来构成大问题的解答。分支算法的实现方式采用递归实现。 例如二分查找、快速排序和归并排序算法: ht原创 2020-06-03 22:58:33 · 1350 阅读 · 0 评论 -
Bitmap C语言实现
什么是 BigMap 算法 所谓 BitMap 就是用一个 bit 位来标记某个元素对应的 value,而 key 即是这个元素。由于采用bit为单位来存储数据,因此在可以大大的节省存储空间。算法思想 32位机器上,一个整形,比如 int a; 在内存中占32bit,可以用对应的32个bit位来表示十进制的0-31个数,bitmap算法利用这种思想处理大量数据的排序与查询。优点:效率高,不许进行比较和移位占用内存少,比如N=10000000;只需占用内存为N/8 = 1250000Bytes原创 2020-05-17 19:41:43 · 3557 阅读 · 1 评论 -
常用排序算法整理(C语言python语言实现)
排序算法排序基本概念与分类 将数据集进行排序,如果数据本身不可以排序,可以使用hash函数建立一个顺序列,映射到整数集,然后再进行排序。内排序:待排序的数据全部存储在内存当中,很多排序算法都是内排序外排序:存储在磁带和磁盘的数据叫做外排序,归并排序是外排的基础。原地排序算法:不需要额外的空间,只需要几个额外的中间变量。时间复杂度:最优就是O(nlogn),最差就是O(n2),稳定性:相同的数据元素排序前后的位置是不改变,这样的叫做稳定排序,而前后顺序发生了改变就是不稳定的。适应性:如果一原创 2020-05-13 00:23:13 · 376 阅读 · 0 评论 -
查找,二分法,散列表,散列函数
6. 查找6.1 查找分类静态表查找:查询某个元素是否在查找表中,不需要进行插入和删除操作(利用顺序表和散列表效率高)动态表查找:查找时插入数据元素,查找时删除数据元素(利用二叉搜索树保存效率高)6.2 顺序表查找利用设置***“哨兵”***的方法...原创 2020-05-10 19:24:42 · 395 阅读 · 0 评论 -
图的深度优先和广度优先遍历
5. 图5.1 图的抽象数据结构ADT GraphData顶点的有穷非空集合和边的集合Operation CreateGraph(*G, V, VR) 按照顶点集和边弧集VR的定义构造图G DestoryGraph 图G存在则销毁 LocateVex(G, u) 若存在顶点u,则返回图中的位置 GetVex(G, u),返回顶点u的值 InsertVex(*G, v) 在图中新增顶点v DeleteVex(*G, v) 删除图中顶点v和相关弧 InsertArc(*G, v, w)原创 2020-05-10 19:11:14 · 571 阅读 · 0 评论 -
二叉树
4. 二叉树4.1 二叉树的遍历#include <stdio.h>#include <stdlib.h>#include <ctype.h>#define SUCCESS 0#define FAIL 1typedef char TElemType;typedef int Status;typedef struct TNode { TElemType data; struct TNode *left, *right;} BitNo原创 2020-05-10 19:04:25 · 138 阅读 · 0 评论 -
字符串
3.字符串的暴力匹配#include <stdio.h>#include <stdlib.h>#include <string.h>int cpm1(char *s1, char *s2){ int n = strlen(s1); int m = strlen(s2); int i = 0, j = 0; while (i < n && j < m) { if (s1[i] == s2原创 2020-05-10 19:03:03 · 128 阅读 · 0 评论 -
栈和队列
二.栈和队列栈的抽象数据类型ADT 栈(stack)Data同线性表。元素具有相同的类型,相邻元素具有前驱和后继关系Operation InitStack(* S) 初始化操作,建立一个空栈 DestoryStack(*S) 若栈存在,则销毁它 ClearStack(*S) 将栈清空 StackEmpty(S) 若栈为空,返回True,否则返回False GetTop(S, *e) 若栈存在且非空,用e返回S的栈顶元素 Push(*S, e) 若栈存在,插入新元素e到栈中并成为栈顶元素原创 2020-05-10 19:01:47 · 287 阅读 · 0 评论 -
线性表
查找静态表查找:查询某个元素是否在查找表中,不需要进行插入和删除操作(利用顺序表和散列表效率高)动态表查找:查找时插入数据元素,查找时删除数据元素(利用二叉搜索树保存效率高)...原创 2020-05-10 11:21:00 · 165 阅读 · 0 评论