文档视界 最新最全的文档下载
当前位置:文档视界 › 实验六 二叉树实验报告(1)

实验六 二叉树实验报告(1)

实验六 二叉树实验报告(1)
实验六 二叉树实验报告(1)

正交鉴频器实验报告

正交鉴相鉴频器 实验报告 一. 设计方案: 1. 实验原理: 先将调频波经过一个移相网络变换成调相调频波,然后再与原调频波一起加到一个相位检波器进行鉴频。 利用模拟乘法器的相乘原理可以实现乘积型相位检波: 输入信号 ()cos(sin )s sm c f v t V t m t ω=+Ω 移相后的信号为: ''' ()cos{sin [ ()]} 2 sin[sin ()] s sm c f sm c f v t V t m t V t m t π ω?ωω?ω=+Ω++=+Ω+ 得到的输出信号 '' 1()KV sin[2(sin )()] 2 1 V sin () 2 o sm sm c F sm sm v t V t m t K V ω?ω?ω=+Ω++ 其中第一项为高频分量,可以用滤波器滤掉,第二项是所需的频率分量。只要线性移相网络的相频特性()?ω在调频波的频率变化范围内是线性的,当 ()0.4rad ?ω≤时,sin ()()?ω?ω≈。因此,鉴频器的输出电压()o v t 的变化规 律与调频波瞬时频率的变化规律相同,从而实现了相位鉴频。 2. 各部分电路具体实现: 鉴相鉴频器主要由三部分组成:移相网络,模拟相乘器和低频放大器。具体电路实现如下: (1) 移相网络: v D (t)

用LC 谐振回路实现移相网络,使输入信号移相90°。谐振回路的谐振频率为中频频率2.455MHz 。 (2) 模拟相乘器 用MC1496构成相乘器,使输入的两路正交信号相乘。1,4管脚和8,10管脚间分别接有电位器R2和R5用来调节输入直流平衡。电源处C7,C8和L2构成 型滤波网络,R12和C9起级间去耦作用。 (3) 低频放大器: 用LM741运放来放大输入调制信号,同时运放还能起到低通滤波以及隔离的作用。通过调节相应的电阻值可以改变放大的倍数。在运放的两个输入端2脚和3脚加上两个隔直电容,可以滤去直流分量,以保证运放的工作点正确。R21和C15构成低通滤波器。 L2 R13R12

数据结构实验六二叉树操作代码实现

#include using namespace std; #define MAXLEN 20 //最大长度 int num; typedef char DATA;//定义元素类型 struct CBTType// 定义二叉树结点类型 { DATA data;//元素数据 CBTType * left;//左子树结点指针 CBTType * right;//右子树结点指针 int leftSize = 0; }; /*********************初始化二叉树***********************/ CBTType *InitTree() { CBTType * node; if (node = new CBTType)//申请内存 { num++; cout << "请先输入一个根节点数据:" << endl; cin >> node->data; node->left = NULL; node->right = NULL; if (node != NULL)//如果二叉树结点不为空 { return node; } else { return NULL; } } return NULL; } /***********************查找结点*************************/ CBTType *TreeFindNode(CBTType *treeNode, DATA data) { CBTType *ptr; if (treeNode == NULL) { return NULL; } else {

if (treeNode->data == data) { return treeNode; } else//分别向左右子树查找 { if (ptr = TreeFindNode(treeNode->left, data))//左子树递归查找 { return ptr; } else if (ptr = TreeFindNode(treeNode->right, data))//右子树递归查找 { return ptr; } else { return NULL; } } } } /**********************添加结点*************************/ void AddTreeNode(CBTType *treeNode) { CBTType *pnode, *parent; DATA data; char menusel; if (pnode = new CBTType) //分配内存 { cout << "输入添加的二叉树结点数据:" << endl; cin >> pnode->data; pnode->left = NULL; //设置左子树为空 pnode->right = NULL; //设置左子树为空 cout << "输入该结点的父结点数据:" << endl; cin >> data; parent = TreeFindNode(treeNode, data); //查找父结点,获得结点指针 if (!parent) //没找到 { cout << "没有找到父结点!" << endl; delete pnode; return; } cout << "**********************" << endl;

数据结构二叉树实验报告

实验三二叉树的遍历 一、实验目的 1、熟悉二叉树的结点类型和二叉树的基本操作。 2、掌握二叉树的前序、中序和后序遍历的算法。 3、加深对二叉树的理解,逐步培养解决实际问题的编程能力。 二、实验环境 运行C或VC++的微机。 三、实验内容 1、依次输入元素值,以链表方式建立二叉树,并输出结点的值。 2、分别以前序、中序和后序遍历二叉树的方式输出结点内容。 四、设计思路 1. 对于这道题,我的设计思路是先做好各个分部函数,然后在主函数中进行顺序排列,以此完成实验要求 2.二叉树采用动态数组 3.二叉树运用9个函数,主要有主函数、构建空二叉树函数、建立二叉树函数、访问节点函数、销毁二叉树函数、先序函数、中序函数、后序函数、范例函数,关键在于访问节点 五、程序代码 #include #include #include #define OK 1 #define ERROR 0 typedef struct TNode//结构体定义 {

int data; //数据域 struct TNode *lchild,*rchild; // 指针域包括左右孩子指针 }TNode,*Tree; void CreateT(Tree *T)//创建二叉树按,依次输入二叉树中结点的值 { int a; scanf("%d",&a); if(a==00) // 结点的值为空 *T=NULL; else // 结点的值不为空 { *T=(Tree)malloc(sizeof(TNode)); if(!T) { printf("分配空间失败!!TAT"); exit(ERROR); } (*T)->data=a; CreateT(&((*T)->lchild)); // 递归调用函数,构造左子树 CreateT(&((*T)->rchild)); // 递归调用函数,构造右子树 } } void InitT(Tree *T)//构建空二叉树 { T=NULL; } void DestroyT(Tree *T)//销毁二叉树 { if(*T) // 二叉树非空 { DestroyT(&((*T)->lchild)); // 递归调用函数,销毁左子树 DestroyT(&((*T)->rchild)); // 递归调用函数,销毁右子树 free(T); T=NULL; } } void visit(int e)//访问结点 { printf("%d ",e); }

正交鉴频器设计实验报告(demo)

16MHz 调频接收机的设计 无43 孙忆南2004011007 第一部分:正交鉴频器的设计装调 设计指标与要求: 使用MC1496 设计正交鉴相鉴频器,能够解调50mV e.m.f,调制信号1kHz,频偏20kHz,载频为1.709MHz 的调频信号,对于寄生调幅的抑制没有要求。提供的主要器件为MC1496,LM741,10x10 型50uH中周。 一、实验目的: 1.加深对相乘器工作原理的认识; 2.掌握正交鉴相鉴频器的工程设计方法; 3.掌握用频率特性测试仪调试移相网络和鉴频特性曲线的方法。 二、正交鉴频器的电路设计 2.1 正交鉴频器的工作原理 常见的鉴频器有双失谐鉴频器,比例鉴频器,正交鉴相鉴频器等。其核心都是将调频波转化为调频调幅波或调频调相波。其中,正交鉴相鉴频器性能较好,便于集成化,应用逐渐广泛,其他两种形式一般只在过去的分立元件电路中应用。 正交鉴相鉴频器由移相网络和鉴相器构成。 2.2 移相网络 使用LC 谐振回路构成的移相网络。如图1 所示。 图1 图2

由电路分析,可以知道:≈)(jf H 常数,0022)(f f f Q f --≈ π?,) (21210C C L f +=π完成了调频波到调频调相波的转换。 由 f 0 =1.704MHz ,L = 50μH ,计算得到C 1 ≈170 pF 。取C2=8.2pF 。 2.3 鉴相器 采用模拟相乘器构成。常用的模拟相乘器有LM1496。内部电路见图2。LM1496 内部没有偏置电路,需要外接,偏置电路见图3。Q9,Q8,Q7 构成镜像电流源,由5脚设置工作电流,一般为1mA 。外接电阻Ω=Ω--=k I V R S EE 8.65007 .08。1,4脚经小电阻接地,电位为0。 8,10脚接到R9,R14分压,电位为+6V 。输出端负载电阻取3.3K ,电位约为8.7V 。由此,可以判断各个晶体管均工作在放大区。2,3脚之间为增益调整电阻,取1K ,为中等的增益。 图3 2.4 移相网络和鉴相器的连接 对于 LM1496,1,4脚的输入阻抗较高,8,10脚的输入阻抗较低,因此将移相网络的输出接至1,4脚,这样对于移相网络的Q 值影响较小。由于乘法器的每个端均为双端平衡输入,因此将8脚,4脚交流接地,转为单端输入。1,4脚的输入利用了L1作为直流通路,避免了较小的偏置电阻R3的影响。 2.5 低放和电源 低放采用LM741接成差分放大器的形式,和LM1496 采用直流耦合,这样便于调试鉴相器的平衡。低放输入端采用简单的一阶RC 滤波,截止频率为 kHz p k RC f c 104700*3.3*2121≈==ππ

树和二叉树实验报告

树和二叉树 一、实验目的 1.掌握二叉树的结构特征,以及各种存储结构的特点及适用范围。 2.掌握用指针类型描述、访问和处理二叉树的运算。 二、实验要求 1.认真阅读和掌握本实验的程序。 2.上机运行本程序。 3.保存和打印出程序的运行结果,并结合程序进行分析。 4.按照二叉树的操作需要,重新改写主程序并运行,打印出文件清单和运 行结果。 三、实验内容 1.输入字符序列,建立二叉链表。 2.按先序、中序和后序遍历二叉树(递归算法)。 3.按某种形式输出整棵二叉树。 4.求二叉树的高度。 5.求二叉树的叶节点个数。 6.交换二叉树的左右子树。 7.借助队列实现二叉树的层次遍历。 8.在主函数中设计一个简单的菜单,分别调试上述算法。 为了实现对二叉树的有关操作,首先要在计算机中建立所需的二叉树。建立二叉树有各种不同的方法。一种方法是利用二叉树的性质5来建立二叉树,输入数据时要将节点的序号(按满二叉树编号)和数据同时给出:(序号,数据元素0)。另一种方法是主教材中介绍的方法,这是一个递归方法,与先序遍历有点相似。数据的组织是先序的顺序,但是另有特点,当某结点的某孩子为空时以字符“#”来充当,也要输入。若当前数据不为“#”,则申请一个结点存入当前数据。递归调用建立函数,建立当前结点的左右子树。 四、解题思路 1、先序遍历:○1访问根结点,○2先序遍历左子树,○3先序遍历右子树 2、中序遍历:○1中序遍历左子树,○2访问根结点,○3中序遍历右子树 3、后序遍历:○1后序遍历左子树,○2后序遍历右子树,○3访问根结点 4、层次遍历算法:采用一个队列q,先将二叉树根结点入队列,然后退队列,输出该结点;若它有左子树,便将左子树根结点入队列;若它有右子树,便将右子树根结点入队列,直到队列空为止。因为队列的特点是先进后出,所以能够达到按层次遍历二叉树的目的。 五、程序清单 #include #include #define M 100

数据结构实验二叉树

实验六:二叉树及其应用 一、实验目的 树是数据结构中应用极为广泛的非线性结构,本单元的实验达到熟悉二叉树的存储结构的特性,以及如何应用树结构解决具体问题。 二、问题描述 首先,掌握二叉树的各种存储结构和熟悉对二叉树的基本操作。其次,以二叉树表示算术表达式的基础上,设计一个十进制的四则运算的计算器。 如算术表达式:a+b*(c-d)-e/f 三、实验要求 如果利用完全二叉树的性质和二叉链表结构建立一棵二叉树,分别计算统计叶子结点的个数。求二叉树的深度。十进制的四则运算的计算器可以接收用户来自键盘的输入。由输入的表达式字符串动态生成算术表达式所对应的二叉树。自动完成求值运算和输出结果。四、实验环境 PC微机 DOS操作系统或 Windows 操作系统 Turbo C 程序集成环境或 Visual C++ 程序集成环境 五、实验步骤 1、根据二叉树的各种存储结构建立二叉树; 2、设计求叶子结点个数算法和树的深度算法; 3、根据表达式建立相应的二叉树,生成表达式树的模块; 4、根据表达式树,求出表达式值,生成求值模块; 5、程序运行效果,测试数据分析算法。 六、测试数据 1、输入数据:*(+)3 正确结果: 2、输入数据:(1+2)*3+(5+6*7);

正确输出:56 七、表达式求值 由于表达式求值算法较为复杂,所以单独列出来加以分析: 1、主要思路:由于操作数是任意的实数,所以必须将原始的中缀表达式中的操作数、操作符以及括号分解出来,并以字符串的形式保存;然后再将其转换为后缀表达式的顺序,后缀表达式可以很容易地利用堆栈计算出表达式的值。 例如有如下的中缀表达式: a+b-c 转换成后缀表达式为: ab+c- 然后分别按从左到右放入栈中,如果碰到操作符就从栈中弹出两个操作数进行运算,最后再将运算结果放入栈中,依次进行直到表达式结束。如上述的后缀表达式先将a 和b 放入栈中,然后碰到操作符“+”,则从栈中弹出a 和b 进行a+b 的运算,并将其结果d(假设为d)放入栈中,然后再将c 放入栈中,最后是操作符“-”,所以再弹出d和c 进行d-c 运算,并将其结果再次放入栈中,此时表达式结束,则栈中的元素值就是该表达式最后的运算结果。当然将原始的中缀表达式转换为后缀表达式比较关键,要同时考虑操作符的优先级以及对有括号的情况下的处理,相关内容会在算法具体实现中详细讨论。 2、求值过程 一、将原始的中缀表达式中的操作数、操作符以及括号按顺序分解出来,并以字符串的 形式保存。 二、将分解的中缀表达式转换为后缀表达式的形式,即调整各项字符串的顺序,并将括 号处理掉。 三、计算后缀表达式的值。 3、中缀表达式分解 DivideExpressionToItem()函数。分解出原始中缀表达式中的操作数、操作符以及括号,保存在队列中,以本实验中的数据为例,分解完成后队列中的保存顺序如下图所示:

二叉树的建立和遍历的实验报告doc

二叉树的建立和遍历的实验报告 篇一:二叉树的建立及遍历实验报告 实验三:二叉树的建立及遍历 【实验目的】 (1)掌握利用先序序列建立二叉树的二叉链表的过程。 (2)掌握二叉树的先序、中序和后序遍历算法。 【实验内容】 1. 编写程序,实现二叉树的建立,并实现先序、中序和后序遍历。 如:输入先序序列abc###de###,则建立如下图所示的二叉树。 并显示其先序序列为:abcde 中序序列为:cbaed 后序序列为:cbeda 【实验步骤】 1.打开VC++。 2.建立工程:点File->New,选Project标签,在列表中选Win32 Console Application,再在右边的框里为工程起好名字,选好路径,点OK->finish。至此工程建立完毕。 3.创建源文件或头文件:点File->New,选File标签,在列表里选C++ Source File。给文件起好名字,选好路径,点OK。至此一个源文件就被添加到了你刚创建的工程之中。

4.写好代码 5.编译->链接->调试 #include #include #define OK 1 #define OVERFLOW -2 typedef int Status; typedef char TElemType; typedef struct BiTNode { TElemType data; struct BiTNode *lchild, *rchild; }BiTNode,*BiTree; Status CreateBiTree(BiTree &T) { TElemType ch; scanf("%c",&ch); if (ch=='#') T= NULL; else { if (!(T = (BiTNode *)malloc(sizeof(BiTNode))))

二叉树实验报告及代码

重庆交通大学综合性设计性实验报告 姓名姚远学号 631106060113 班级:计信息一班 实验项目名称:二叉树 实验项目性质:设计性实验 实验所属课程:数据结构 实验室(中心): 407机房 指导教师:鲁云平 实验完成时间: 2013 年 5 月 10 日

一、实验目的 1. 建立二叉树 2. 计算结点所在的层次 3.统计结点数量和叶结点数量 4.计算二叉树的高度 5.计算结点的度 6.找结点的双亲和子女 7.二叉树的遍历 8.二叉树的输出等等 二、实验内容及要求 1.二叉树的结点结构,二叉树的存储结构由学生自由选择和设定 2.实验完成后上交打印的实验报告,报告内容与前面所给定的实验模板相同 3.将实验报告电子版和源代码在网络教学平台提交 三、实验设备及软件 VISUAL C++软件 四、设计方案 ㈠题目(老师给定或学生自定) 二叉树的应用 ㈡设计的主要思路 在计算机科学中,二叉树是每个结点最多有两个子树的有序树。通常子树的根被称作“左子树”(left subtree)和“右子树”(right subtree)。二叉树常被用作二叉查找树和二叉堆或是二叉排序树。二叉树的每个结点至多只有二棵子树(不存在出度大于2的结点),二叉树的子树有左右之分,次序不能颠倒。二叉树的第i层至多有2的i -1次方个结点;深度为k的二叉树至多有2^(k) -1个结点;对任何一棵二叉树T,如果其终端结点数(即叶子结点数)为n0,出度为2的结点数为n2,则n0 =n2 + 1。 ㈢主要功能

实现二叉树的各项操作。 五、主要代码 #include #include #include typedef struct BinTreeNode //二叉树结点类定义 { char data; //数据域 BinTreeNode *leftChild, *rightChild; //左子女、右子女链域 }*BTree; BinTreeNode *p,*q,*f; int NodeNum,Leaf; int NodeDu,nodeloc=1; void CreateBinTree(BTree &T); void preOrder(BTree T); void inOrder(BTree T); void postOrder(BTree T); int TreeNodes(BTree T); int LeafNodes(BTree T); int TreeNodedu(BTree T,char ch); void NodeLoc(BTree T,char c,int nodeloc); int Height(BTree T); BTree Parent(BTree T,char c); BTree NodeRC(BTree T,char c); BTree NodeLC(BTree T,char c); void CreateBinTree(BTree &T) {

二叉树实验报告

实验题目:实验九——二叉树实验 算法设计(3) 问题分析: 1、题目要求:编写算法交换二叉树中所有结点的左右子树 2、设计思路:首先定义一个二叉树的数据类型,使用先序遍历建立该二叉树,遍历二叉树,设计左右子树交换的函数,再次遍历交换之后的二叉树,与先前二叉树进行比较。遍历算法与交换算法使用递归设计更加简洁。 3、测试数据: A、输入:1 2 4 0 0 5 0 0 3 0 0 交换前中序遍历:4 2 5 1 3 交换后中序遍历:3 1 5 2 4 交换前:交换后: B、输入:3 7 11 0 0 18 17 0 0 19 0 0 6 13 0 0 16 0 0 交换前中序遍历:11 7 17 18 19 3 13 6 16 交换后中序遍历:16 6 13 3 19 18 17 7 11 概要设计: 1、为了实现上述功能:①构造一个空的二叉树;②应用先序遍历输入,建立二叉树;③中序遍历二叉树;④调用左右子树交换函数;⑤中序遍历交换过后的二叉树。 2、本程序包括4个函数: ①主函数main() ②先序遍历二叉树建立函数creat_bt() ③中序遍历二叉树函数inorder() ④左右子树交换函数 exchange()

各函数间关系如下: 详细设计: 1、结点类型 typedef struct binode //定义二叉树 { int data; //数据域 struct binode *lchild,*rchild; //左孩子、右孩子 }binode,*bitree; 2、各函数操作 ① 先序遍历建二叉树函数 bitree creat_bt() { 输入结点数据; 判断是否为0{ 若是,为空; 不是,递归;} 返回二叉树; } ② 左右子树交换函数 void exchange(bitree t) { 判断结点是否为空{ 否,交换左右子树; 递归;} } ③ 中序遍历函数 void inorder(bitree bt) { 判断是否为空{ 递归左子树; 输出; 递归右子树;} } main () creat_bt () inorder () exchange ()

实验12 斜率鉴频与相位鉴频器

实验12 斜率鉴频与相位鉴频器 —、实验准备 1.做本实验时应具备的知识点: FM波的解调 斜率鉴频与相位鉴频器 2.做本实验时所用到的仪器: 变容二极管调频模块 斜率鉴频与相位鉴频器模块 双踪示波器 万用表 二、实验目的 1.了解调频波产生和解调的全过程以及整机调试方法,建立起调频系统的初步概念; 2.了解斜率鉴频与相位鉴频器的工作原理; 3.熟悉初、次级回路电容、耦合电容对于电容耦合回路相位鉴频器工作的影响。 三、实验内容 1.调频-鉴频过程观察:用示波器观测调频器输入、输出波形,鉴频器输入、输出波形; 2.观察初级回路电容、次级回路电容、耦合电容变化对FM波解调的影响。 四、基本原理 从FM信号中恢复出原基带调制信号的技术称为FM波的解调,也称为频率检波技术,简称鉴频。鉴频器的解调输出电压幅度应与输入FM波的瞬时频率成正比,因此鉴频器实际上是一个频率—电压幅度转换电路。实现鉴频的方法有很多种,本实验介绍斜率鉴频和电容耦合回路相位鉴

频。 1.斜率鉴频电路 斜率鉴频技术是先将FM波通过线性频率振幅转换网络,使输出FM波的振幅按照瞬时频率的规律变化,而后通过包络检波器检出反映振幅变化的解调信号。实践中频率振幅转换网络常常采用LC并联谐振回路,为了获得线性的频率幅度转换特性,总是使输入FM波的载频处在LC并联回路幅频特性曲线斜坡的近似直线段中点,即处于回路失谐曲线中点。这样,单失谐回路就可以将输入的等幅FM波转变为幅度反映瞬时频率变化的FM波,而后通过二极管包络检波器进行包络检波,解调出原调制信号以完成鉴频功能。 图12-1为斜率鉴频与相位鉴频实验电路,图中13K02开关打 向“3”时为斜率鉴频。13Q01用来对FM波进行放大,13C2、13L02为频率振幅转换网络,其中心频率为9MHZ左右。13D03为包络检波二极管。13TP01、13TP02为输入、输出测量点。 2.相位鉴频器 本实验采用平衡叠加型电容耦合回路相位鉴频器,实验电路如图12-1所示,开关13K02拨向“1”时为相位鉴频。 相位鉴频器由频相转换电路和鉴相器两部分组成。输入的调频信号加到放大器13Q01的基极上。放大管的负载是频相转换电路,该电路是通过电容13C3耦合的双调谐回路。初级和次级都调谐在中心频率上。初级回路电压直接加到次级回路中的串联电容13C04、13C05的中心点上,作为鉴相器的参考电压;同时,又经电容13C3耦合到次级回路,作为鉴相器的输入电压,即加在13L02两端用表示。鉴相器采用两个并联二极管检波电路。检波后的低频信号经RC滤波器输出。

二叉树实验报告

题目: 编程实现二叉查找树的建立、中序遍历、元素查找等功能,要求解释实现过程及演示实际例子的运行结果。 算法描述: 首先创建二叉树结点类,其主要包括:二叉树结点数据域,指向左、右子树的指针,构造函数,设置当前结点左、右子树、数据域以及判断当前结点是否为叶子结点等。然后进行二叉树类定义,其私有部分为定义二叉树根结点指针,公有部分主要包括:构造函数、析构函数、判断二叉树是否为空树、先,中,后序遍历的递归与非递归、二叉树删除、层序遍历以及二叉树搜索等。接下来将对一些重要函数算法进行描述: 1、isLeaf函数:若该结点的左子树和右子树都为空,则为叶子结点。 2、isEmpty函数:根结点为空则为空树。 3、Parent函数:首先判断给定结点是否有双亲,根结点和空结点一定无双亲,初始化一个临时变量,用于跟进查找双亲结点,查找到后其保存的便是双亲结点。先递归在左子树中查找,如果找到,便结束递归且返回双亲结点指针;如果没有找到,再递归在右子树中查找。如果都没有找到,说明给定结点的双亲结点不在该二叉树中。 4、LeftSibling(RightSibling)函数:首先找到当前结点的双亲,然后判断双亲结点左右子树是否为空,其中必然有一个不为空,返回另一个子树指针即可。 5、DeleteBinaryTree函数:首先判断是否为空树,若为空,则返回,然后递归删除左子树,递归删除右子树,最后删除根结点。 6、PreOrder函数:首先判断是否为空树,若为空,则返回,然后访问根结点,递归遍历左子树,递归遍历右子树,结束。 7、PreOrderWithoutRecusion函数:使用栈来模拟递归过程,首先申请栈,用于保存结点指针序列,申请指针pointer保存当前根指针,然后判断栈是否为空,若栈为空且pointer为空,跳出函数,否则若pointer不为空,访问pointer所指结点,pointer入栈,pointer指向其左子树;若pointer为空,弹出栈顶元素赋给pointer,pointer指向其右子树,结束。 8、CreateTree函数:采用先序遍历序列构造二叉树,设‘0’为空结点,输入非‘0’数,生成新结点,递归创建左子树和右子树。 9、Search函数:采用先序遍历查找给定元素是否在二叉树中,首先判断树是否是空树,若是空树,则返回空指针。然后初始化临时指针temp,查找成功后temp即为所给元素所在

实验六 最优二叉树的应用

实验六最优二叉树的应用 【实验目的】 掌握求最优二叉树的方法。 【实验内容】 最优二叉树在通信编码中的应用。要求输入一组通信符号的使用频率 {2,3,5,7,11,13,17,19,23,29,31,37,41},求各通信符号对应的前缀码。 【实验原理和方法】 (1)用一维数组f[N]存贮通信符号的使用频率,用求最优二叉树的方法求得每个通信符号的前缀码。 (2)用链表保存最优二叉树,输出前缀码时可用树的遍历方法。 #include #include #define N 13 struct tree { float num; struct tree *Lnode; struct tree *Rnode; }* fp[N];//保存结点 char s[2*N];//放前缀码 void inite_node(float f[],int n)//生成叶子结点 { int i; struct tree *pt; for(i=0;inum=f[i]; pt->Lnode=NULL;pt->Rnode=NULL; fp[i]=pt; } } void sort(struct tree * array[],int n)//将第N-n个点插入到已排好序的序列中。 { int i;

struct tree *temp; for(i=N-n;inum>array[i+1]->num) { temp=array[i+1]; array[i+1]=array[i]; array[i]=temp; } } struct tree * construct_tree(float f[],int n)//建立树 { int i; struct tree *pt; for(i=1;iLnode=fp[i-1]; //第二句 fp[i]=pt;//w1+w2 sort(fp,N-i); } return fp[N-1]; } void preorder(struct tree *p,int k,char c) { int j; if(p!=NULL) { if(c=='l') s[k]='0'; else s[k]='1'; if(p->Lnode==NULL) {//P指向叶子 printf("%.2f: ",p->num); for(j=0;j<=k;j++) printf("%c",s[j]); putchar('\n');

数据结构实验报告之树与二叉树

学生实验报告 学院:软通学院 课程名称:数据结构与算法 专业班级:软件142 班 姓名:邹洁蒙 学号: 0143990

学生实验报告 (二) 一、实验综述 1、实验目的及要求 目的:1)掌握树与二叉树的基本概念; 2)掌握二叉树的顺序存储,二叉链表的先序遍历中序遍历和后序遍历算法; 3)掌握树的双亲表示法。 要求:1)编程:二叉树的顺序存储实现; 2)编程:二叉链表的先序遍历中序遍历和后序遍历实现; 3)编程:树的双亲表示法实现。 2、实验仪器、设备或软件 设备:PC 软件:VC6 二、实验过程(编程,调试,运行;请写上源码,要求要有注释) 1.编程:二叉树的顺序存储实现 代码: BiTree::BiTree()//建立存储空间 { data = new int[MAXSIZE]; count = 0; } void BiTree::AddNode(int e)//加结点 { int temp = 0; data[count] = e; count++;//从编号0开始保存 }

运行截图: 2.编程:二叉链表的先序遍历中序遍历和后序遍历实现代码: void InOrderTraverse(BiTree* Head)//中序遍历 { if (Head) { InOrderTraverse(Head->LeftChild); cout << Head->data<<" "; InOrderTraverse(Head->RightChild); } } void PreOrderTraverse(BiTree* Head)//先序遍历 { if (Head) { cout << Head->data << " "; PreOrderTraverse(Head->LeftChild); PreOrderTraverse(Head->RightChild); } } void PostOrderTraverse(BiTree* Head)//后序遍历 { if (Head) { PostOrderTraverse(Head->LeftChild); PostOrderTraverse(Head->RightChild); cout << Head->data << " "; } } 运行截图:

(相位鉴频器)电子测量实验指导书(科)

Xb08610209 陆斌 08电子信息(2)班 相位鉴频器 一、实验目的 1、熟悉相位鉴频电路的基本原理。 2、了解鉴频特性曲线(S 曲线)的正确调整方法。 3、将变容二极管调频器与相位鉴频器两实验板进行联机调试,进一步了解调频和解调全过程及整机调试方法。 二、实验原理 相位鉴频器是模拟调频信号解调的一种最基本的解调电路,它具有鉴频灵敏度高,解调线性好等优点。 1、鉴频概述 调频波的解调称为频率解调,简称鉴频;调相波的解调称为相位检波,简称 鉴相。它们的作用都是从已调波中检出反映在频率或相位变化上的调制信号。但是采用的方法不尽相同。由于在调频接收机中,当等幅调频信号通过鉴频前各级电路时,因电路频率特性不均匀而导致调频信号频谱结构的变化,从而造成调频信号的振幅发生变化。如果存在着干扰,还会进一步加剧这种振幅的变化。鉴频器解调这种信号时,上述寄生调幅就会反映在输出解调电压上,产生解调失真。因此,一般必须在鉴频前加一限幅器以消除寄生调幅,保证加到鉴频器上的调频电压是等幅的。限幅与鉴频一般是连用的,统称为限幅鉴频器。 鉴频器输出电压u 0随输入频率f (或频偏 )变化的特性称为鉴 频特性。在线性解调的理想情况下,鉴频特性为一直线,实际上会弯曲,呈“S”型,称为“S”曲线。 2、鉴频器指标 1)鉴频跨导(效率、灵敏度)S D :鉴频特性在f c 处的斜率,用它来评价鉴频能力。 单位为V/Hz 。S D 越大,表明鉴频器将输入瞬时频偏变换为输出解调电压的能力越强。 c f f f -=?

一般情况下,S D 为调制角频率的复值函数,即()D S j Ω,要求它的通频带大于调制信号的最高频率 m ax Ω 2)峰值带宽max B :鉴频器输出电压两峰值点所对应的频率差,即 max 21B f f =-,它近似表明鉴频器鉴频线性区的宽度。为了减小鉴频器的非线性 失真,要求鉴频特性近似线性的范围 m ax 2f ?大于2m f ?。 ③ 最大输出电压0m ax U :鉴频器输出的最大电压。 ④ 线性度要好与失真要小。 3.电容耦合双调谐回路相位鉴频器: 相位鉴频器的组成方框图如3-3示。图中的线性移相网络就是频—相变换网络,它将输入调频信号u1 的瞬时频率变化转换 为相位变化的信号u2,然后与原输入的调频信号一起加到相位检波器,检出反映频率变化的相位变化,从而实现了鉴频的目的。 图3-4的耦合回路相位鉴频器是常用的一种鉴频器。这种鉴频器的相位检波器部分是由两个包络检波器组成,线性移相网络采用耦合回路。为了扩大线性鉴频的范围,这种相位鉴频器通常都接成平衡和差动输出。 图3-4 耦合回路相位鉴频器 图3-5(a )是电容耦合的双调谐回路相位鉴频器的电路原理图,它是由调 o

实验六二叉树

实验六二叉树

#include #include typedef char ElemType; struct BTreeNode { ElemType data; BTreeNode *left; BTreeNode *right; }; void InitBTree(BTreeNode*& BT) { BT=NULL; } void CreateBTree(BTreeNode*& BT,char *a) { const int MaxSize=50; BTreeNode*s[MaxSize]; int top=-1; BT=NULL; BTreeNode*p; int k; int i=0;

while (a[i]) { switch(a[i]) { case ' ': break; case '(': if (top==MaxSize-1) { cout<<""<

top--; break; case ',': k=2; break; default: p=new BTreeNode; p->data=a[i]; p->left=p->right=NULL; if(BT==NULL) BT=p; else { if(k==1) s[top]->left=p; else s[top]->right=p; } } i++; } }

数据结构实验报告—二叉树

算法与数据结构》课程实验报告

一、实验目的 1、实现二叉树的存储结构 2、熟悉二叉树基本术语的含义 3、掌握二叉树相关操作的具体实现方法 二、实验内容及要求 1. 建立二叉树 2. 计算结点所在的层次 3. 统计结点数量和叶结点数量 4. 计算二叉树的高度 5. 计算结点的度 6. 找结点的双亲和子女 7. 二叉树前序、中序、后序遍历的递归实现和非递归实现及层次遍历 8. 二叉树的复制 9. 二叉树的输出等 三、系统分析 (1)数据方面:该二叉树数据元素采用字符char 型,并且约定“ #”作为二叉树输入结束标识符。并在此基础上进行二叉树相关操作。 (2)功能方面:能够实现二叉树的一些基本操作,主要包括: 1. 采用广义表建立二叉树。 2. 计算二叉树高度、统计结点数量、叶节点数量、计算每个结点的度、结点所在层次。 3. 判断结点是否存在二叉树中。 4. 寻找结点父结点、子女结点。 5. 递归、非递归两种方式输出二叉树前序、中序、后序遍历。 6. 进行二叉树的复制。 四、系统设计 (1)设计的主要思路 二叉树是的结点是一个有限集合,该集合或者为空,或者是由一个根节点加上两棵分别称为左子树和右子树、互不相交的二叉树组成。根据实验要求,以及课上老师对于二叉树存储结构、基本应用的讲解,同时课后研究书中涉及二叉树代码完成二叉树模板类,并将所需实现各个功能代码编写完成,在建立菜单对功能进行调试。 (2)数据结构的设计 二叉树的存储结构有数组方式和链表方式。但用数组来存储二叉树有可能会消耗大量的存储空间,故在此选用链表存储,提高存储空间的利用率。根据二叉树的定义,二叉

二叉树实验报告

二叉树的创建与遍历 一、试验内容 根据输入的字符串创建树或二叉树,输出树或二叉树的先序遍历和后序遍历序列。 二、运行环境 Visual C++ 三、需求分析 1、建立一棵用二叉链表方式存储的二叉树。 2、从键盘接受扩展先序序列,以二叉链表作为存储结构。 3、建立二叉树,并将遍历结果打印输出。采用递归和非递归两种 方法实现。 四、设计概要 //——————二叉树的二叉链表存储表示—————— typedef struct BiTBode{ TElemType data; Struct BiTNode *lchild, *rchild //左右孩子指针 }BiTNode, *BiTree; //—————基本操作的函数原型说明———————— Status CreateBiTree(BiTree &T); //按先序次序输入二叉树中结点的值(一个字符),空格字符表示空树。 //构造二叉树链表表示的二叉树T。 Status PreOrderTraverse(BiTree T, status(*visit)(TElemType e)); //采用二叉链表存储结构,visit是对结点操作的应用函数。 //先序遍历二叉树T,对每个结点调用函数visit一次且仅以次。 //一旦visit()失败,则操作失败。 Status PostOrderTraverse(BiTree T, status(*visit)(TElemType e)); //采用二叉链表存储结构,visit是对结点操作的应用函数。 //后序遍历二叉树T,对每个结点调用函数visit一次且仅以次。 //一旦visit()失败,则操作失败。 —————先序遍历二叉树基本操作的递归算法———— Status PreOrderTraverse(BiTree T,Status(*visit)(TElemType e)){ //采用二叉链表存储结构,visit是对数据元素操作的应用函数,

5..高频小信号谐振放大器实验报告

高频小信号谐振放大器实验报告 学号200800120228 姓名辛义磊实验台号30 一、实验目的 1、了解高频小信号谐振放大器的电路组成、工作原理; 2、进一步理解高频小信号放大器与低频小信号放大器的不同; 3、掌握谐振放大器的调试方法; 4、掌握用示波器测试小信号谐振放大器的基本性能; 5、学会用频率特性测试仪测试小信号谐振放大器幅频特性的方法。 二、实验仪器 双踪示波器数字频率计高频毫伏表BT-3频率特性测试仪直流稳压电源数字万用表高频信号发生器 三、实验原理 1、高频小信号谐振放大器的原理 高频小信号谐振放大器单元电路由LC单调谐回路作为负载构成晶体管调谐放大器。晶体管基极为正偏,工作在甲类状态,负载回路调谐在输入信号频率错误!未找到引用源。上。该放大电路能够对输入的高频小信号进行反相放大。LC调谐回路的作用主要有两个:一是选频率波,选择放大错误!未找到引用源。的工作信号频率,抑制其他频率的信号;二是提供晶体管集电极所需的负载电阻,同时进行阻抗匹配变换。 高频小信号放大器的主要性能指标有: (1)中心频率错误!未找到引用源。:是指放大器的工作频率。 (2)增益:是指放大器对有用信号的放大能力。通常表示为在中心频率上的电压增益和功率增益。 (3)通频带:是指放大电路增益由最大值下降3dB时所对应的频带宽度,用BW0.7表示。它相当于输入电压不变时,输出电压由最大值下降到0.707倍或功率下 降到一半时对应的频带宽度。 (4)选择性:是指放大器对通频带之外干扰信号的衰减能力。通常有两种表示方法: ①用矩形系数说明邻近波道选择性的好坏。矩形系数K r0.1定义为 显然,理想矩形系数为1,实际矩形系数均大于1. ②用抑制比来说明对带外某一特定干扰频率错误!未找到引用源。信号抑制的 能力的大小,定义为中心频率上功率增益与特定干扰频率错误!未找到引用源。

相关文档