数据结构与算法
無昼
这个作者很懒,什么都没留下…
展开
-
数据结构简介
什么是数据结构数据结构不是一门研究数据计算的的学科,而是研究数据与数据之间关系的。数据结构的起源:美国高纳德教授,于1968年开设一门《基本算法》的课程,开创的数据结构和算法的先河。提出一个公式:数据结构+算法=程序数据结构的基本概念:数据:能够输入到计算机的描述客观事物的符号。数据项:描述事物的其中一项指标。数据元素:用于描述一个完整的事物。数据结构:由数据元素和元素之间的关...原创 2019-08-13 19:38:49 · 191 阅读 · 0 评论 -
查找算法
顺序查找int order_find(int* arr,size_t len,int key) // 会有非法值,因此不返回无符号;key为要找的值{ for(int i = 0; i < len; i++) { if(arr[i] == key) return i; } return -1;}二叉查找递归算法int _binary_find(int* ar...原创 2019-09-03 09:27:47 · 165 阅读 · 0 评论 -
树(2)
树元素之间存储一对多关系的数据结构,常用于表现族谱关系、组织关系等,也可以借助特殊的树型结构实现查找、排序等算法,一般使用倒悬树的方式表示。树的相关术语根结点:树的最上层元素,有且只能有一个。子结点:该结点的对应下一层元素。父结点:该结点的对应上一层元素。叶子结点:没有子结点的元素,一般处于树的最底层。兄弟结点:具有同一个父结点的元素,处在同一层。高度:指的是树的层数。密度:指的...原创 2019-08-17 16:57:50 · 225 阅读 · 0 评论 -
树(1)
树树是一种元素之间存在一对多关系的数据结构,常用于表示组织结构、辅助排序、查找等,一般以倒悬树的形式显示,根在上支在下。树相关的术语根:树的最顶层的元素,有且仅有一个。双亲:指的是上一层元素。孩子:指的是下一层元素度:"孩子"的数量深度:树的层数密度:树的元素个数结点:一个元素就是一个结点普通树孩子的数量无限制。普通树的顺存储一、对结点的存储顺没有要求二、从上到下从左到...原创 2019-08-17 16:35:53 · 174 阅读 · 0 评论 -
使用回调,封装一个bsort排序函数,支持任意类型
bsort.hbsort.cmain.c运行结果原创 2019-08-16 19:24:58 · 374 阅读 · 0 评论 -
通用链表与回调
通用链表(list)void* 万能指针,可以与任意类型的指针互换 int* = void* void* = int* 需要把链表的数据域换成void*类型。回调由于通用链表存储的类型不确定,因此类型的运算规则不确定,当需要使用到关系运算运算时,需要链表的使用者提供运算(提供一个函数供链表调用),这种模式叫回调。void* 不能直接解引用,需要先转换成其它有效类型。...原创 2019-08-16 19:17:53 · 216 阅读 · 0 评论 -
链式队列
添加头文件声明宏定义设计数据结构功能函数声明具体功能实现简单调用测试int main(){ Queue* queue = creat_queue(); for(int i=0; i<10; i++) { push_queue(queue,i); printf("队尾:%d\n",*tail_queue(queue)); } printf(...原创 2019-08-16 19:09:31 · 151 阅读 · 0 评论 -
顺序队列
添加头文件声明宏定义设计数据结构功能函数声明具体功能实现注:因为队头和队尾都指向第一/最后一个有效元素,因此queue->tall指向-1更合适,而不是指向前/下一个空元素,方便查询简单调用测试int main(){ Queue* queue = creat_queue(10); for(int i=0; i<15; i++) { pr...原创 2019-08-16 17:13:13 · 144 阅读 · 0 评论 -
链式栈
添加头文件声明宏定义设计数据结构功能函数声明具体功能实现简单调用测试int main(){ Stack* stack = creat_stack(); for(int i=0; i<10; i++) { push_stack(stack,i); printf("top:%d\n",*top_stack(stack)); } printf("...原创 2019-08-16 16:49:34 · 134 阅读 · 0 评论 -
顺序栈
添加头文件声明宏定义设计数据结构功能函数声明具体功能实现简单调用测试int main(){ Stack* stack = creat_stack(15); // 创建容量为15的栈 printf("开始入栈:"); for(int i=0; i<20; i++) { printf("入栈%s,",push_stack(stack,i)?"成功...原创 2019-08-16 16:37:26 · 515 阅读 · 0 评论 -
链式表
添加头文件声明宏定义设计数据结构功能函数声明具体功能实现简单调用测试int main(){ List* list = creat_list(); for(int i=0; i<10; i++) { tail_add_list(list,i); // 尾添加 head_add_list(list,i); // 头添加 } ...原创 2019-08-16 14:20:23 · 411 阅读 · 0 评论 -
算法(2)
查找顺序查找从头到尾逐一比较,对于数据没有要求,但方法简单,在小规模的数据查找中比较常用,但效率低二分查找前提就是数据必须有序,然后从数据的中间位置开始查起(比中间数小往左查,比中间大往右查),如果中间值比key小,则从中间位置开始继续查找,反之从开头到中间位置查找,重复以上过程直到结束从代码实现角度来说,既可以用循环实现,也可以用递归实现块查找,权重查找适用于特殊条件下,需要对数据...原创 2019-08-25 23:01:44 · 159 阅读 · 0 评论 -
算法(1)
算法数据结构中的算法,指的是数据结构所具备的功能,是解决特定问题的方法,是前辈们的一些优秀的经验总结分治把个大而复杂的问题,分解为很多个小的而简单的问题,利用计算机的强大计算能力来解决问题实现分治的方法循环、递归递归是函数自己调用自己的一种行为,可以形成循环调用,进而实现分治算法什么情况下使用递归:1、问题过于复杂,无法拆解成循环语句2、问题非线性,而函数递归,由于借助栈内存(...原创 2019-08-25 22:51:51 · 187 阅读 · 0 评论 -
图
图元素之间存在多对多关系注意:线性表的元素之间存在前驱和后继,树的元素之间存在父子关系,图的任意元素之间都有可能存在关系由顶点的有穷非空集合和顶点之间边的集合组成在图型数据结构中,数据被成为顶点,数据之间的关系被成为边注意:在图中不允许出现没有点,但可以没有边G(V,E):V表示顶点的集合,E表示边的集合各种图的定义无向图顶点与顶点之间没有方向,这种边称为无向边,边用无向序偶对(...原创 2019-08-25 21:51:00 · 246 阅读 · 0 评论 -
链式二叉树
添加头文件声明宏定义设计数据结构功能函数声明具体功能实现简单调用测试int main(){ Node* tree = NULL; for(int i=0; i<10; i++) { TYPE data = rand() % 100; printf("%d\n",data); add_tree(&tree,data); }...原创 2019-08-20 20:49:49 · 245 阅读 · 0 评论 -
顺序二叉树
添加头文件声明宏定义设计数据结构功能函数声明具体功能实现简单调用测试 int main() { TYPE arr[] = {1,2,3,4,5,6,7,8}; BinTree* tree = creat_tree(256); init_tree(tree,arr,8); prev_show(tree); ...原创 2019-08-20 19:53:26 · 181 阅读 · 0 评论 -
顺序表
添加头文件声明宏定义设计数据结构功能函数声明具体功能实现简单调用测试int main(){ // 创建 Array* arr = create_array(20); // 存数 for(int i=0; i<100; i++) { TYPE* p = access_array(arr,i); if(NULL != p) { ...原创 2019-08-14 20:23:08 · 140 阅读 · 0 评论 -
表
顺序表(存储结构)1、设计数据结构(与结构体相似)2、分析所具备的算法3、实现算法4、使用算法链式表(存储结构)每个元素都独立存储在内存中的任意位置,元素之间有指针指向来维护关系(元素中有一个数据域指针,指向自己类型)。功能受限的表栈(逻辑结构)只有一个数据的控制端(进出同口,先进后出)限制为只有一个端口进出元素,就导致先进后出和特性。 顺序栈(容量有限)链式栈(可以无限...原创 2019-08-13 19:45:49 · 160 阅读 · 0 评论 -
排序算法
准备工作#define swap(a,b) {typeof(a) t=a;a=b;b=t;}冒泡排序能监测到数据是否有序,一旦监测到有序则停止排序void bubble_sort(int* arr,size_t len){ for(int i = len-1; i > 0; i--) // i为最后一个 { bool flag = true; // 假定已经...原创 2019-09-03 20:57:30 · 194 阅读 · 0 评论