数据结构-函数题

6-2.求二叉树的高度

本题要求给定二叉树的高度。

函数接口定义:

int GetHeight( BinTree BT );
typedef struct TNode *Position;
typedef Position BinTree;
struct TNode{ElementType Data;BinTree Left;BinTree Right;
};

要求函数返回给定二叉树BT的高度值。

裁判测试程序样例:

#include <stdio.h>
#include <stdlib.h>typedef char ElementType;
typedef struct TNode *Position;
typedef Position BinTree;
struct TNode{ElementType Data;BinTree Left;BinTree Right;
};BinTree CreatBinTree(); /* 实现细节忽略 */
int GetHeight( BinTree BT );int main()
{BinTree BT = CreatBinTree();printf("%d\n", GetHeight(BT));return 0;
}
/* 你的代码将被嵌在这里 */

 

输出样例(对于图中给出的树):

4

 求树的高度的代码 

/*分治思想求二叉树的高度
1.bt为空,则高度为0
2.bt非空,其高度应为其左右子树高度的最大值加1 
*/ 
int GetHeight( BinTree BT )
{int hl,hr,h;if(BT!=NULL){hl=GetHeight(BT->Left);hr=GetHeight(BT->Right);h=hl>hr?hl:hr;return h+1;} elsereturn 0;//若为空树 
}

R6-1 求采用邻接矩阵作为存储结构的无向图各顶点的度 

本题要求实现一个函数,输出无向图每个顶点的数据元素的值,以及每个顶点度的值。

函数接口定义:

void degree(MGraph G);

 G为采用邻接矩阵作为存储结构的无向图。

裁判测试程序样例:

#include <stdio.h>
#define MVNum 100                 //最大顶点数 
typedef struct{ char vexs[MVNum];           //存放顶点的一维数组 int arcs[MVNum][MVNum];     //邻接矩阵 int vexnum,arcnum;          //图的当前顶点数和边数 
}MGraph; 
void degree(MGraph G);
void CreatMGraph(MGraph *G);/* 创建图 */
int main()
{MGraph G;CreatMGraph(&G);degree(G);return 0;
}
void CreatMGraph(MGraph *G)
{int i,j,k;scanf("%d%d",&G->vexnum,&G->arcnum);getchar();for(i=0;i<G->vexnum;i++)scanf("%c",&G->vexs[i]);for(i=0;i<G->vexnum;i++)for(j=0;j<G->vexnum;j++)G->arcs[i][j]=0;for(k=0;k<G->arcnum;k++){  scanf("%d%d",&i,&j);     G->arcs[i][j]=1; G->arcs[j][i]=1; }
}/* 请在这里填写答案 */

输入样例:

例如无向图

无向图.png

第一行给出图的顶点数n和边数e。第二行给出n个字符,表示n个顶点的数据元素的值。后面是e行,给出每一条边的两个顶点编号。

4 5
ABCD
0 1
0 2
1 2
1 3
2 3

输出样例:

输出n个顶点的元素值,顶点的数据类型为字符型。以及各顶点的度值

A:2
B:3
C:3
D:2

 求各定点的度的代码

