
数据结构
北京林业大学2019年数据结构实验 from BJFU OJ题库
海 月
ฅ՞•ﻌ•՞ฅ Sharing is the spirit of the Internet.
展开
-
算法 二叉树的层序遍历
层序遍历先将根节点入队当队列不为空时,循环读取队列中的节点,读取后出队,并将其子节点加入队列如果队列为空,遍历结束代码void LevelOrder(TreeNode root) { Queue<TreeNode> queue = new Queue<TreeNode>(); queue.Enqueue(root); while(queue.Count!=0) { TreeNode node=(Tr...原创 2021-09-27 18:32:21 · 204 阅读 · 0 评论 -
链表以指针或引用的形式作为参数
指针:指针是一个变量,只不过这个变量存储的是一个地址,指向内存的一个存储单元;可以是空值,可以在任何时候被初始化。指针的值在初始化后可以改变,即指向其它的存储单元。sizeof 指针 得到的是指针本身的大小。引用:跟原来的变量实质上是同一个东西,只不过是原变量的一个别名而已。引用不可以为空,当被创建的时候,必须初始化。引用在进行初始化后就不会再改变了。sizeof 引用 得到的是所指向的对象的大小。指针示例int a=1;int *p=&a;.原创 2021-07-20 17:31:54 · 913 阅读 · 0 评论 -
链表的基本操作:插入、删除
插入 //遍历链表的指针 LinkList p; //指向链表头节点 p=L; //找到待插入位置的前一个节点 ... //新节点指针 LinkList s; //开辟空间 s=new LNode; //赋值 s->data=value; //新节点指向遍历位置的下一个节点 (s的下一个节点变成当前位置的下一个节点) s->next=p->next; //遍历位置指向新节点(p的下一个节点变成s) p->next=s...原创 2021-07-20 16:25:07 · 487 阅读 · 0 评论 -
链表的头插法
代码void CreateListfromHead(LinkList &L){ //头指针 LinkList r; //新节点指针 LinkList p; //创建头节点并初始化其指针域为空 L=new LNode; L->next=NULL; while(1) { //创建新节点并开辟空间 p=new LNode; //为新节点赋值 int val; cin>>val; if(val==-1) brea原创 2021-07-20 01:31:40 · 254 阅读 · 0 评论 -
链表的尾插法
代码void CreateListfromRear(LinkList &L){ //尾指针rear LinkList r; //新节点指针p LinkList p; //头节点初始化 L=new LNode; //头节点(L)初始化 :指向空 L->next=NULL; //初始,尾指针指向头节点 r=L; int i=0; while(1) { //新节点指针负责创建新节点 p=new LNode; //新节点(p)初原创 2021-07-19 23:28:21 · 6649 阅读 · 0 评论 -
C++ 去除文本中的空行
输入一段文本,除去其中的空行#include<iostream>#include<fstream>#include<cstring>#include<cmath>using namespace std; int Check(string readline){ for(int n=0;n<readline.length();n++) { if(readline[n]!=9&&readline[n]!=32&a.原创 2021-04-17 19:29:16 · 1896 阅读 · 0 评论 -
C++ 去除代码注释
输入一段代码,去除其中的注释和空行支持去除以下形式的注释://这是一条注释/*这是一条注释*//*这是一条注释*/#include<iostream>#include<fstream>#include<cstring>#include<cmath>using namespace std; int Check(string readline){ //非空串判断 for(int n=0;n<readli.原创 2021-04-17 18:27:46 · 3935 阅读 · 1 评论 -
C++ 提取代码中的函数
输入一段代码,输出这段代码中包含的所有函数#include<iostream>#include<fstream>#include<cstring>#include<cmath>using namespace std; int total;//行数 //初始化数组为空 string str[10000]="";//预处理的数据 string str1[10000]="";//处理后数据 string temp[1000]="";.原创 2021-04-16 20:08:45 · 1652 阅读 · 0 评论 -
计数排序
描述有一种简单的排序算法,叫做计数排序。这种排序算法对一个待排序的表进行排序,并将排序结果存放到另一个新的表中。必须注意的是,表中所有待排序的关键字互不相同,计数排序算法针对表中的每个记录,扫描待排序的表一趟,统计表中有多少个记录的关键字比该记录的关键字小。假设针对某一个记录,统计出的计数值为c,那么,这个记录在新的有序表中的合适的存放位置即为c。请编写算法实现计数排序。输入...原创 2020-02-23 00:16:28 · 861 阅读 · 0 评论 -
数组的正负排序
描述对n个关键字取整数值的记录序列进行整理,以使所有关键字为负值的记录排在关键字为非负值的记录之前,要求:①采用顺序存储结构,至多使用一个记录的辅助存储空间;②算法的时间复杂度为O(n)。输入多组数据,每组数据两行。第一行为序列的长度n,第二行为序列的n个元素(元素之间用空格分隔,元素都为整数)。当n等于0时,输入结束。输出每组数据输出一行,为排序后的序列。...原创 2020-02-23 00:12:50 · 1643 阅读 · 0 评论 -
数据结构笔记(树、图、排序、查找部分)
提纲形式:图 邻接矩阵(key) 邻接矩阵的存储表示#define MaxInt 32767#define MVNumn 100typedef char typedef int ArcType;typedef struct{ char vexs[MVNum]; int arcs[MVNum][MVNum]; int ve...原创 2020-02-03 01:24:45 · 821 阅读 · 0 评论 -
基于邻接矩阵的边的删除
描述给定一个无向图,在此无向图中增加一条边。输入多组数据,每组m+2行。第一行有两个数字n和m,代表有n个顶点和m条边。顶点编号为1到n。第二行到第m+1行每行有两个数字h和k,代表边依附的两个顶点。第m+2行有两个数字f和g,代表删除的边所依附的两个顶点。当n和m都等于0时,输入结束。输出每组数据输出n行。为删除边后的邻接矩阵。每两个数字之间用空格隔开。...原创 2020-02-22 00:41:13 · 2033 阅读 · 1 评论 -
基于邻接矩阵的新边的增加
描述给定一个无向图,在此无向图中增加一条边。输入多组数据,每组m+2行。第一行有两个数字n和m,代表有n个顶点和m条边。顶点编号为1到n。第二行到第m+1行每行有两个数字h和k,代表边依附的两个顶点。第m+2行有两个数字f和g,代表增加的边所依附的两个顶点。当n和m都等于0时,输入结束。输出每组数据输出n行。为增加边后的邻接矩阵。每两个数字之间用空格隔开。...原创 2020-02-22 00:40:06 · 1743 阅读 · 0 评论 -
基于邻接矩阵的顶点的删除
描述给定一个无向图,在此无向图中删除一个顶点。输入多组数据,每组m+2行。第一行有两个数字n和m,代表有n个顶点和m条边。顶点编号为1到n。第二行到第m+1行每行有两个数字h和k,代表边依附的两个顶点。第m+2行有一个数字f,代表删除的顶点编号。当n和m都等于0时,输入结束。输出每组数据输出n-1行。为删除顶点后的邻接矩阵。每两个数字之间用空格隔开。输入样...原创 2020-02-22 00:37:49 · 5066 阅读 · 1 评论 -
基于邻接矩阵的新顶点的增加
#include <iostream>#include <cstring>#define MVNum 100using namespace std;typedef struct{ char vexs[MVNum];//点集 int arcs[MVNum][MVNum];//边的邻接矩阵 int vexnum,arcnum;//点数&边数 }...原创 2020-02-22 00:36:22 · 2992 阅读 · 0 评论 -
基于Dijsktra算法的最短路径求解
描述一张地图包括n个城市,假设城市间有m条路径(有向图),每条路径的长度已知。给定地图的一个起点城市和终点城市,利用Dijsktra算法求出起点到终点之间的最短路径。输入多组数据,每组数据有m+3行。第一行为两个整数n和m,分别代表城市个数n和路径条数m。第二行有n个字符,代表每个城市的名字。第三行到第m+2行每行有两个字符a和b和一个整数d,代表从城市a到城市b有一...原创 2020-02-22 00:30:54 · 4257 阅读 · 0 评论 -
基于二叉链表的二叉树高度的计算
描述设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写递归算法计算二叉树的高度。输入多组数据。每组数据一行,为二叉树的前序序列(序列中元素为‘0’时,表示该结点为空)。当输入只有一个“0”时,输入结束。输出每组数据分别输出一行,为二叉树的高度。输入样例 1abcd00e00f00ig00h...原创 2020-02-22 00:23:57 · 2891 阅读 · 0 评论 -
基于二叉链表的二叉树结点个数的统计
#include <iostream>using namespace std;int n0=0,n1=0,n2=0;typedef struct BiTNode{ char data; struct BiTNode *lchild,*rchild; }BiTNode,*BiTree;BiTree temp;void CreateBiTree(BiTr...原创 2020-02-22 00:21:32 · 1458 阅读 · 0 评论 -
基于二叉链表的二叉树的遍历
#include <iostream>using namespace std;int maxi=0;int m=0,n=0;typedef struct BiTNode{ char data; struct BiTNode *lchild,*rchild; }BiTNode,*BiTree;BiTree temp;void CreateBiTree(BiT...原创 2020-02-22 00:20:13 · 3152 阅读 · 0 评论 -
基于二叉链表的二叉树叶子结点到根结点的路径的求解
#include <iostream>using namespace std;int maxi=0;int m=0,n=0;typedef struct BiTNode{ char data; struct BiTNode *lchild,*rchild; }BiTNode,*BiTree;BiTree temp;void CreateBiTree(BiT...原创 2020-02-21 00:11:47 · 3443 阅读 · 1 评论 -
基于二叉链表的二叉树最长路径的求解
#include <iostream>using namespace std;int maxi=0;int m=0,n=0;typedef struct BiTNode{ char data; struct BiTNode *lchild,*rchild; }BiTNode,*BiTree;BiTree temp;void CreateBiTree(BiT...原创 2020-02-21 00:10:32 · 1692 阅读 · 0 评论 -
基于二叉链表的二叉树最大宽度的计算
描述设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写算法计算该二叉树的最大宽度(二叉树的最大宽度是指二叉树所有层中结点个数的最大值)。输入多组数据。每组数据一行,为二叉树的先序序列(序列中元素为‘0’时,表示该结点为空)。当输入只有一个“0”时,输入结束。输出每组数据输出一行。为二叉树的最大宽度。输入样...原创 2020-02-21 00:09:41 · 2232 阅读 · 2 评论 -
基于二叉链表的二叉树的双序遍历
#include <iostream>using namespace std;typedef struct BiTNode{ char data; struct BiTNode *lchild,*rchild; }BiTNode,*BiTree;void CreateBiTree(BiTree &T){ char ch; cin>>c...原创 2020-02-21 00:08:48 · 1766 阅读 · 0 评论 -
基于二叉链表的二叉树左右孩子的交换
描述设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写递归算法交换该二叉树的左右孩子。输入多组数据。每组数据一行,为二叉树的先序序列(序列中元素为‘0’时,表示该结点为空)。当输入只有一个“0”时,输入结束。输出每组数据输出一行。为交换左右孩子后的二叉树的先序序列。输入样例 1abcd00e00...原创 2020-02-21 00:07:47 · 5037 阅读 · 0 评论 -
基于二叉链表的树结构相等的判断
描述设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,按此方法创建两棵二叉树,然后编写递归算法判断这两棵树是否相等。输入多组数据,每组数据有两行。每行为一个二叉树的先序序列(序列中元素为‘0’时,表示该结点为空)。当输入只有一个“0”时,输入结束。输出每组数据输出一行。若两个二叉树相等输出“YES”,否则输出“NO”。...原创 2020-02-21 00:06:38 · 2256 阅读 · 2 评论 -
数组的正负数分割排序
描述设任意n个整数存放于数组A[1..n]中,试编写算法,将所有正数排在所有负数前面(要求:正(负)数序列中数的相对顺序不变,算法时间复杂度为O(n))。输入多组数据,每组数据有两行,第一行为数组中存放的数的个数n,第二行为n个整数。当n=0时输入结束。输出对于每组数据分别输出一行,为分割排序后的数组。输入样例 141 2 -1 25-1 -2 1 2 ...原创 2020-02-21 00:02:13 · 3045 阅读 · 0 评论 -
二维数组中的元素查重
描述设二维数组a[1..m, 1..n] 含有m*n 个整数。写一个算法判断a中所有元素是否互不相同。输入多组数据,每组数据有m+1行,第一行为二维数组的行数m和列数n,之后m行为输入的二维数组。当n=0且m=0时输入结束。输出对于每组数据分别输出一行,若二维数组中存在相等元素则输出“YES”,否则输出“NO”。输入样例 14 31 2 34 5 67 ...原创 2020-02-21 00:01:12 · 3054 阅读 · 0 评论 -
字符串的插入
#include <iostream>#include <string>using namespace std;void insert(string s,string str,int pos){ string rear,front,newstr; front=s.substr(0,pos); rear=s.substr(pos,s.length()-pos...原创 2020-02-21 00:01:05 · 1051 阅读 · 0 评论 -
递归实现字符串的逆序存储
描述写一个递归算法来实现字符串的逆序存储,要求空间复杂度为O(1)。输入多组数据,每组数据有一行,为要求逆序存储的字符串。当输入字符串为“0”时,输入结束。输出对于每组数据输出一行,为逆序存储后的字符串。输入样例 1ABCDE123450输出样例 1EDCBA54321#include <iostream>#include...原创 2020-02-20 13:33:14 · 1316 阅读 · 0 评论 -
统计字符出现的频度
描述写一个算法统计在输入字符串中各个不同字符出现的频度并将结果输出(字符串中的合法字符为A-Z之间的26个字母和0-9之间的10个数字)。输入多组数据,每组数据有一行,为待统计字符频度的字符串。当字符串为“0”时,输入结束。输出对于每组数据输出n行,每一行为一个字符出现的频度(只输出存在的字符,格式为:字符:频度),字符排列顺序按照ASCII码从小到大的顺序。输入样例...原创 2020-02-20 13:31:33 · 3915 阅读 · 1 评论 -
病毒感染监测
描述医学研究者最近发现了某些新病毒,通过对这些病毒的分析,得知它们的DNA序列都是环状的。现在研究者收集了大量的病毒DNA和人的DNA数据,想快速检测出这些人是否感染了相应的病毒。为方便研究,研究者将人的DNA和病毒的DNA均表示成由一些小写字母组成的字符串,然后检测某种病毒的DNA序列是否在患者的DNA序列中出现过,如果出现过,则此人感染了病毒,否则没有感染。注意:人的DNA序列是线性...原创 2020-02-20 13:29:23 · 1626 阅读 · 0 评论 -
迷宫问题
#include <iostream>#define max 10using namespace std;int a[max][3];//迷宫 int m,n;//m:出口层数 n:入口int tag;//为输出做标记 int DFS(int k)//深度搜索第k层,k:当前路口 { int i,j; if(k==m)//到达出口 { tag=1; ...原创 2020-02-20 01:43:03 · 2311 阅读 · 2 评论 -
中缀表达式转化为后缀表达式
#include <iostream>#include<cmath>#include <iomanip>#define MAXSIZE 1000using namespace std;char op[7] = { '+', '-', '*', '/', '(', ')', '=' };typedef struct { char *base;...原创 2020-02-20 01:41:46 · 1091 阅读 · 0 评论 -
递归求解单链表中的平均值
#include <iostream>#include<iomanip>using namespace std;#define MAXSIZE 10000typedef struct LNode{ double data; struct LNode *next;}LNode,*LinkList;void InitList(LinkList &...原创 2020-02-20 01:40:21 · 4184 阅读 · 1 评论 -
递归求解单链表中的结点个数
#include <iostream>#include<iomanip>using namespace std;#define MAXSIZE 10000typedef struct LNode{ double data; struct LNode *next;}LNode,*LinkList;void InitList(LinkList &...原创 2020-02-20 01:39:21 · 5314 阅读 · 0 评论 -
递归求解单链表中的最大值
描述利用单链表表示一个整数序列,利用递归的方法求出单链表中整数的最大值。输入多组数据,每组数据有两行,第一行为链表的长度n,第二行为链表的n个元素(元素之间用空格分隔)。当n=0时输入结束。输出对于每组数据分别输出一行,输出每个链表的最大值。输入样例 141 2 3 45-1 2 39 2 30输出样例 1439#includ...原创 2020-02-20 01:38:11 · 7655 阅读 · 0 评论 -
Ackermann函数的非递归求值
描述已知Ackermann函数定义如下:写出计算Ack(m,n)的非递归算法。输入多组数据,每组数据有一行,为两个整数m和n。当m和n都等于0时,输入结束。输出每组数据输...原创 2020-02-20 01:37:14 · 3318 阅读 · 2 评论 -
Ackermann函数的递归求值
描述已知Ackermann函数定义如下:正在上传…重新上传取消写出计算Ack(m,n)的递归算法。输入多组数据,每组数据有一行,为两个整数m和n。当m和n都等于0时,输入结束。输出...原创 2020-02-19 13:52:12 · 2256 阅读 · 0 评论 -
基于两端操作的循环队列的实现
#include <iostream>using namespace std;#define MAXSIZE 100typedef struct{ int *base; int front; int rear;}SqQueue;int InitQueue(SqQueue &Q){ Q.base=new int[MAXSIZE]; if(!Q.base...原创 2020-02-19 13:51:08 · 2065 阅读 · 0 评论 -
附加判定标志的循环队列的基本操作
#include <iostream>using namespace std;#define MAXSIZE 100typedef struct{ int *base; int front; int rear; int tag;}SqQueue;int InitQueue(SqQueue &Q){ Q.base=new int[MAXSIZE]; ...原创 2020-02-19 13:50:01 · 1418 阅读 · 0 评论