吉林大学 考研真题答案 2015-2014-2013-2012年 966答案源码

2023-11-21 00:30

本文主要是介绍吉林大学 考研真题答案 2015-2014-2013-2012年 966答案源码,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

吉林大学 考研真题答案 2015-2014-2013-2012年 966答案源码
所有的源码均可以上机运行!!
王道论坛 吉林大学板块 被某些人操控了 我发的所有关于答案部分全给我审核不通过。。。
咱也不知道为什么 哈哈 只能来这分享了!!
希望对考研的同学们有些帮助!

2015-966
int Stack[1000];
int Top = -1;
void Search(struct BTreeNode* root,struct BTreeNode* Target)
{  if(root == NULL)return;
Stack[++Top] = root->data;if(root->data == Target->data){for(int i = Top;i>=0;i--)printf("%d ",Stack[i]);return;}if(root->left!=NULL){Search(root->left, Target);Top--;}if(root->right!=NULL){Search(root->right,Target); Top--;}return;
}
时间复杂度O(n);2014-966给出二叉树的自下而上自右而左的层次遍历算法。
1)描述算法基本思想;(3‘)
2)设置二叉树的存储结构(2‘)
3)基于以上设计的存储结构,用算法描述语言描述算法,求要求对算法的关键步骤给出注释。
算法思想:只需设一个栈,自左向右自上而下将遍历的元素依次存放到栈中,出栈顺序就为自下而上    //自右而左了。typedef struct BTNode{int data;			//数据域struct BTNode* left, *right;	//左右孩子指针}BTNode;		//数据类型void level( BTNode* r ){BTNode* que[maxsize];		//定义队列,这里队列从队尾向前输出相当于栈int front = -1, rear = -1;	//队首与队尾指针if( r!=NULL ){que[++rear] = r;while( rear!=front ){r = que[++front];if( r->left!=NULL)	//左子树不为空,则左孩子入队que[++rear] = r->left;if( r->right!=NULL )//右子树不为空,右孩子入队que[++rear] = r->right;}for( int i = top; top>=0; i-- )printf("%d ", que[i]->data);	//自下而上自右向左遍历结点prinf("\n");	//换行}}给定连通图G和G中的一个结点,求G的支撑树T。并使其满足如下两个条件:
第一:T的根为v;第二:T的层次遍历次序恰好是以v为起点的G的某个广度优先遍历次序。要求
1)描述算法基本思想;(2‘)
2)设计图G和支撑树T的存储结构(4’)
3)基于以上的设计的存储结构,用算法描述语言描述算法。并要求对算法中的关键步骤给出注释。
算法思想:要得到的支撑树与连通图G的dfs遍历次序一样,只要按照dfs遍历次序建立支撑树就行了,定义一个队列存储dfs遍历的节点。同时为了依附同一一顶点的边作为顶点的子树,需设置一个标志数组Mark[]标记顶点是否为优先遍历顶点的子树。若是则标志数组置1,否则为0图G的存储结构:typedef struct ArcNode{int adjvex;struct ArcNode* nextarc;}ArcNode;		//边表结点类型typedef struct VNode{ArcNode* firstarc;	//指向第一条边}VNode;		//顶点表结点类型typedef struct {VNode adjlist[maxsize];	//邻接表int n, e;	//顶点及边数目}AGraph; 		//图的邻接表存储支撑树T的存储结构:typedef struct TNode{int childnum;		//孩子编号struct TNode* nextchild;	//顶点的子节点指针,采用邻接表存储}TNode;	//孩子结点类型typedef struct parent{TNode* firstchild;	//指向第一个孩子}parent;	//父亲节点类型typedf struct{parent pnode[maxsize];	int n;	//树结点的个数}Tree;	//树的单链表表示void bfsTree( AGraph* g, int v, Tree* root){int mark[maxsize] = {0};	//标志数组,初始化为0int que[maxsize], front = -1, rear = -1, i;ArcNode* p;que[++rear] = v;		//起始点v先入队while(front!=NULL){i = que[++front];	//v出队mark[i] = 1;	//表示顶点i被访问过TNode* s = NUll;	for( p = g->adjlist[i].firstarc; p; p = p->nextarc ){		//按照bfs遍历次序建立支撑树if(mark[p->adjvex]==0){s = createlist(s);		//后插法建立链表存储以父节点为顶点的孩子链表,并返回第一个孩子指针que[++rear] = p->adjvex;}pnode[i]->fistchild = s;		//父顶点指向第一个孩子}}}
2013-9664、int Stack[1000];
int Top = -1;
void Search(struct BTreeNode* root,struct BTreeNode* Target)
{if(root == NULL)return;Stack[++Top] = root->data;if(root->data == Target->data){for(int i = Top;i>=0;i--)printf("%d ",Stack[i]);return;}if(root->left!=NULL){Search(root->left, Target);Top--;}if(root->right!=NULL){Search(root->right,Target);Top--;}return;
}
时间复杂度O(n);
2012-966设计一个算法,以求出无向无权连通图G={V,E}中,距离顶点v最短路径长度为k的所有顶点,路径长
度以边数为单位计算,图G采用邻接表存储。
算法思想:以v为起点对图G进行bfs,同时并给每个顶点按相对起始点长度编号,对应的编号相当于到顶点v的路径长度。就得定义一个队列,该队列元素数据类型为(vex,lno),vex为顶点号,lno为层次号。
定义数据存储结构:typedef struct ArcNode{int adjvex;struct ArcNode* nextarc;}ArcNode;		//边结点typedef struct VNode{ArcNode* firstarc;	//指向第一条邻接边}VNode;typedef struct{VNode adjlist[maxsize];	//邻接表的顶点int n, e;	//n为顶点数目,e为边数}AGraph;	//图的邻接表存储typedef struct{int vex;	//顶点号int lno;	//层次号}St;	//队列数类型void bfs( AGraph* g, int v, int k)	//v为起始点,k为相对v长度为k{ ArcNode* p;St que[maxsize];int visit[maxsize] = {0},front = -1, rear = -1, i, Lno = 1;//visit为标记数组,为0表示为被访问过,为1表示已被访问过que[++rear].vex = v;que[rear].lno = Lno;	//起始点入队while( rear!=front ){i = que[++front].vex;	//元素出队visit[i] = 1;Lno = que[front].lno;if( Lno==k ){printf("%d ", i);	//输出离v最短路径为k的结点}for( p = g->adjlist[i].firstarc; p!=NULL; p = p->nextarc )if(visit[p->adjvex]==0){	//未被访问过的邻接点入队que[++rear].vex = p->adjvex;que[rear].lno = Lno+1;}}	}已知一个带有表头结点的单链表,结点结构为(data, link)。假设该链表只给出了头指针list。
在不改变链表的前提下,请设计一个尽可能高效的算法,找出链表中倒数第k个位置上的结点。若查找
成功,算法输出结点data域的值,并返回1;否则,只返回0.要求:
1)描述算法基本思想;(3‘)
2)用算法描述语言描述算法(6‘)
3)给出算法的时间复杂性分析(3‘)
算法思想:先定义一个足够长大数组A[],数组类型与结点数据域类型一致,从首结点开始遍历链表,每遍历一个结点,同时将结点数据域的值存放到数组A中,直到链表遍历结束,存放链表最后一个结点p数据域部分值的数组A就能确定链表的长度。设链表的长度为len,若len>k, 则输出结点值并返回1,否则返回0typedef struct LNode{int data;struct LNode* link;}LNode;		//链表结构定义int printNum( LNode* list, int k ){int A[maxsize], i = 0;for( LNode* p = list; p; p = p->link )A[i++] = p->data;if(i>k){				//此时的i为链表的长度printf("%d\n", A[i-k]);	return 1;			//查找成功}else return 0;			//查找失败}二叉树以链表形式(left, data, right)存储,给出求二叉树宽度的算法。二叉树的宽度是指二叉树
的各层上,具有结点数最多那一层上的结点总数。
算法思想:可定义一个计数数组levelnum(初始化为0),对二叉树遍历的时候,每遍历同一层时,下边对应的levenum[]增1来记录同一层结点的数目。二叉树遍历采用先根遍历typedef struct BTNode{int data;BTNode* left, *right;}BTNode;		//数据类型定义int levelnum[maxsize] = {0};	//初始化计数器为0void preTraverse( BTNode *r, int n )	//先根遍历,r为根结点指针,n为r对应二叉树的层次号{if( r!=NULL ){levelnum[n]++;preTraverse( r->left, n+1 );	//遍历左子树preTraverse( r->right,n+1 );	//遍历右子树}}	int BiTreewidth( int levelnum[] ){int i = 0, max = 0; while(levelnum[i]!=0){if(max<levelnum[i])max = levelnum[i];i++;}return max;		//返回二叉树宽度}