void degree(MGraph G)
{int i,j;for(i=0;i<G.vexnum;i++){int du=0;for(j=0;j<G.vexnum;j++){if(G.arcs[i][j]==1)//如果G.arcs[i][j]!=0,du++; {du++;}}printf("%c:%d\n",G.vexs[i],du);} 
}

 R6-1 求链式表的表长

本题要求实现一个函数,求链式表的表长。

函数接口定义:

int Length( List L );

L是给定单链表,函数Length要返回链式表的长度。

裁判测试程序样例:

#include <stdio.h>
#include <stdlib.h>typedef int ElementType;
typedef struct LNode *PtrToLNode;
struct LNode {ElementType Data;PtrToLNode Next;
};
typedef PtrToLNode List;List Read(); /* 细节在此不表 */int Length( List L );int main()
{List L = Read();printf("%d\n", Length(L));return 0;
}/* 你的代码将被嵌在这里 */

输入样例:

1 3 4 5 2 -1

输出样例:

5

 求表长代码

int Length( List L )
{LNode *p;p=L->Next;int len=0;while(p!=NULL){p=p->Next;len++;}return len;
}

 R6-2 求二叉树的深度

本题要求实现一个函数,可返回二叉树的深度。

函数接口定义:
int Depth(BiTree T);

T是二叉树树根指针,函数Depth返回二叉树的深度,若树为空,返回0。

裁判测试程序样例:


#include <stdio.h>
#include <stdlib.h>typedef char ElemType;
typedef struct BiTNode
{ElemType data;struct BiTNode *lchild, *rchild;
}BiTNode, *BiTree;BiTree Create();/* 细节在此不表 */int Depth(BiTree T);int main()
{BiTree T = Create();printf("%d\n", Depth(T));return 0;
}
/* 你的代码将被嵌在这里 */

输入样例:

输入为由字母和'#'组成的字符串,代表二叉树的扩展先序序列。例如对于如下二叉树,输入数据:

AB#DF##G##C##

输出样例(对于图中给出的树):

二叉树.png

4

 代码:


int Depth(BiTree T)
{int hl=0,hr=0,h;if(T){hl=Depth(T->lchild);hr=Depth(T->rchild);h=hl>hr?hl:hr;//其高度为左右子树高度的最大值+1 return h+1;}elsereturn 0;
}

 R6-2 顺序表的查找操作

本题要求实现一个函数,要求从顺序表中查找指定元素,并返回第一个查找成功的元素在表中的位置序号,若查找失败,则返回0;

函数接口定义:

int LocateElem(SqList L,ElemType e);

 其中SqList结构定义如下:

typedef struct{ElemType *elem;int length;}SqList;```### 裁判测试程序样例:
```c++
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 5
typedef int ElemType;
typedef struct{ElemType *elem;int length;}SqList;
void InitList(SqList &L);/*细节在此不表*/
int LocateElem(SqList L,ElemType e);int main()
{SqList L;InitList(L);ElemType e;int p;scanf("%d",&e);p=LocateElem(L,e);printf("The position of %d in SequenceList L is %d.",e,p);return 0;
}/* 请在这里填写答案 */

输入格式:

输入数据有1行,首先给出以-1结束的顺序表元素值(不超过100个,-1不属于顺序表元素),然后是待查找的元素值。所有数据之间用空格分隔。

输入样例:

2 6 4 9 13 -1 2

输出样例:

The position of 2 in SequenceList L is 1.

代码: 

int LocateElem(SqList L,ElemType e)
{int i;for(i=0;i<L.length;i++){if(L.elem[i]==e)//L.elem[i] {return i+1;}} return 0;
}

 R6-1 二叉树叶结点计数

实现一个函数,返回二叉树bt中叶结点的数量。

题目保证二叉树中所有元素均为整数。

裁判测试程序样例:

#include "stdio.h"
#include "stdlib.h"
struct BinTree{int data;struct BinTree *left;struct BinTree *right;
};
struct BinTree* createNode(int item){ //创建结点/* 函数实现细节省略*/
}
struct BinTree* findNode(struct BinTree *bt, int item){ //查找结点/*  函数实现细节省略*/
}
int insert(struct BinTree *bt, int parent, int dir,  int item){ //插入结点/*   实现细节仅供参考 */struct BinTree *tmp;tmp = findNode(bt, parent);if(!tmp) return 0;if(dir == 0){if(tmp->left) return 0;tmp->left = createNode(item);if(tmp->left == NULL) return 0;} else{if(tmp->right) return 0;tmp->right = createNode(item);if(tmp->right == NULL) return 0;}return 1;
}
struct BinTree* createBinTree(){ //创建二叉树/*  实现细节仅供参考 */int total, data;scanf("%d", &total);if(total == 0) return NULL;scanf("%d", &data);struct BinTree *bt;bt = createNode(data);if(!bt) return NULL;int parent, dir;for(int i=1; i<total; i++){scanf("%d%d%d", &parent, &dir, &data);insert(bt, parent, dir, data);}return bt;
}
int countLeaves(struct BinTree *bt);
int main(){struct BinTree *bt1, *bt2;bt1 = createBinTree();bt2 = createBinTree();printf("%d\n",countLeaves(bt1));printf("%d\n",countLeaves(bt2));return 0;
}/* 你提交的代码将被嵌入在这儿 */

输入样例:

tree.png

对于图片中的两棵二叉树以及样例测试程序的输入方式:

3
30
30 0 10
30 1 25
4
30
30 0 10
30 1 25
25 0 20

输出样例:

对于样例测试程序的输出方式:

2
2

 代码:

/*统计二叉树中叶子结点的数目并没,有次序要求,
可以用三种遍历中的任意一种来完成.
一、后序遍历统计 
叶子结点:既没有左孩子,又没有右孩子 
*/ 
int countLeaves(struct BinTree *bt)
{int cnt=0;if(bt!=NULL){countLeaves(bt->leftt);countLeaves(bt->right);if(bt->left==NULL&&bt->right==NULL){cnt++;}} return cnt;
}
/*
方法二:采用分治方法,如果二叉树为空树,返回0,
如果二叉树只有一个结点 ,返回1
否则为左右子树叶子结点的和 
*/
int countLeaves(struct BinTree *bt)
{int count=0;if(bt==NULL)return 0;else if(bt->left==NULL && bt->right==NULL)return count+1;else{count=countLeaves(bt->left)+countLeaves(bt->right);return count;}
}

 R6-1 按值查找单链表

本题要求实现一个函数,Locate_LinkList(LinkList L, datatype x)函数是在带头结点单链表中查找值为x的结点。函数须返回找到结点的指针,没有找到返回空。

函数接口定义:

LNode *Locate_LinkList(LinkList L, datatype x);

其中 L 和 x 都是用户传入的参数。 L 是单链表的头指针; x 是需要查找的值。函数须返回找到结点的指针,没有找到返回空。

裁判测试程序样例:

在这里给出函数被调用进行测试的例子。例如:
#define FLAG  -1
#include <stdio.h>
#include <malloc.h>
typedef int datatype;
typedef struct node
{datatype data;struct node *next;
}LNode, *LinkList;LinkList Creat_LinkList();/*这里忽略函数的实现*/LNode *Locate_LinkList(LinkList L, datatype x);int main()
{LinkList L;LNode *p=NULL;int x;    L = Creat_LinkList();if(L == NULL){ printf("L=NULL,error!"); return 0;  }scanf("%d",&x);if(p=Locate_LinkList(L,x)) printf("%d",p->data);else printf("NOT");return 0;
}/* 请在这里填写答案 */

输入样例:

在这里给出一组输入。例如:

1 2 3 4 5 6 7 8 9 10 -1
8

输出样例:

在这里给出相应的输出。例如:

8

代码:

LNode *Locate_LinkList(LinkList L, datatype x)
{LNode *p;p=L->next;while(p!=NULL&&p->data!=x)//当它不为空并这个数据值不等于x {p=p->next;//则找下一个 }return p;//返回找到该节点的指针 
}

 R6-1 二叉树的遍历

本题要求给定二叉树的4种遍历。

函数接口定义:

void InorderTraversal( BinTree BT );
void PreorderTraversal( BinTree BT );
void PostorderTraversal( BinTree BT );
void LevelorderTraversal( BinTree BT );

 要求4个函数分别按照访问顺序打印出结点的内容,格式为一个空格跟着一个字符

裁判测试程序样例:

#include <stdio.h>
#include <stdlib.h>typedef char ElementType;
typedef struct TNode *Position;
typedef Position BinTree;
struct TNode{ElementType Data;BinTree Left;BinTree Right;
};BinTree CreatBinTree(); /* 实现细节忽略 */
void InorderTraversal( BinTree BT );
void PreorderTraversal( BinTree BT );
void PostorderTraversal( BinTree BT );
void LevelorderTraversal( BinTree BT );int main()
{BinTree BT = CreatBinTree();printf("Inorder:");    InorderTraversal(BT);    printf("\n");printf("Preorder:");   PreorderTraversal(BT);   printf("\n");printf("Postorder:");  PostorderTraversal(BT);  printf("\n");printf("Levelorder:"); LevelorderTraversal(BT); printf("\n");return 0;
}
/* 你的代码将被嵌在这里 */

输出样例(对于图中给出的树):

Inorder: D B E F A G H C I
Preorder: A B D F E C G H I
Postorder: D E F B H G I C A
Levelorder: A B C D F G I E H

 

void InorderTraversal( BinTree BT )//中序遍历 (左 根 右)
{if(BT!=NULL){InorderTraversal(BT->Left);printf(" %c",BT->Data);InorderTraversal(BT->Right);} 
}
void PreorderTraversal( BinTree BT )//前序遍历 (根 左 右) 
{if(BT!=NULL){printf(" %c",BT->Data);PreorderTraversal(BT->Left);PreorderTraversal(BT->Right); } 
}
void PostorderTraversal( BinTree BT )//后序遍历 (左 右 根)
{if(BT!=NULL){PostorderTraversal(BT->Left);PostorderTraversal(BT->Right);printf(" %c",BT->Data);}
}
void LevelorderTraversal( BinTree BT )//层序遍历 
{BinTree a[11000];a[0]=BT;int len=1;if(!BT){return;}while(1){if(len==0)return ;int pos=0;BinTree b[11000];for(int i=0;i<len;i++){if(a[i]!=NULL)printf(" %c",a[i]->Data);if(a[i]->Left!=NULL)b[pos++]=a[i]->Left;if(a[i]->Right!=NULL)b[pos++]=a[i]->Right; }len=pos;for(i=0;i<len;i++)a[i]=b[i];}
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/609102.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

国产系统-银河麒麟桌面版安装wps

0安装版本 系统版本 版本名称:银河麒麟桌面版操作系统V10(SP1) 软件版本 wps个人版2019 1双击安装 1.1卸载自带wps 为什么要卸载没有序列号,授权过期,不是免费的,通过先安装/在升级个人版跳过输入序列号问题等等原因 1.1.1当前自带的wps版本 1.1.2卸载 不卸载无法安装在…

6.1 截图工具HyperSnap6简介

图片是组成多媒体作品的基本元素之一&#xff0c;利用图片可以增强多媒体作品的亲和力和说说服力。截取图片最简单的方法是直接按下键盘上的“PrintScreen”键截取整个屏幕或按下“AltPrintScreen”组合键截取当前活动窗口&#xff0c;然后在画笔或者其它的图片处理软件中进行剪…

解决word图片格式错乱、回车图片不跟着换行的问题

解决word图片格式错乱、回车图片不跟着换行的问题 1.解决方法。 先设置为嵌入型 但是设置的话会出现下面的问题。图片显示不全。 进一步设置对应的行间距&#xff0c;原先设置的是固定值&#xff0c;需要改为1.5倍行距的形式&#xff0c;也就是说不能设置成固定值就可以。

爬取猫咪交易网

爬取猫咪品种&#xff0c;价格等在售数据 代码展现&#xff1a; 具体代码&#xff1a; import requests import re import os filename 声音// if not os.path.exists(filename): os.mkdir(filename) def down_load(page): for page in range(page): page …

各类Java对象

概念的混淆: 新一代的开发者&#xff0c;学习某一概念的不同描述或是案例后&#xff0c;人脑会去抽象、提取其特征。这一过程可能造成语义扩散、概念扭曲。这是一个盲人摸象的过程。 写到这里时&#xff0c;我在想&#xff1a;“盲人摸象”与“抽象”的“象”是不是一个意思呢&…

灵魂三连问:是5G卡吗?支持5G吗?是5G套餐吗

关于5G的问题&#xff0c;小伙伴们的疑问是不是很多&#xff0c;它和4G到底有什么区别呢&#xff1f;什么是5G卡&#xff1f;什么是5G套餐&#xff1f;支持5G吗&#xff1f;什么是5G基站&#xff1f;我想大家现在一定是晕的&#xff0c;下面小编来给大家解惑&#xff01; 1&…

【elfboard linux 开发板】9. 虚拟机扩容和内核编译

1. 虚拟机扩容 需要将虚拟机的快照全都删除&#xff0c;并且将运行的系统关机点击扩展&#xff0c;改为需要的磁盘大小安装gparted工具 sudo apt-get install gparted 如果报错&#xff0c;则按照出错内容修改&#xff0c;一般是出现下载错误&#xff0c;可以使用下列命令&…

Ubuntu22.04安装VTK8.2

1. 安装ccmake 和 VTK 的依赖项&#xff1a; sudo apt-get install cmake-curses-gui sudo apt-get install freeglut3-dev2.下载VTK-8.2.0库 VTK官方网址 自己选择合适的版本进行下载&#xff0c;解压到VTK文件夹下&#xff0c;再新建文件下名为build 3. 配置VTK 进入buil…

强化学习Double DQN方法玩雅达利Breakout游戏完整实现代码与评估pytorch

1. 实验环境 1.1 硬件配置 处理器&#xff1a;2*AMD EPYC 7773X 64-Core内存&#xff1a;1.5TB显卡&#xff1a;8*NVIDIA GeForce RTX 3090 24GB 1.2 工具环境 Python&#xff1a;3.10.12Anaconda&#xff1a;23.7.4系统&#xff1a;Ubuntu 22.04.3 LTS (GNU/Linux 5.15.0-…

软件测试|解决‘pip‘ 不是内部或外部命令,也不是可运行的程序或批处理文件

前言 很多Python初学者在使用Python时&#xff0c;会遇到环境的问题&#xff0c;比如无法使用pip命令安装第三方库的问题&#xff0c;如下图&#xff1a; 当出现错误信息 "pip 不是内部或外部命令&#xff0c;也不是可运行的程序或批处理文件" 时&#xff0c;这通常…

echarts柱状图加单位,底部文本溢出展示

刚开始设置了半天都不展示单位&#xff0c;后来发现是被挡住了&#xff0c;需要调高top值 // 基于准备好的dom&#xff0c;初始化echarts实例var myChart echarts.init(document.getElementById("echartD"));rankOption {// backgroundColor: #00265f,tooltip: {…

树定义及遍历

1、定义树 可以参考链表&#xff0c;链表遍历不方便&#xff0c;如果单链表有多个next指针&#xff0c;则就形成了树。 Java: public class TreeNode {int val;TreeNode left, right;TreeNode(int val) { this.val val; this.left null;this.right null;} } Python&#…

WIN32 桌面应用编程综合实验一学习记录

文章目录 引用传递和指针传递的区别和联系如何创建一个空的WINDOWS桌面项目C编程中函数声明、定义和链接的基本概念 引用传递和指针传递的区别和联系 case ID_SETTING_FONT:GetDrawFont(hWnd, gs_logFont, &gs_TextColor); break;logFont 和 pColor 的用法体现了 C 中两种…

stm32的规则采样与注入采样的理解

规则与注入转换 在STM32中&#xff0c;规则采样&#xff08;Regular Conversion&#xff09;和注入采样&#xff08;Injected Conversion&#xff09;是用于模数转换的两种不同模式。 规则采样&#xff08;Regular Conversion&#xff09;&#xff1a;规则采样是STM32中最常用…

面试算法105:最大的岛屿

题目 海洋岛屿地图可以用由0、1组成的二维数组表示&#xff0c;水平或竖直方向相连的一组1表示一个岛屿&#xff0c;请计算最大的岛屿的面积&#xff08;即岛屿中1的数目&#xff09;。例如&#xff0c;在下图中有4个岛屿&#xff0c;其中最大的岛屿的面积为5。 分析 将岛屿…

山东名岳轩印刷包装携专业包装袋盛装亮相2024济南生物发酵展

山东名岳轩印刷包装有限公司盛装亮相2024第12届国际生物发酵展&#xff0c;3月5-7日山东国际会展中心与您相约&#xff01; 展位号&#xff1a;1号馆F17 山东名岳轩印刷包装有限公司是一家拥有南北两个生产厂区&#xff0c;设计、制版、印刷&#xff0c;营销策划为一体的专业…

JavaSec基础 反射修改Final修饰的属性及绕过高版本反射限制

反射重拾 半年没碰java了 先写点基础回忆一下 反射弹计算器 public class Test {public static void main(String[] args) throws Exception {Class<?> clazz Class.forName("java.lang.Runtime");clazz.getDeclaredMethod("exec", String.cla…

springBoot-自动配置原理

以下笔记内容&#xff0c; 整理自B站黑马springBoot视频&#xff0c;抖音Holis 1、自动配置原理 1.收集Spring开发者的编程习惯&#xff0c;整理开发过程使用的常用技术列表一>(技术集A) 2.收集常用技术(技术集A)的使用参数&#xff0c;整理开发过程中每个技术的常用设置列表…

灵活轻巧的java接口自动化测试实战

前言 无论是自动化测试还是自动化部署&#xff0c;撸码肯定少不了&#xff0c;所以下面的基于java语言的接口自动化测试&#xff0c;要想在业务上实现接口自动化&#xff0c;前提是要有一定的java基础。 如果没有java基础&#xff0c;也没关系。这里小编也为大家提供了一套jav…

U盘、硬盘无法打开,修复RAW磁盘或分区,硬盘变成raw格式如何恢复,数据恢复

本文持续更新&#xff0c;针对遇到的数据丢失问题进行详细记录 磁盘变成RAW的可能原因 突然断电或关机文件系统丢失或损坏病毒或恶意软件感染坏扇区磁盘损坏 以下解决方案针对非病毒损坏 通过Windows自带的工具进行恢复&#xff08;CHKDSK命令&#xff09; 1.连接硬盘 2.…