![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构和算法
文章平均质量分 59
讲述数据结构和算法
li三河
图像算法、3D开发、深度学习
展开
-
(十) 图
1、定义:由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为:G(V,E),G表示一个图,V是图G中顶点的集合,E是图G中边的集合。线性表中数据元素叫元素,树中叫结点,在图中数据元素叫顶点。线性表可以没有数据元素称为空表,树中可以没有结点叫空树,图结构强调顶点集合V要有穷非空。线性表中,相邻的数据元素之间具有线性关系,树结构中,相邻两层的结点具有层次关系,图结构中,任意两个顶点之间都可能有关系,顶点之间的逻辑关系用边来表示,边集可以是空的。2、无向图:若顶点Vi到Vj之间的边没有方向,则称该边为无向原创 2022-02-18 16:03:46 · 236 阅读 · 0 评论 -
(九) 字符串
定义:串是由零个或多个字符组成的有限序列。字符串的存储结构与线性表相同,分顺序存储结构和链式存储结构。字符串的顺序存储结构是用一组地址连续的存储单元存储串中的字符序列的。(1)BF算法有两个字符串S(主串)和T(字串),长度N和M。首先S[1]和T[1]比较,若相等,则再比较S[2]和T[2],一 直到T[M]为止;若S[1]和T[1]不等,则T向右 移动一个字符的位置,再依次进行比较。该算法最坏情况下要进行M*(N-M+1)次比较,时 间复杂度为O(M*N)。(2)KMP算法n原创 2022-02-18 15:40:13 · 165 阅读 · 0 评论 -
(八) 队列
一种先进先出的线性表,在一端进行插入操作,而在另一端进行删除操作的线性表,是一种先进先出的线性表。1、队列的链式存储(1) 队列的链式存储结构typedef struct QNode { ElemType data; struct QNode *next;} QNode, *QueuePrt;typedef struct { QueuePrt front, rear; // 队头、尾指针} LinkQueue;将队头指针指向链队列的头结点,而队尾指向终端结点(原创 2022-02-18 15:37:29 · 185 阅读 · 0 评论 -
(七) 线性表
1、定义:由零个或多个数据元素组成的有限序列,若元素存在多个,则第一个元素无前驱,而最后一个元素无后继,其他元素都有且只有一个前驱和后继。InitList(*L): 初始化操作,建立一个空的线性表L。ListEmpty(L): 判断线性表是否为空表,若线性表为空,返回true,否则返回false。ClearList(*L): 将线性表清空。GetElem(L,i,*e): 将线性表L中的第i个位置元素值返回给e。LocateElem(L,e): 在线性表L中查找与给定值e相等的元素,如果查找成原创 2022-02-18 15:26:50 · 259 阅读 · 0 评论 -
(六) 栈的链式存储结构
1、存储结构typedef struct StackNode{ ElemType data; // 存放栈的数据 struct StackNode *next;} StackNode, *LinkStackPtr;typedef struct LinkStack{ LinkStackPrt top;// top指针 int count; // 栈元素计数器}2、进栈操作对于栈链的Push操作,假设元素值为e的新结点是s,top为栈顶指针..原创 2022-02-18 15:08:41 · 266 阅读 · 0 评论 -
(五) 栈
栈的元素必须“后进先出”;栈的操作只能在这个线性表的表尾进行;对于栈来说,这个表尾称为栈的栈顶,相应的表头称为栈底。1、栈的顺序存储结构:typedef struct{ElemType *base;ElemType *top;int stackSize; //栈的最大容量}sqStack;base是指向栈底的指针变量,top是指向栈顶的指针变量,stackSize指示栈的当前可使用的最大容量2、创建一个栈#define STACK_INIT_SIZE 100原创 2022-02-18 15:03:30 · 607 阅读 · 0 评论 -
(四) 二叉树
1、定义二叉树是n(n>=0)个结点的有限集合,该集合或者为空集(空二叉树),或者由一个根结点和两棵互不相交的、分别称为跟结点的左子树和右子树的二叉树组成。2、特点每个结点最多有两棵子树,所以二叉树不存在度大于2的结点。左子树和右子树是有顺序的,次序不能颠倒。即使树中某结点只有一棵子树,也要区分它是左子树还是右子树。3、基本形态空二叉树、只有一个根节点、根结点只有左子树、根结点只有右子树、根节点既有左子树又有右子树4、满二叉树特点叶子只能出现在最下一层、非叶子结点的度一定是2原创 2022-01-27 20:29:30 · 8398 阅读 · 0 评论 -
(三)树定义
1、定义树是n个结点的有限集。当n=0时成为空树,在任意一颗非空树中:有且仅有一个特定的称为根的结点;当n大于1时,其余结点可分为m个互不相交的有限集T1、T2、…….、Tm,其中每一个集合本身又是一棵树,并且称为根的子树。2、结点分类每一个圈圈称为树的一个结点。结点拥有的子树数称为结点的度,树的度取树内各结点的度的最大值。度为0的结点称为叶结点或终端结点,度不为0的结点称为分支结点或非终端结点,除根结点外,分支结点也称为内部结点。3、结点间的关系结点的子树的根称为结点的孩子,相应.原创 2022-01-27 20:22:36 · 178 阅读 · 0 评论 -
(二)排序
1、分类2、时间复杂度3、详细阐述(1) 冒泡排序从下往上两两比较,如果有n个元素需要比较n-1次,每一轮减少1次比较。void BubbleSort(int k[], int n) { for (int i = 0; i < n - 1; i++) for (int j = i + 1; j < n; j++) if (k[i] > k[j]) { int temp = k[i]; k[i] = k[j原创 2022-01-27 20:08:02 · 146 阅读 · 0 评论 -
(一)查找算法
静态查找:数据集合稳定,不需要添加和删除元素的查找操作。(线性表、折半)动态查找:数据集合在查找的过程中需要同时添加或删除元素的查找操作。(二叉排序、散列表)(1)顺序查找:从第一个(或者最后一个)记录开始,逐个进行记录的关键字和给定值进行比较,若某个记录的关键字和给定值相等,则查找成功。如果查找所有记录找不到与给定值相等的关键字,则查找不成功。int Sq_Search(int *a, int n, int key){ int i = n; a[0] = key w原创 2022-01-25 21:59:58 · 132 阅读 · 0 评论