![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
mcl19909949541
我命令你,喜欢我!
展开
-
关键路径(C语言)
#include <stdio.h>#define max 100#define mc 10000000#define false -1#define ok 1typedef struct{ //定义图 char vex[max]; int arc[max][max]; int vexnum,arcnum;}AmGraph;int locatedv(AmGraph G,char a) //输入的顶点找到位置{ int i=0; for(i=1;i<=G.vexnu原创 2021-05-08 18:22:10 · 3621 阅读 · 1 评论 -
线索二叉树的实现(C语言)
线索二叉树的实现(C语言)线索二叉树操作线索二叉树的建立线索二叉树的线索化线索二叉树的遍历总体明天就要五一去重庆了,今天在坚持一下把这篇博文写完,也能减轻不少玩的负罪感啦。线索二叉树鉴于普通二叉树使用过程中会出现空间的浪费,后人对在在二叉树的的基础上做了改进,利用它的空指针域存放在某种遍历次序下指向它的前驱结点,和后继结点的指针。这些指针称为线索,相应的二叉树就成了线索二叉树。我们就充分利用二叉链表的空闲结点进行操作,使之充分利用。也就是在定义结构时外加两个标志域,若结点有左子树,则Lchild指原创 2021-04-30 18:17:28 · 3202 阅读 · 1 评论 -
拓扑排序简单实现(C语言)
拓扑排序简单实现(C语言拓扑排序预备知识执行步骤图解代码实现今天刷洛谷的图时看到好多题都要用图的拓扑排序,索性就学一把,敲一敲代码学学算法也复习一下图的具体操作和栈的使用。拓扑排序对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若边<u,v>∈E(G),则u在线性序列中出现在v之前。通常,这样的线性序列称为满足拓扑次序(Topological Order)的序列,简称拓扑序列。简单的说,原创 2021-04-28 20:46:40 · 6079 阅读 · 0 评论 -
b树的简单实现与基本操作(C语言)
今天上完数据结构课,想找找事情做,可本人又懒得刷题(爱好:躺平)。就没事找事看看书上的扩展内容,发现这个b树挺有难度,要是能实现也成就感满满了呀。那便话不多说,撸起袖子加油干。b树看了一篇博客,讲的是真滴好,推荐:http://blog.csdn.net/v_JULY_v/article/details/6530142...原创 2021-04-27 14:48:58 · 3313 阅读 · 0 评论 -
二叉树的层序遍历+非递归算法(C语言)(联合能力)
学校数据结构的题也完成差不多,最近也在考虑博客应该写那些方面。毕竟大学里学习还是以考试为中心,我也就把平时看什么就写出来吧。层序遍历队列用数组实现层序遍历就是按二叉树一层一层遍历,我认为已经很直观了其实。写这篇博客就是加强我二叉树与栈和队列的联合应用的能力,毕竟学到道理与敲代码出来差距是很大的。#include<stdio.h>#include<stdlib.h>#define MAXSIZE 100typedef struct Node{char data;st原创 2021-04-25 16:55:32 · 25426 阅读 · 6 评论 -
二叉排序树的合并(C语言)
二叉排序树的合并其实有好多方法了,反正就是把元素插入进去就好了,大不了两颗树都不建直接新建一个二叉排序树,函数也不是很难,如下:#include<stdio.h>#include<stdlib.h>typedef struct BinTreeNode{ int data; struct BinTreeNode *Lchild; struct BinTreeNode *Rchild;}BinTreeNode,*BinTree;void Cr原创 2021-04-21 21:09:42 · 24000 阅读 · 1 评论 -
二叉排序树的合并(C语言)
二叉排序树的合并其实有好多方法了,反正就是把元素插入进去就好了,大不了两颗树都不建直接新建一个二叉排序树,函数也不是很难,如下:#include<stdio.h>#include<stdlib.h>typedef struct BinTreeNode{ int data; struct BinTreeNode *Lchild; struct BinTreeNode *Rchild;}BinTreeNode,*BinTree;void Cr原创 2021-04-21 21:06:29 · 3450 阅读 · 0 评论 -
二叉排序树的插入和删除(C语言)
这个就是我上个博客的函数再用下就行了,我直接上题了。#include<stdio.h>#include<stdlib.h>typedef struct BinTreeNode{ int data; struct BinTreeNode *Lchild; struct BinTreeNode *Rchild;}BinTreeNode,*BinTree;void CreateTree(BinTreeNode **T)//建立二叉树{原创 2021-04-21 20:37:30 · 27708 阅读 · 0 评论 -
二叉排序树的实现+判别(C语言)
今天运动会开幕式结束!国旗班顺利收关!这一阵学习落下很多,以后得花很多时间在学习上了。但也很开心圆满完成国旗班任务。今天的题目并不很难,主要想把二叉排序树实现下,也方便我以后复习使用。二叉排序树定义 二叉排序树(BST),也叫二叉查找树。二叉排序树或者是一颗空树, 或者是一颗具有下列特性的非空二叉树: 1.若左子树非空,则左子树上所有结点关键字值均小于根结点的关键字值 2.若右子树非空,则右子树上所有结点关键字值均大于根结点的关键字值 3.左、右子树原创 2021-04-20 19:54:13 · 781 阅读 · 0 评论 -
构造哈希表(C语言)
哈希表是一个挺大的知识点,但我就先只把目前学校的题先发了吧,有机会再详细写写。#include<stdio.h>#include<stdlib.h>typedef struct hashnode{ int data; int flag;}hashtable;int HashAlgorithm(int data){ return (3*data)%11;}hashtable *createHashnode(int data, int原创 2021-04-19 20:07:08 · 350 阅读 · 0 评论 -
用弗洛伊德算法求任意两点间最短路径(C语言)
这题我在上个代码中已经写出来对应函数了,就在贴一遍吧。题目代码#include <stdio.h>#include <stdlib.h>struct graphList{ int vexNum; int graph[120][120];};int P[120][120];//记录对应点的最小路径的前驱点,例如p(1,3) = 2 说明顶点1到顶点3的最小路径要经过2void createNewGraphList(struct graphLi原创 2021-04-18 11:29:51 · 3842 阅读 · 0 评论 -
用弗洛伊德算法求赋权图的两点间最短路径的长度(C语言)
今天的弗洛伊德算法求这道题和迪杰斯特拉算法很类似,我把我很喜欢的一篇文章的解释这个算法的图放在这里了,希望对大家理解有帮助。也希望大佬能多多指点。弗洛伊德算法图解即(盗图王中王)题目代码#include <stdio.h>#include <stdlib.h>struct graphList{ int vexNum; int graph[120][120];};int P[120][120];//记录对应点的最小路原创 2021-04-18 11:10:50 · 546 阅读 · 0 评论 -
用迪杰特斯拉算法求赋权图中的最短路径(C语言)
今天这道题也是Dijkstra算法,稍有不同的是要输出两点间最小路径,我们可以在更新数据时用数组把路径全部存储上,若最小步数改变则最小路径为到达最小步路径加最小步路径到此点路径。当然用以下题解中的思路会更方便,如下:(注释已经很详尽了)#include <stdio.h>#include <stdlib.h>struct graphList{ int vexNum; int graph[120][120];};struct step{原创 2021-04-15 09:04:31 · 3405 阅读 · 0 评论 -
Dijkstra(迪杰斯特拉)算法(C语言)
今天学了下数据结构,最近国旗班最后一周训练着实使我没什么时间写博客,这也算是挤出点时间把迪杰斯特拉算法好好整了整,我尽量把这个清晰的写出来。这里也参考大佬的代码让我对程序大体有了思路,也算是站在巨人的肩膀上吧。Dijkstra算法迪杰斯特拉算法是由荷兰计算机科学家狄克斯特拉于1959年提出,是从一个顶点到其余各顶点的最短路径算法,解决的是有权图中最短路径问题。迪杰斯特拉算法的主要特点是以起始点为中心向外层层扩展(广度优先搜索思想),直到扩展到终点为止。迪杰斯特拉算法的成功率是最高的,因为它每原创 2021-04-14 19:54:33 · 3732 阅读 · 0 评论 -
链队列基本操作实现(C语言)
队列#链队的定义及其基本操作#1、队列的定义#队列,简称队,它是一种操作受限的线性表,其限制在表的一端进行插入,另一端进行删除。可进行插入的一端称为队尾(rear),可进行删除的一端称为队头#(front)。向队中插入元素叫入队,新元素进入之后就称为新的队尾元素。从队中删除元素叫出队,元素出队后,其后继结点元素就称为新的队头元素。#2、队列的特点#队的特点就是先进先出(栈为先进后出)。打个比方,队列就是在食堂吃饭的时候排队,先到的人先拿到饭,后到的人后拿到。#3、队列的存储结构#队列按存储结构原创 2021-04-10 10:49:01 · 797 阅读 · 0 评论 -
哈夫曼编/译码器(C语言)
这个感觉有点难度,看了不少大佬的题解才有些许思路,望大家多多指点。哈夫曼编码就是构造权重最小的树,我觉得图已经很好了:编码时从数据开始向上找,判断当前节点是其父节点的左支还是右支,直到当前节点为头结点,再将它反过来就是所求编码。解码从头结点开始走,0走左支1走右支,直到走到叶节点为止,叶节点中数据就是所求数据。...原创 2021-04-09 12:35:14 · 22633 阅读 · 2 评论 -
哈夫曼树的简单实现(C语言)
书上二叉树后面就到哈夫曼树了,过一阵就要整这个的实验课了,趁着这次机会赶快自学下,不知道写的如何,希望大家多多指正吧。哈夫曼树给定N个权值作为N个叶子结点,构造一棵二叉树,若该树的带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree)。哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近。基本术语哈夫曼树又称为最优树.1、路径和路径长度在一棵树中,从一个结点往下可以达到的孩子或孙子结点之间的通路,称为路径。通路中分支的数目称为路径长度。若规定根结点的层数为原创 2021-04-08 11:05:54 · 7921 阅读 · 1 评论 -
计算二叉树叶子结点数目(C语言)
其实这个的算法已经在前面写出来了,但为大家看的方便,我还是再发一遍把。#include<stdio.h>#include<stdlib.h>int depth;typedef struct Node{char data;struct Node *Lchild;struct Node *Rchild;}BiTNode,*Bitree;void CreateBinTree(BiTNode **T){ char ch; ch=getchar();原创 2021-04-07 19:38:18 · 24483 阅读 · 0 评论 -
求广义表深度(C语言)
广义表有两种形式,1.头尾链表存储结构一个表结点由三个域构成(标志域,指向表头的指针域,指向表尾的指针域),元素结点由两个域构成(标志域,值域)2.同层结点链表存储结构本题使用表节点头指针+下一个节点的广义表形式。#include<stdio.h>#include<stdlib.h>typedef struct Node{ int tag;//0则为原子结点,1则为表结点 union{ char atom; s..原创 2021-04-06 19:50:16 · 25709 阅读 · 2 评论 -
基于图的广度优先搜索(C语言)
这题是参考大佬的博客的,给了我很多启发,里面我自己写了有很多注释了,现将其贴在下面:题目代码#include <stdio.h>#include <stdlib.h>#define MAX 100//定义一个结点//边表struct edgeNode{ int headVex;//相邻顶点字段 struct edgeNode *next;//链字段};//定义一个头节点//顶点表struct vexNode{ int vex;//原创 2021-04-01 11:00:36 · 3222 阅读 · 0 评论 -
稀疏矩阵相加用十字链表表示(C语言)
最近做学校数据结构的作业题有点上头,今天这个十字链表也算啃下来了。趁热打铁,赶紧把题解发下。题目:主程序:#include<stdio.h>#include<stdlib.h>typedef struct OLNode//定义一个结点{ int row,col;//行,列 int e;//存储的值 struct OLNode *down,*right;//向下的指针与向右的指针向量}Node,*LNODE;typedef struct{原创 2021-03-31 19:35:08 · 2524 阅读 · 2 评论 -
稀疏矩阵乘法(C语言)
代码:#include<stdio.h>#include<stdlib.h>#define MAXSIZE 1000typedef struct{int row;//第几行int col;//第几列int e;//存储的值}Triple;typedef struct{ Triple data[MAXSIZE]; int m,n,len;//稀疏矩阵的行,列,非零元素的个数}TSMatrix;void createTSMatrix(TSM.原创 2021-03-30 20:09:44 · 23281 阅读 · 0 评论 -
稀疏矩阵相加(C语言)
今天整了下稀疏矩阵相加,不是很难;题目:话不多说,代码如下:#include<stdio.h>#include<stdlib.h>#define MAXSIZE 1000typedef struct{int row;//第几行int col;//第几列int e;//存储的值}Triple;typedef struct{ Triple data[MAXSIZE]; int m,n,len;//稀疏矩阵的行,列,非零元素的个数}TSMat原创 2021-03-30 10:58:47 · 4908 阅读 · 0 评论 -
稀疏矩阵转置(C语言)
最近有数据结构实验课了,还得学一学数据结构喽,以后就把学习经过贴上来了。稀疏矩阵当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组稀疏数组的处理方法1)记录数组一共有几行几列,有多少个不同的值(假设有sum个,则稀疏矩阵有sum+1行,3列)2)把具有不同值的元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模百度盗图(手动滑稽)稀疏矩阵转置题目(不得不说这个题输入数据的确坑。。)有两种方法转置话不多说,上代码:#include<stdi原创 2021-03-29 20:01:44 · 5791 阅读 · 9 评论 -
高精度计算pi(C语言)
题目解题入手#include <stdio.h>#include <stdlib.h>typedef struct node{ int date; struct node* pre; struct node* next;}node;void insert(node* list,int date){//尾插法向链表中添加元素 node* p = list; if(p==NULL){ return; } else{ while(p->ne原创 2021-03-26 15:07:08 · 4738 阅读 · 0 评论 -
二叉树简单实现与基本操作(C语言)(西工大数据结构)
二叉树简单实现与基本操作(C语言)二叉树基本操作二叉树定义二叉树遍历输出先序输出中序输出后序输出输出叶子结点建立二叉链表方式存储的二叉树先序遍历建立二叉树求树的深度求树的深度(后序遍历)求树的深度(先序遍历)总结今天自学下二叉树,简单实现一些基本操作,因为这一块内容很多而且比较难,所以可能会有所纰漏,望大佬多多指点。二叉树二叉树(Binary tree)是树形结构的一个重要类型。许多实际问题抽象出来的数据结构往往是二叉树形式,即使是一般的树也能简单地转换为二叉树,而且二叉树的存储结构及其算法都较为简单原创 2021-03-19 19:44:18 · 865 阅读 · 0 评论 -
基于图的深度优先搜索(C语言)(+邻接矩阵实现bfs和dfs)(西工大数据结构)
基于图的深度优先搜索(C语言)图题目代码图这几周忙着国旗班训练,写博客估计也暂时慢下来,目前我就看什么就学什么吧。最近想把书上的数据结构基本功能先实现了,再慢慢学一些算法,目前在看图,这部分不是很熟练,我就将我认为比较好理解的大佬的文章链接分享在这了 图的基本知识.,希望对大家学习图有帮助。题目第一行输入有向图的顶点数n和边数m,第二行输入顶点,分m行输入有向图边的信息,eg 1 2 表示点1到点2的一条弧,最后一行输入带判别的顶点vi vj存在路径输出yes,否则输出no代码#inclu原创 2021-03-24 20:00:23 · 428 阅读 · 0 评论 -
二叉树已知前序和中序求后序序列(C语言)(西工大数据结构)
二叉树已知前序和中序求后序序列(C语言)题目大体思路代码题目已知二叉树前序为 ABDFGCEH 后序序列为 BFDGACEH ,要求输出后序遍历为 FGDBHECA大体思路又先序得出根,先序的根后为左树一部分,我们再在中序序列里找到先序的根,此处之前即为左树(可以画图好好理解下),此处之后为右树。然后就是不断递归即可。代码#include<stdio.h>#include<stdlib.h>#include<string.h>#define MA原创 2021-03-23 12:47:17 · 6138 阅读 · 0 评论 -
循环队列的实现(C语言)(西工大数据结构)
循环队列的实现(C语言)循环队列主函数今天学了下循环队列,即使用连续空间和取余运算来实现循环,由此减少空间的浪费。请多指教。循环队列何谓循环队列?首先我们要说明的是循环队列仍然是基于数组实现的。但是为了形象化的说明问题,我们如图中有两个指针(其实就是两个整数型变量,因为在这里有指示作用,所以这里理解为指针)front、rear,一个指示队头,一个指示队尾。ear和front互相追赶着,这个追赶过程就是队列添加和删除的过程,如果rear追到head说明队列满了,如果front追到rear说明队列为空原创 2021-03-20 20:19:54 · 438 阅读 · 0 评论 -
链栈的实现与基本操作(C语言)(西工大数据结构)
链栈的实现与基本操作(C语言)链栈基本操作定义入栈出栈得到栈顶元素主函数今天是顺序栈的升级,用链式存储结构来实现栈,新手上路,多多关照链栈链栈的存储结构与单链表的存储结构相同。由于栈是在栈顶进行删除和添加元素的,因此,将链表的首部作为栈顶是最方便的。而且没有必要像单链表那样为了操作简单而附加一个头结点。基本操作定义typedef int StackElementType;typedef struct Node{StackElementType data;struct Node *next原创 2021-03-18 23:03:10 · 3374 阅读 · 4 评论 -
顺序栈基本操作的实现(C语言)(西工大数据结构)
顺序栈基本操作的实现(C语言)栈基本操作顺序栈定义栈的初始化入栈出栈返回栈顶元素主函数今天自学了下栈,简单实现C语言的栈的基本操作,学艺不精,请多指教。栈栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。“只在一端操作,先入后出”基原创 2021-03-18 22:11:33 · 3981 阅读 · 0 评论 -
线性表(双向链表)基本功能实现(C语言)(西工大数据结构)
这里写目录标题双向链表定义基本操作结构定义尾插法建立双向链表在第i个结点后插入e删除第i个结点并用e返回其值输出链表主代码今天想写写双向链表的基本操作,其实和单链表差不多,所以就不做太多解释啦双向链表定义双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。基本操作结构定义#include<stdio.h>#include<stdlib.h>typ原创 2021-03-16 22:01:40 · 180 阅读 · 0 评论 -
单链表就地逆序(c语言)(西工大数据结构)
单链表就地逆序(c语言)代码今天刚刚学完单链表,遇到一个单链表逆序的题,我的思路如下:快捷键目录标题文本样式列表链接代码片表格注脚注释自定义列表LaTeX 数学公式插入甘特图插入UML图插入Mermaid流程图插入Flowchart流程图插入类图标题复制代码#include<stdio.h>#include<stdlib.h>typedef int ElemType;typedef struct Node{//这里的struct node 为结构体类型名,可以用来给变原创 2021-03-16 18:18:35 · 374 阅读 · 0 评论 -
线性表(单链表)基本功能的实现(C语言)(西工大数据结构)
线性表(链表)基本功能的实现C语言链表介绍基本功能存储结构头插法尾插法查找返回链表长度输出链表在第i个结点后插入e删除第i个结点并用e返回其值销毁链表主体代码总结今天我又来发博客啦,刚刚学了链表,现在把一些学的知识总结成博文发出去,希望能对小伙伴们有帮助,也希望各位大佬指出我的错误,码字不易,感谢大家QAQ链表介绍链表是一系列的存储数据元素的单元通过指针串接起来形成的,因此每个单元至少有两个域,一个域用于数据元素的存储,另一个或两个域是指向其他单元的指针。这里具有一个数据域和多个指针域的存储单元通常称原创 2021-03-16 15:30:32 · 245 阅读 · 0 评论 -
顺序表(线性表)基本功能的实现(C语言)(西工大数据结构)
顺序表实现顺序表介绍基本功能C语言定义顺序表顺序表建完后进行输入返回长度返回第i个元素值在第i个元素后插入数删除第i个元素,用e返回其值输出所有数据代码今天又来发博客了,才开始学数据结构,刚刚大一,能力有限,望大佬多多指点啦顺序表介绍顺序表是基于数组的顺序存储的一种线性结构,并且每一个表项的逻辑结构和物理存放顺序一致,其中包含了对表项(数据元素)进行的相关操作,例如增删改查等等操作。基本功能C语言定义顺序表typedef int ElemType;#define MAXSIZE 100//原创 2021-03-15 21:57:08 · 407 阅读 · 0 评论