在这里插入图片描述
在这里插入图片描述

这篇关于吉林大学 考研真题答案 2015-2014-2013-2012年 966答案源码的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/398535

相关文章

Go中sync.Once源码的深度讲解

《Go中sync.Once源码的深度讲解》sync.Once是Go语言标准库中的一个同步原语,用于确保某个操作只执行一次,本文将从源码出发为大家详细介绍一下sync.Once的具体使用,x希望对大家有... 目录概念简单示例源码解读总结概念sync.Once是Go语言标准库中的一个同步原语,用于确保某个操

Java汇编源码如何查看环境搭建

《Java汇编源码如何查看环境搭建》:本文主要介绍如何在IntelliJIDEA开发环境中搭建字节码和汇编环境,以便更好地进行代码调优和JVM学习,首先,介绍了如何配置IntelliJIDEA以方... 目录一、简介二、在IDEA开发环境中搭建汇编环境2.1 在IDEA中搭建字节码查看环境2.1.1 搭建步

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟&nbsp;开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚&nbsp;第一站:海量资源,应有尽有 走进“智听

Java ArrayList扩容机制 (源码解读)

结论:初始长度为10,若所需长度小于1.5倍原长度,则按照1.5倍扩容。若不够用则按照所需长度扩容。 一. 明确类内部重要变量含义         1:数组默认长度         2:这是一个共享的空数组实例,用于明确创建长度为0时的ArrayList ,比如通过 new ArrayList<>(0),ArrayList 内部的数组 elementData 会指向这个 EMPTY_EL

