数据结构与算法 从入门到入土
文章平均质量分 73
以介绍和实战为主,代码全部同步到github中。
kay三石 [Alay Kay]
拥最初的梦,做最优秀的自己
展开
-
数据结构与算法实践系列文章(十)图
图概念有向图/无向图图的表示邻接矩阵在邻接矩阵实现中,由行和列都表示顶点,由两个顶点所决定的矩阵对应元素表示这里两个顶点是否相连、如果相连这个值表示的是相连边的权重。邻接表在邻接列表实现中,每一个顶点会存储一个从它这里开始的边的列表。比如,如果顶点A 有一条边到B、C和D,那么A的列表中会有3条边邻接列表只描述了指向外部的边。A 有一条边到B,但是B没有边到A,所以 A没有出现在B的邻接列表中。查找两个顶点之间的边或者权重会比较费时,因为遍历邻接列表直到找到为止。图的遍历图的遍历指的原创 2021-05-20 14:04:41 · 141 阅读 · 0 评论 -
数据结构与算法实践系列文章(九)排序
排序简单选择排序每次从未排序的元素中选择最大(小)的放入排序序列 O(n^2)C语言#include <stdio.h>#include <stdlib.h>void swap(int *p1,int *p2){ int t; t = *p1; *p1 = *p2; *p2 = t;}void printArray(const int *array,int size){ for(int i=0;i<size;i++){原创 2021-05-20 14:02:56 · 160 阅读 · 0 评论 -
数据结构与算法实践系列文章(八)散列
散列散列目标 :为了更快的查找 —O(1),拿空间换时间, 计算空间位置更快定义“键 -值 对” (key- value pair)的集合两个关键的问题散列函数 什么是好的散列函数解决冲突 如何进行解决冲突解决冲突方式开放定址分离链其他(公共溢出)开放定址h(x) = x mod 11x={12,2,17,28,6,23} h(x) = {1,2,6,6,1}这样以来就有冲突了,这个当冲突时则可以将数据进行往后的坐标点放入 可进行 线性探测,平方探原创 2021-05-20 14:00:28 · 138 阅读 · 0 评论 -
数据结构与算法实践系列文章(七)树
树树(Tree)是n(n≥0)个结点的有限集,它或为空树(n= 0);或为非空树,对于非空树T:(1)有且仅有一个称之为根的结点;(2)除根结点以外的其余结点可分为不同的子树。结点:树的数据元素结点的度:结点挂接的子树数结点的层次:从根节点到该结点的层数路径:顺着连接节点的边从一个节点到另一个节点,所经历的节点顺序根节点:树最上面的节点称为根节点,一棵树只有一个根,而且根到任何一个节点有且只有一条路径父节点:每个节点都有一条边向上连接到另一个节点,这个节点就称是下面原创 2021-05-20 13:58:01 · 423 阅读 · 0 评论 -
数据结构与算法实践系列文章(六)线性结构之队列
队列定义队列是一种先进先出(FIFO)的线性表.在表一端插入在另一端删除只能在表的一端(队尾)进行插入,在另一端(队头)进行删除运算的线性表逻辑结构: 与线性表相同,任为一对一关系。存储结构: 用顺序队列或链队存储均可。运算规则: 先进先出FIFO实现方式: 关键是编写入队和出队函数,具体实现实现依顺序队或的不同而不同。队列的操作C语言循环队列循环队列的定义循环队列的操作C语言#include <stdio.h>#include <stdlib.h>原创 2021-05-20 13:54:43 · 155 阅读 · 1 评论 -
数据结构与算法实践系列文章(五)线性结构之栈
栈定义栈:只能在表的一端(栈顶)进行插入和删除运算的线性表逻辑结构: 与线性表相同,任然是一对一关系存储结构: 用顺序栈或链栈存储都可以。运算规则: 只能在栈顶运算,且访问结点时依照后进先出或者先进后出的原则。实现方式: 关键是编写入栈和出栈的函数。顺序栈的表示:#define MAXSIZE 100typedef struct{ SElemType *base; SElemType *top; int stacksize;}SqStack;// 初始化原创 2021-05-20 11:12:37 · 166 阅读 · 5 评论 -
数据结构与算法实践系列文章(四)线性结构之链表
文章目录链表:链表分类:链表的特点:链表的优缺点:单链表:定义链表的操作链表操作实现:C语言C++javapython循环链表:单项循环链表java实现单项循环链表java实现双向循环链表双向链表:双向链表的操作**java实现双向链表****java实现双端链表**链表:链表:n个结点由指针链组成一个链表,它是线性表的链式存储映像。称为线性表的链式存储结构。链表的结点在存储器中的位置是任意的,即逻辑上相邻的数据元素在物理上不一定相等。链表对空间上有一定的要求,因为他的存储很可能分布在不同的位置。链原创 2021-05-19 14:04:59 · 538 阅读 · 1 评论 -
数据结构与算法实践系列文章(三)线性结构之顺序表
线性结构什么是线性结构:线性结构的定义:若结构是非空有限集,则有且仅有一个开始结点和一个终端结点,并且所有结点都最多只有一个直接前趋和一个直接后继 可表示为如下图所示。线性结构中数据元素之间的关系就是这种“直接前驱”或“直接后继”的相邻关系,可以用一个有序对表示,如:a2与a3的关系:<a2,a3>线性结构的特点:① 只有一个首结点和尾结点;② 除首尾结点外,其他结点只有一个直接前驱和一个直接后继。线性结构包括线性表、堆栈、队列、字符串、数组等等,其中,最典型、最常用的是线性原创 2021-05-19 14:02:16 · 486 阅读 · 0 评论 -
数据结构与算法实践系列文章(二)数组与字符串
数组与字符串数组:数组的定义:就是线性表的实现。c语言定义: int array[N] 或者 int *array = malloc();数组的名不是指针。#include <stdio.h>#include <stdio.h>// 这个地方其实是传入的数组的地址 *array,和大小int func(int *array,int size){ // array[0] 其实就是指针 array求值得出首地址 return array[0]; // 等价于原创 2021-05-19 14:00:01 · 139 阅读 · 0 评论 -
数据结构与算法实践系列文章(一)数据结构与算法的一些概念
由于个人的数据结构与算法的知识比较欠缺,就找了门教程进行学习,这里记录下整个学习的过程的知识点。程序的本质程序是有一系列的机器指令构成。程序=数据结构+算法数据结构与算法是相辅相成的。数据结构:数据结构是计算机存储,组织数据的方式。数据结构是指的相互之间存在一种或多种特定关系的数据元素的集合。通常情况下精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。对处理的问题如何表示,即问题的数学模型是什么简言之:是带有结构特性的数据元素的集合,它研究的是数据原创 2021-05-19 13:58:13 · 302 阅读 · 0 评论 -
桌上有一个空盘,允许存放一只水果。爸爸可向盘中放苹果,也可向盘中放桔子,儿子专等吃盘中的桔子,女儿专等吃盘中的苹果。规定当盘空时一次只能放一只水果供吃者取用,请用P、V原语实现爸爸、儿子、女儿三个并发
桌上有一个空盘,允许存放一只水果。爸爸可向盘中放苹果,也可向盘中放桔子,儿子专等吃盘中的桔子,女儿专等吃盘中的苹果。规定当盘空时一次只能放一只水果供吃者取用,请用P、V原语实现爸爸、儿子、女儿三个并发进程的同步。semaphore empty=1,nutex=1,apple=0,orange=0; //为四个信号量赋初值void father(){do{...转载 2019-06-07 13:16:10 · 43725 阅读 · 14 评论