- 博客(26)
- 收藏
- 关注
原创 noj26二叉排序树的合并
二叉排序树合并其实就是遍历一个树插入另外一个树。#include <stdio.h>#include <stdlib.h>typedef struct BiNode{ int data; struct BiNode *leftchild,*rightchild;}BiNode,*BiTree;//初始化二叉排序树BiTree InitTree(BiTree T){ int e; scanf("%d",&e); if(e.
2022-05-29 13:53:03 279
原创 noj25二叉排序树的插入和删除
#include <stdio.h>#include <stdlib.h>#include<malloc.h>//二叉排序树typedef struct BiNode{ int data; struct BiNode *leftchild,*rightchild;}BiNode,*BiNodePtr,*BiTree;//初始化二叉排序树BiNodePtr InitTree(BiTree T){ int e; scanf..
2022-05-28 16:42:03 240
原创 noj24二叉排序树的判别
二叉排序树二叉排序树(Binary Sort Tree)或者是一颗空树;或者是具有如下性质的二叉树:(1) 若它的左子树不空,则 左子树 上所有结点的值 均小于 它的根结点的值;(2) 若它的右子树不空,则 右子树 上所有结点的值 均大于 它的根结点的值;(3) 它的 左、右子树又分别为二叉排序树 。显然二叉排序树的定义是一个递归形式的定义,所以后面景禹要讲的插入、查找和删除都是基于递归的形式。原文链接#include <stdio.h>#include <stdlib.
2022-05-26 22:42:37 407
原创 noj23构造哈希表
哈希表介绍在面前讨论的各种结构(线性表、树)中,记录在结构中的相对位置是随机的,和记录的关键字之间不存在确定的关系。因此,在结构中查找记录时需进行一系列和关键字的比较。这一类查找方法建立在“比较”的基础上。在顺序查找时,比较的结果为“=”与“≠”两种可能;在折半查找、二叉排序树查找,比较的结果为“<”、“=”和“>”三种可能。查找的效率依赖于查找过程中所进行的比较次数。哈希表的概念在查找时,我们理想的情况是希望不经过任何比较,一次存取便能得到所查记录,那就必须在记录的储存位置和它的关键字.
2022-05-26 14:53:36 348 3
原创 noj22Dijkstra算法
迪杰斯特拉算法:迪杰斯特拉(Dijkstra)算法是典型最短路径算法,用于计算一个节点到其他节点的最短路径。它的主要特点是以起始点为中心向外层层扩展(广度优先搜索思想),直到扩展到终点为止。基本思想通过Dijkstra计算图G中的最短路径时,需要指定起点s(即从顶点s开始计算)。迪杰斯特拉(Dijkstra)算法是典型最短路径算法,用于计算一个节点到其他节点的最短路径。它的主要特点是以起始点为中心向外层层扩展(广度优先搜索思想),直到扩展到终点为止。通过Dijkstra计算图G中的最短路径..
2022-05-26 10:42:03 244
原创 noj21逆波兰表达式
回顾一下逆波兰式:逆波兰表达式又叫做后缀表达式。逆波兰表示法是波兰逻辑学家J・卢卡西维兹于1929年首先提出的一种表达式的表示方法。后来,人们就把用这种表示法写出的表达式称作“逆波兰表达式”。逆波兰表达式把运算量写在前面,把算符写在后面。重点:符号栈中,栈顶优先级最高向符号栈中加入符号时,要对比栈顶符号的优先级是否小于当前符号的优先级,如果小于则直接入栈,如果大于则要将栈内元素弹出,一直弹出至当前的栈顶符号的优先级小于当前符号,然后再将当前符号入栈如果入栈符号为 ( ,则直接入栈如果入栈符.
2022-05-24 22:32:18 302
原创 noj20基于图的广度优先搜索策略
这道题是广度优先搜索 区别一下广度优先和深度优先1、深度优先算法遍历规则:不断地沿着顶点的深度方向遍历。顶点的深度方向是指它的邻接点方向。 最后得出的结果为:ABDECFHG。2、广度优先算法:遍历规则: 1)先访问完当前顶点的所有邻接点。(应该看得出广度的意思) 2)先访问顶点的邻接点先于后访问顶点的邻接点被访问。最后得出的结果为:ABCDEFGH。深度优先搜素算法:不全部保留结点,占用空间少;有回溯操作(即有入栈、出栈操作),运行速度慢。广度优先搜索算法:保留全部结点,占用空..
2022-05-12 20:42:55 350
原创 noj19基于图的深度优先搜索策略
1.看一下邻接表法对图中的每个顶点vi都分别建立一个对应的单链表(对无向图称为“边表”,对有向图称为“出边表”)来存储所有邻接与顶点vi的边(对于有向图而言是指以vi为尾的弧),边表中的每个结点分别对应于邻接于顶点vi的一条边。边表中的每个结点主要包含两个域,其中邻接点域(adjvex)指示与顶点vi邻接的点在图中的位置,链域(nextedge)指示下一条边或弧的结点。如果是带权图,还可以再加一个域weight,表示从vi到adjvex这条边的权值。(这道题没有涉及到权值)对于图中的所有顶点信息,用一.
2022-05-12 19:50:12 378
原创 noj18建立二叉树的二叉链表
根据题意,先回顾一下课堂上讲的二推一的方法只要知道其中任意两种遍历的顺序,我们就可以推断出剩下的一种遍历方式的顺序,这里我们只是以:知道前序遍历和中序遍历,推断后序遍历作为例子,其他组合方式原理是一样的。要完成这个任务,我们首先要利用以下几个特性:特性A,对于前序遍历,第一个肯定是根节点;特性B,对于后序遍历,最后一个肯定是根节点;特性C,利用前序或后序遍历,确定根节点,在中序遍历中,根节点的两边就可以分出左子树和右子树;特性D,对左子树和右子树分别做前面3点的分析和拆分,相当于做递归,我们就可.
2022-05-09 23:33:09 628
原创 noj17输出以二叉树表示的算术表达式
由题知 先序输入 中序输出可以自己画一个二叉树来看一下比较直观#include <stdio.h>#include <stdlib.h>typedef struct TNode{ char data; struct TNode *Lchild; struct TNode *Rchild;}TNode; //先序输入建立二叉树void CreatTree(TNode *temp){ temp->Lchild=NULL; .
2022-04-25 23:56:50 1044
原创 noj16计算二叉树叶子结点数目
明白NULL不是真正的空,#才是空主要看注释吧#include <stdio.h>#include <stdlib.h>typedef struct TNode//二叉树节点{ char data; struct TNode *Lchild; struct TNode *Rchild;}TNode; //先序输入建立二叉树void CreatTree(TNode *temp){ temp->Lchild=NULL;//先制空.
2022-04-24 00:16:08 125
原创 noj15建立二叉树的二叉链表存储结构
如图,要求建立二叉树的二叉链表存储结构,然后先序遍历输出先回顾一下二叉树的基本内容二叉树定义:二叉树(Binary Tree)是n(n>=0)个节点的有限集合,该集合或者为空集(称为空二叉树),或者由一个根节点和两颗互不相交的、分别称为根节点的左子树、右子树的二叉树组成。五种基本形态:空二叉树、只有一个根节点、根节点只有左子树、根节点只有右子树、根节点既有左子树又有右子树。二叉树的特点1.每个节点最多有两棵子树,即不存在度大于2的节点。2.左子树和右子树是有序的,不能随便颠倒。3.即使.
2022-04-19 19:54:08 1884
原创 noj14求广义表深度
广义表理论上很好理解,但是我感觉对我来说上手还有点困难(还是太菜)。先看广义表的一些定义吧1 )什么是广义表广义表,又称列表,也是一种线性存储结构,既可以存储不可再分的元素,也可以存储广义表,记作:LS = (a1,a2,…,an),其中,LS 代表广义表的名称,an 表示广义表存储的数据,广义表中每个 ai 既可以代表单个元素,也可以代表另一个广义表。2 )广义表的原子和子表广义表中存储的单个元素称为 “原子”,而存储的广义表称为 “子表”。例如 :广义表 LS = {1,{1,2,3}}.
2022-04-16 14:21:54 360
原创 noj13以十字链表为存储结构实现矩阵相加
题目要求题目要求十字链表为存储结构十字链表大致就是这个样子注意CrossList里面的两个指针其实是二级指针#include <stdio.h>#include <stdlib.h>typedef struct Triple{ int m; int n; int val; struct Triple *right; struct Triple *down;}Triple;typedef struct CrossLine
2022-04-15 21:14:34 453
原创 noj12以三元组表为存储结构实现矩阵相加
![在这里插入图片描述](https://img-blog.csdnimg.cn/1561af897612408ab05caea2b3f6722c.png?x-oss-process=image/waterm题目和数据结构实验有点相似涉及到稀疏矩阵的运算,给出稀疏矩阵的定义在矩阵中,若数值为0的元素数目远远多于非0元素的数目,并且非0元素分布没有规律时,则称该矩阵为稀疏矩阵;与之相反,若非0元素数目占大多数时,则称该矩阵为稠密矩阵。定义非零元素的总数比上矩阵所有元素的总数为矩阵的稠密度。要求使
2022-04-15 00:01:53 966
原创 noj11循环右移
标题示例由于这次写文章距离AC时间较长,当时没有趁热打铁写完,希望现在还能回忆起来。注意题目要求是循环右移,这个示例给的有点迷惑性,左移三位和右移三位结果一样,当时我就给左移了【可能眼神不太好】,所以我的方法就在左移的基础上逆着输出了一下(我记得是这样的doge),还是使用循环队列,还是看代码吧#include <stdio.h>#include <stdlib.h>//节点typedef struct Node{ int val;/* data */
2022-04-13 23:14:30 148
原创 noj10k阶斐波那契数列
标题 noj10k阶斐波那契数列题目首先,我们需要明白k阶斐波那契数列的定义,它不是我们之前熟知的那种斐波那契数列,其定义如下:K阶斐波那契数列的前K-1项均为0,第k项为1,以后的每一项都是前K项的和比如二阶斐波那契数列:0、1、1、2、3、5、8、13、21、34、…三阶则是:0、0、1、1、2、4、7…笔者采用循环队列中的链式存储结构解答(网上也有诸多大佬的其他解法)话不多说,上代码:#include <stdio.h>#include <stdlib.h&
2022-04-07 10:07:18 762 1
原创 noj09循环队列
循环队列这道题的叙述有点问题,我也是看到网上的大佬才发现其实是题目描述的输入输出存在问题题上说队满时输出yes;但是到了下边给的例子:yes就变成了输入,导致当初WA了很多次。一、题目解析本题要求使用循环队列,队列(queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。队列常见的存储结构分为顺序存储结构和链式存储结构,笔者采用链式存储结构。二、代码分析#include <stdio.h>#include <stdlib.h>//创建node
2022-03-31 21:49:45 388
西北工业大学计算机学院信号与系统实验报告
2024-01-12
C程序设计大作业,图书管理系统
2024-01-12
C语言程序设计万年历大作业
2024-01-10
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人