
C语言数据结构与算法
文章平均质量分 71
C语言数据结构与算法
wrlovesmile
这个作者很懒,什么都没留下…
展开
-
(C/C++)-图的深度优先遍历(DFS)和广度优先遍历(BFS)
(C/C++)-图的深度优先遍历(DFS)和广度优先遍历(BFS)1、图的深度优先遍历(DFS)图的深度优先遍历与树的先序遍历类似,即尽可能深的遍历图这里采取邻接矩阵存储图,存储的图如下:ps: 这个图沿用我的上一篇文章(最小生成树和单源最短路径),有兴趣的伙伴可以看看----点击传送门基本思想:先访问图的某一顶点v,然后由顶点v出发,访问与顶点v邻接并且未被访问的任一顶点w1;在由w1出发,访问与顶点w1邻接并且未被访问的任一顶点w2;重复上述过程,直到所有顶点被访问;具体实现:原创 2021-01-06 22:29:01 · 2664 阅读 · 1 评论 -
(C/C++)-最小生成树算法(Prim&Kruskal)和单源最短路径算法(Dijkstra)
(C/C++)-最小生成树算法(Prim&Kruskal)和单源最短路径算法(Dijkstra)1、什么是最小生成树对于一个带权连通无向图G=(V,E),图G的不同的生成树,其所对应的生成树的权值可能不同。设R是G所有生成树的集合,T是R中权值最小的那棵生成树,则称T为G的最小生成树最小生成树的性质最小生成树可能不唯一,但其对应的边的权值之和总是唯一的,且是最小的;最小生成树的边数为顶点数-1; 2、Prim算法的实现(选点)图G=(V,E),其中V为所有结点的集合,E为图G的边原创 2020-12-12 16:21:07 · 2357 阅读 · 1 评论 -
C语言-哈夫曼树与哈夫曼编码的实现
C语言-赫夫曼树与赫夫曼编码的实现原创 2020-11-08 00:47:33 · 8600 阅读 · 2 评论 -
C语言数据结构之栈在表达式值的应用
C语言数据结构之栈在表达式中的应用tips:前些天学习了数据结构,今天来总结一下数据结构知识栈的应用。一、前缀表达式,中缀表达式,后缀表达式的介绍前缀表达式(波兰表达式):运算符在两个操作数之前的表达式;中缀表达式:运算符在两个操作数中间的表达式;后缀表达式(逆波兰表达式):运算符在两个操作数之后的表达式;可以了解到表达式的区别在于运算符的位置不同。从这里可以看出,中缀表达式就是我们正常书写的表达式。下面来看一个例子,加深一下对这三种表达式的理解与转换过程。中缀表达式后缀表达原创 2020-09-06 18:55:52 · 1915 阅读 · 3 评论 -
C语言数据结构之内部排序及其时间复杂度
C语言数据结构之内部排序及其时间复杂度tips:前些天学习了查找的方法,今天来总结一下九大内部排序。先总览一下九大内部排序: 内部排序 插入排序 直接插入排序 折半插入排序 希尔排序 交换排序 冒泡排序 快速排序 选择排序 简单选择排序 堆排序 归并排序 基数排序 下面来逐个看看内部排序的过程1、直接插入排序直接插入排序是在有序序列中插入元素,使其仍然有序。思路:原创 2020-08-30 01:51:04 · 903 阅读 · 0 评论 -
C语言数据结构之查找(顺序查找,折半查找)
C语言数据结构之查找(顺序查找,折半查找)tips:前些天已经学习了树和图的相关知识,今天来总结下两种常用的查找方式(顺序查找,折半查找)。为了演示方便,顺序查找和折半查找的数据存储结构就直接采用数组。1、顺序查找顺序查找又称线性查找,主要用于在线性表中进行查找;顺序查找跟我们用循环遍历进行暴力破解类似。。直接看代码:#define N 11//顺序查找(适用于线性表)int Seq_Search(int *arr, int key) { int i; arr[0] = key原创 2020-08-29 16:46:23 · 8563 阅读 · 0 评论 -
C语言数据结构之二叉排序树
C语言数据结构之二叉排序树tips:前些天学习了线索二叉树,今天来总结一下二叉排序树的相关操作。二叉排序树(BST):若左子树非空,则左子树上所有结点的值均小于根结点的值;若右子树非空,则右子树上所有结点的值均大于根结点的值;二叉排序树的左右子树也是一棵二叉排序树;总之,二叉排序树的中序序列是一个递增的序列。二叉排序树的存储结构与普通二叉树相同:typedef struct node{ int key;//关键字 struct node *left; struct node *原创 2020-08-28 23:20:23 · 2034 阅读 · 0 评论 -
C语言数据结构之线索二叉树
C语言数据结构之线索二叉树tips:前些天学习了二叉树的相关操作,今天来总结一下线索二叉树的操作。线索二叉树:对二叉树以某种次序遍历得到序列中的前驱和后继,其中指向结点前驱和后继的指针称为线索,再加上线索的二叉树称之为线索二叉树。线索化:对二叉树以某种次序遍历使其变成线索二叉树的过程称为线索化1、线索二叉树的存储结构lchildltagdatartagrchild其中,标志域的含义:ltag0:lchild域指示结点的左孩子;1:lchild域指示结点的前驱;原创 2020-08-28 22:42:18 · 710 阅读 · 0 评论 -
C语言数据结构之二叉树的层次建树及遍历方法(前序,中序,后序,层次遍历)
C语言数据结构之二叉树的层次建树及遍历方法(前序,中序,后序,层次遍历)tips:前些天学习了C语言数据结构链表,栈,队列。今天来学习一下C语言数据结构之二叉树的各种操作。注意:二叉树的层次建树是建立的完全二叉树。完全二叉树:对满二叉树进行编号,约定编号从1开始,从上到下,从左至右,每个结点的编号与其深度相同的满二叉树结点的编号一一对应。完全二叉树的性质:具有n个结点的完全二叉树的深度为 ⌊log2n\log_2nlog2n⌋+1;若编号为i的结点左右子树存在,则其左子树的编号为原创 2020-08-27 13:50:49 · 6491 阅读 · 0 评论 -
C语言数据结构之顺序队列
C语言数据结构之顺序队列tips:前些天学习了顺序表和顺序栈,今天来看看c语言数据结构之队列的基本操作。队列的特点是先进先出,后进后出。因此我们使用一个队头指针和一个队尾指针分别指向队头元素,以及队尾元素的下一个位置。首先我们创建一个顺序队列的结构体#define MaxSize 10 //定义队列中最大元素个数typedef struct { int data[MaxSize];//用静态数组存放队列元素 int front, rear;//队头指针和队尾指针,这里队尾指针指向的是队尾原创 2020-08-19 19:49:50 · 3853 阅读 · 2 评论 -
C语言数据结构之顺序栈
C语言数据结构之顺序栈tips:前些天学习了顺序表的一系列操作,今天来看看C语言数据结构之顺序栈的实现以及关于顺序栈的各种操作。栈的特点是先进后出,后进先出,在数组中可利用一个指向数组下标指针top来进行顺序栈的相关操作。首先我们定义一个顺序栈的结构体#define MaxSize 10 //给顺序栈定义默认大小typedef struct { int data[MaxSize];//静态数组存放栈中元素 int top;//栈顶指针(数组下标)}Stack,*pStack;准备原创 2020-08-19 18:01:01 · 1545 阅读 · 0 评论 -
C语言数据结构之顺序表的增删改查
C语言数据结构之顺序表的增删改查tips:前些天学习了链表的操作以及相关的数据结构,今天我们来学习一下c语言数据结构之顺序表的增删改查。顺序表采用顺序存储,即把逻辑上相邻的元素存储在物理位置上也相邻的存储单元中,元素之间关系由存储单元的邻接关系来体现。首先创建一个顺序表的结构体,采用动态数组的方式来实现顺序表#define InitSize 10//动态分配顺序表的默认最大长度//定义顺序表的结构体(动态顺序表)typedef struct student { int *data;//原创 2020-08-17 22:48:14 · 3798 阅读 · 0 评论 -
C语言结构体与结构体指针的使用
C语言结构体与结构体指针的使用tips:最近要好好学习一下数据结构,所以必不可少的就是c语言的结构体和结构体指针了,所以就整理一下这些基础知识c语言结构体(struct)是由一系列具有相同类型或不同类型的数据构成的数据集合。说的通俗一点就是一个集合。c语言是一门面向过程的编程语言,而结构体的使用在某些层次上跟面向对象有点异曲同工之处了。下面回归正题,学习一下结构体以及结构体指针的知识。一、结构体变量的定义和初始化1、首先我们来看一下结构体的定义 struct 结构体名 { 成员列表; }原创 2020-08-08 22:29:02 · 73599 阅读 · 20 评论 -
C语言数据结构之链表的增删改查
C语言数据结构之链表的增删改查tips:昨天学习了c语言结构体,今天来看看c语言数据结构之链表的增删改查操作首先我们创建一个简单的学生信息结构体,作为后面增删改查的主体student结构体包含数据域:学号,分数;指针域:一个指向后继结点的pNext指针;typedef struct student { int num; int score; struct student *pNext;}stu, *pstu;链表测试输出函数//链表打印void lis原创 2020-08-10 10:57:10 · 5357 阅读 · 1 评论 -
C语言数据结构之队列的实现(链表实现)
C语言数据结构之队列的实现tips:前些天学习了链表和栈,今天来看看c语言数据结构之队列的实现以及队列的各种操作。队列的特点是先进先出,后进后出,因此我们很容易就能够想到用单链表的尾插法,和头部删除法去实现队列的入队和出队的操作。首先我们来看一下队列的各种操作的实现思路以及具体实现过程准备工作:创建队列元素的结构体//定义结点typedef struct tag{ int val;//队列(链表)的值 struct tag *pNext;}Node,*pNode;原创 2020-08-15 11:20:30 · 2017 阅读 · 1 评论 -
C语言数据结构之栈(链表实现)
C语言数据结构之栈(链表实现)tips:前些天学习了单链表的增删改查,对于双向链表和循环链表而言,无非就是对单链表的指针进行稍微的变换。今天来看看c语言数据结构之栈的实现以及栈的各种操作。栈的特点是先进后出,后进先出,因此我们很容易联想到去使用单链表的头插法,和头部删除法去实现入栈和出栈的操作。首先我们来看一下栈的各种操作的实现思路以及具体实现过程准备工作:创建栈中元素的结构体typedef struct tag { int val;//栈(链表)的值,即数据域部分 struct原创 2020-08-11 22:24:24 · 2254 阅读 · 0 评论