如何在Visual Studio中调试.NET源码

今天偶然在看别人代码时,发现在他的代码里使用了Any判断List<T>是否为空。 我一般的做法是先判断是否为null,再判断Count。 看了一下Count的源码如下: 1 [__DynamicallyInvokable]2 public int Count3 {4 [__DynamicallyInvokable]5 get

poj 3104 二分答案

题意: n件湿度为num的衣服,每秒钟自己可以蒸发掉1个湿度。 然而如果使用了暖炉,每秒可以烧掉k个湿度,但不计算蒸发了。 现在问这么多的衣服,怎么烧事件最短。 解析: 二分答案咯。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <c

工厂ERP管理系统实现源码(JAVA)

工厂进销存管理系统是一个集采购管理、仓库管理、生产管理和销售管理于一体的综合解决方案。该系统旨在帮助企业优化流程、提高效率、降低成本,并实时掌握各环节的运营状况。 在采购管理方面,系统能够处理采购订单、供应商管理和采购入库等流程,确保采购过程的透明和高效。仓库管理方面,实现库存的精准管理,包括入库、出库、盘点等操作,确保库存数据的准确性和实时性。 生产管理模块则涵盖了生产计划制定、物料需求计划、

ZOJ Monthly, August 2014小记

最近太忙太忙,只能抽时间写几道简单题。不过我倒是明白要想水平提高不看题解是最好的了。 A  我只能死找规律了,无法证明 int a[50002][2] ;vector< vector<int> > gmax , gmin ;int main(){int n , i , j , k , cmax , cmin ;while(cin>>n){/* g

2014 Multi-University Training Contest 8小记

1002 计算几何 最大的速度才可能拥有无限的面积。 最大的速度的点 求凸包, 凸包上的点( 注意不是端点 ) 才拥有无限的面积 注意 :  凸包上如果有重点则不满足。 另外最大的速度为0也不行的。 int cmp(double x){if(fabs(x) < 1e-8) return 0 ;if(x > 0) return 1 ;return -1 ;}struct poin

2014 Multi-University Training Contest 7小记

1003   数学 , 先暴力再解方程。 在b进制下是个2 , 3 位数的 大概是10000进制以上 。这部分解方程 2-10000 直接暴力 typedef long long LL ;LL n ;int ok(int b){LL m = n ;int c ;while(m){c = m % b ;if(c == 3 || c == 4 || c == 5 ||