当前位置:文档之家› 数据结构课程实验实训报告--堆栈和队列的基本操作。

数据结构课程实验实训报告--堆栈和队列的基本操作。

数据结构课程实验实训报告--堆栈和队列的基本操作。
数据结构课程实验实训报告--堆栈和队列的基本操作。

《数据结构》课程实验实训报告

printf("\n");

Destroy(myStack);

printf("This program is made by10273206\n"); }

2.#include

#include

#define MaxStackSize 100

typedef int DataType;

typedef struct

{

DataType stack[MaxStackSize];;

int top;

} SeqStack; /*初始化操作:*/

void StackInitiate(SeqStack *S)

/*初始化带头结点链式堆栈*/

{

S->top=0;

}

int StackNotEmpty(SeqStack S)

{

if(S.top<=0)

3.#include "stdio.h"

#include "string.h"

#include "stdlib.h"

#define MaxQueueSize 100 typedef int DataType;

typedef struct

{

DataType queue[MaxQueueSize]; int rear ;

int front;

int count;

} SeqCQueue ;

void QueueuInitiate(SeqCQueue *Q) {

Q->rear=0;

Q->front=0;

Q->count=0;

}

int QueueNotEmpty(SeqCQueue Q) {

数据结构-堆栈和队列实验报告

实验二堆栈和队列 实验目的: 1.熟悉栈这种特殊线性结构的特性; 2.熟练并掌握栈在顺序存储结构和链表存储结构下的基本运算; 3.熟悉队列这种特殊线性结构的特性; 3.熟练掌握队列在链表存储结构下的基本运算。 实验原理: 堆栈顺序存储结构下的基本算法; 堆栈链式存储结构下的基本算法; 队列顺序存储结构下的基本算法;队列链式存储结构下的基本算法;实验内容: 3-18链式堆栈设计。要求 (1)用链式堆栈设计实现堆栈,堆栈的操作集合要求包括:初始化Stacklnitiate (S), 非空否StackNotEmpty(S),入栈StackiPush(S,x), 出栈StackPop (S,d),取栈顶数据元素StackTop(S,d); (2)设计一个主函数对链式堆栈进行测试。测试方法为:依次把数据元素1,2,3, 4,5 入栈,然后出栈并在屏幕上显示出栈的数据元素; (3)定义数据元素的数据类型为如下形式的结构体, Typedef struct { char taskName[10]; int taskNo; }DataType; 首先设计一个包含5个数据元素的测试数据,然后设计一个主函数对链式堆栈进行测试,测试方法为:依次吧5个数据元素入栈,然后出栈并在屏幕上显示出栈的数据元素。 3-19对顺序循环队列,常规的设计方法是使用対尾指针和对头指针,对尾指针用于指示当 前的対尾位置下标,对头指针用于指示当前的対头位置下标。现要求: (1)设计一个使用对头指针和计数器的顺序循环队列抽象数据类型,其中操作包括:初始化,入队列,出队列,取对头元素和判断队列是否为空; (2)编写一个主函数进行测试。 实验结果: 3-18 typedef struct snode { DataType data; struct snode *n ext; } LSNode; /* 初始化操作:*/

栈和队列习题答案

第三章栈和队列习题答案 一、基础知识题 设将整数1,2,3,4依次进栈,但只要出栈时栈非空,则可将出栈操作按任何次序夹入其中,请回答下述问题: (1)若入、出栈次序为Push(1), Pop(),Push(2),Push(3), Pop(), Pop( ),Push(4), Pop( ),则出栈的数字序列为何(这里Push(i)表示i进栈,Pop( )表示出栈) (2)能否得到出栈序列1423和1432并说明为什么不能得到或者如何得到。 (3)请分析1,2 ,3 ,4 的24种排列中,哪些序列是可以通过相应的入出栈操作得到的。 答:(1)出栈序列为:1324 (2)不能得到1423序列。因为要得到14的出栈序列,则应做Push(1),Pop(),Push(2),Push (3),Push(4),Pop()。这样,3在栈顶,2在栈底,所以不能得到23的出栈序列。能得到1432的出栈序列。具体操作为:Push(1), Pop(),Push(2),Push(3),Push(4),Pop(),Pop(),Pop()。 (3)在1,2 ,3 ,4 的24种排列中,可通过相应入出栈操作得到的序列是: 1234,1243,1324,1342,1432,2134,2143,2314,2341,2431,3214,3241,3421,4321 不能得到的序列是: 1423,2413,3124,3142,3412,4123,4132,4213,4231,4312 链栈中为何不设置头结点 答:链栈不需要在头部附加头结点,因为栈都是在头部进行操作的,如果加了头结点,等于要对头结点之后的结点进行操作,反而使算法更复杂,所以只要有链表的头指针就可以了。 循环队列的优点是什么如何判别它的空和满 答:循环队列的优点是:它可以克服顺序队列的"假上溢"现象,能够使存储队列的向量空间得到充分的利用。判别循环队列的"空"或"满"不能以头尾指针是否相等来确定,一般是通过以下几种方法:一是另设一布尔变量来区别队列的空和满。二是少用一个元素的空间,每次入队前测试入队后头尾指针是否会重合,如果会重合就认为队列已满。三是设置一计数器记录队列中元素总数,不仅可判别空或满,还可以得到队列中元素的个数。 设长度为n的链队用单循环链表表示,若设头指针,则入队出队操作的时间为何若只设尾指针呢答:当只设头指针时,出队的时间为1,而入队的时间需要n,因为每次入队均需从头指针开始查找,找到最后一个元素时方可进行入队操作。若只设尾指针,则出入队时间均为1。因为是循环链表,尾指针所指的下一个元素就是头指针所指元素,所以出队时不需要遍历整个队列。 指出下述程序段的功能是什么 (1) void Demo1(SeqStack *S){ int i; arr[64] ; n=0 ; while ( StackEmpty(S)) arr[n++]=Pop(S); for (i=0, i< n; i++) Push(S, arr[i]); } .. // 设Q1已有内容,Q2已初始化过 while ( ! QueueEmpty( &Q1) ) { x=DeQueue( &Q1 ) ; EnQueue(&Q2, x); n++;} for (i=0; i< n; i++) { x=DeQueue(&Q2) ; EnQueue( &Q1, x) ; EnQueue( &Q2, x);} 答: (1)程序段的功能是将一栈中的元素按反序重新排列,也就是原来在栈顶的元素放到栈底,栈底的

通信电子线路实验报告4

大连理工大学 本科实验报告 课程名称:通信电子线路实验 学院:电子信息与电气工程学部专业:电子信息工程 班级:电子0904 学号: 200901201 学生姓名:朱娅 2011年11月20日

实验四、调幅系统实验及模拟通话系统 一、实验目的 1.掌握调幅发射机、接收机的整机结构和组成原理,建立振幅调制与 解调的系统概念。 2.掌握系统联调的方法,培养解决实际问题的能力。 3.使用调幅实验系统进行模拟语音通话实验。 二、实验内容 1.实验内容及步骤,说明每一步骤线路的连接和波形 (一)调幅发射机组成与调试 (1)通过拨码开关S2 使高频振荡器成为晶体振荡器,产生稳定的等幅高频振荡,作为载波信号。拨码开关S3 全部开路,将拨码开关S4 中“3”置于“ON”。用示波器观察高频振荡器后一级的射随器缓冲输出,调整电位器VR5,使输出幅度为0.3V左右。将其加到由MC1496 构成的调幅器的载波输入端。 波形:此时示波器上,波形为一正弦波,f=10.000MHz,Vpp=0.3V。 (2)改变跳线,将低频调制信号(板上的正弦波低频信号发生器)接至模拟乘法器调幅电路的调制信号输入端,用示波器观察J19 波形,调VR9,使低频振荡器输出正弦信号的峰-峰值Vp-p 为0.1~0.2V. 波形:此时示波器上,波形为一正弦波,f=1.6kHz,Vpp=0.2V。 (3)观察调幅器输出,应为普通调幅波。可调整VR8、VR9 和VR11,

使输出的波形为普通的调幅波(含有载波,m 约为30%)。 (4)将普通的调幅波连接到前置放大器(末前级之前的高频信号缓冲器)输入端,观察到放大后的调幅波。 波形:前置放大后的一调幅波,包络形状与调制信号相似,频率特性为载波信号频率。f?=1.6kHz,Vpp=0.8V,m≈30%。 (5)调整前置放大器的增益,使其输出幅度1Vp-p 左右的不失真调幅波,并送入下一级高频功率放大电路中。 (6)高频功率放大器部分由两级组成,第一级是甲类功放作为激励级,第二级是丙类功放。给末级丙类功放加上+12V 电源,调节VR4 使J8(JF.OUT)输出6Vp-p左右不失真的放大信号,在丙类功放的输出端,可观察到经放大后的调幅波,改变电位器VR6 可改变丙类放大器的增益,调节CT2 可以看到LC 负载回路调谐时对输出波形的影响。 波形:此时示波器上为放大后的调幅波,f?=1.6kHz,Vpp=8V,m≈30%。 (二)调幅接收机的组成与调试 从GP-4 实验箱的系统电路图可以看出调幅接收机部分采用了二次变频电路,其中频频率分别为:第一中频6.455MHz,第二中频455kHz。由于该二次变频接收机的两个本机振荡器均采用了石英晶体振荡器,其中第一本振频率16.455MHz,第二本振频率6.000MHz,也就是说本振频率不可调。这样实验箱的调幅接收机可以接收的频率就因为第一本振频率不可调而被固定下来,即该机可以接收的已调波的中心频率应该为10.000MHz(第1本振频率-第1中频频率 = 16.455MHz - 6.455MHz =

3 栈和队列答案

第3章栈和队列 一、基础知识题 3.1 设将整数1,2,3,4依次进栈,但只要出栈时栈非空,则可将出栈操作按任何次序夹入其中,请回答下述问题: (1)若入、出栈次序为Push(1), Pop(),Push(2),Push(3), Pop(), Pop( ),Push(4), Pop( ),则出栈的数字序列为何(这里Push(i)表示i进栈,Pop( )表示出栈)? (2)能否得到出栈序列1423和1432?并说明为什么不能得到或者如何得到。 (3)请分析 1,2 ,3 ,4 的24种排列中,哪些序列是可以通过相应的入出栈操作得到的。 3.2 链栈中为何不设置头结点? 3.3 循环队列的优点是什么? 如何判别它的空和满? 3.4 设长度为n的链队用单循环链表表示,若设头指针,则入队出队操作的时间为何? 若只设尾指针呢? 3.5 指出下述程序段的功能是什么? (1) void Demo1(SeqStack *S){ int i; arr[64] ; n=0 ; while ( StackEmpty(S)) arr[n++]=Pop(S); for (i=0, i< n; i++) Push(S, arr[i]); } //Demo1 (2) SeqStack S1, S2, tmp; DataType x; ...//假设栈tmp和S2已做过初始化 while ( ! StackEmpty (&S1)) { x=Pop(&S1) ; Push(&tmp,x); } while ( ! StackEmpty (&tmp) ) { x=Pop( &tmp); Push( &S1,x); Push( &S2, x); } (3) void Demo2( SeqStack *S, int m) { // 设DataType 为int 型 SeqStack T; int i; InitStack (&T); while (! StackEmpty( S)) if(( i=Pop(S)) !=m) Push( &T,i); while (! StackEmpty( &T)) { i=Pop(&T); Push(S,i);

PTA第三章栈与队列练习题

1-1 通过对堆栈S操作:Push(S,1), Push(S,2), Pop(S), Push(S,3), Pop(S), Pop(S)。输出得序列为:123。(2分) T F 作者: DS课程组 单位: 浙江大学 1-2 在用数组表示得循环队列中,front值一定小于等于rear值。(1分) T F 作者: DS课程组 单位: 浙江大学 1-3 若一个栈得输入序列为{1, 2, 3, 4, 5},则不可能得到{3, 4, 1, 2, 5}这样得出栈序列。(2分) T F 作者: 徐镜春 单位: 浙江大学 1-4 If keys are pushed onto a stack in the order {1, 2, 3, 4, 5}, then it is impossible to obtain the output sequence {3, 4, 1, 2, 5}、(2分) T F 作者: 徐镜春 单位: 浙江大学 1-5 所谓“循环队列”就是指用单向循环链表或者循环数组表示得队列。(1分) T F 作者: DS课程组 单位: 浙江大学 1-6 An algorithm to check for balancing symbols in an expression uses a stack to store the symbols、(1分) T F 2-1 设栈S与队列Q得初始状态均为空,元素a、b、c、d、e、f、g依次进入栈S。若每个元素出栈后立即进入队列Q,且7个元素出队得顺序就是b、d、c、f、e、 a、g,则栈S得容量至少就是: (2分) 1. 1 2. 2 3. 3 4. 4 作者: DS课程组

中南大学通信电子线路实验报告

中南大学 《通信电子线路》实验报告 学院信息科学与工程学院 题目调制与解调实验 学号 专业班级 姓名 指导教师

实验一振幅调制器 一、实验目的: 1.掌握用集成模拟乘法器实现全载波调幅和抑止载波双边带调幅的方法。 2.研究已调波与调制信号及载波信号的关系。 3.掌握调幅系数测量与计算的方法。 4.通过实验对比全载波调幅和抑止载波双边带调幅的波形。 二、实验内容: 1.调测模拟乘法器MC1496正常工作时的静态值。 2.实现全载波调幅,改变调幅度,观察波形变化并计算调幅度。 3.实现抑止载波的双边带调幅波。 三、基本原理 幅度调制就是载波的振幅(包络)受调制信号的控制作周期性的变化。变化的周期与调制信号周期相同。即振幅变化与调制信号的振幅成正比。通常称高频信号为载波信号。本实验中载波是由晶体振荡产生的10MHZ高频信号。1KHZ的低频信号为调制信号。振幅调制器即为产生调幅信号的装置。 在本实验中采用集成模拟乘法器MC1496来完成调幅作用,图2-1为1496芯片内部电路图,它是一个四象限模拟乘法器的基本电路,电路采用了两组差动对由V1-V4组成,以反极性方式相连接,而且两组差分对的恒流源又组成一对差分电路,即V5与V6,因此恒流源的控制电压可正可负,以此实现了四象限工作。D、V7、V8为差动放大器V5与V6的恒流源。进行调幅时,载波信号加在V1-V4的输入端,即引脚的⑧、⑩之间;调制信号加在差动放大器V5、V6的输入端,即引脚的①、④之间,②、③脚外接1KΩ电位器,以扩大调制信号动态范围,已调制信号取自双差动放大器的两集电极(即引出脚⑹、⑿之间)输出。

图2-1 MC1496内部电路图 用1496集成电路构成的调幅器电路图如图2-2所示,图中VR8用来调节引出脚①、④之间的平衡,VR7用来调节⑤脚的偏置。器件采用双电源供电方式(+12V,-9V),电阻R29、R30、R31、R32、R52为器件提供静态偏置电压,保证器件内部的各个晶体管工作在放大状态。 四、实验结果 1. ZD.OUT波形: 2. TZXH波形:

栈和队列的基本操作

《数据结构与算法》实验报告 专业班级学号 实验项目 实验二栈和队列的基本操作。 实验目的 1、掌握栈的基本操作:初始化栈、判栈为空、出栈、入栈等运算。 2、掌握队列的基本操作:初始化队列、判队列为空、出队列、入队列等运算。 实验容 题目1: 进制转换。利用栈的基本操作实现将任意一个十进制整数转化为R进制整数 算法提示: 1、定义栈的顺序存取结构 2、分别定义栈的基本操作(初始化栈、判栈为空、出栈、入栈等) 3、定义一个函数用来实现上面问题: 十进制整数X和R作为形参 初始化栈 只要X不为0重复做下列动作 将X%R入栈 X=X/R 只要栈不为空重复做下列动作 栈顶出栈输出栈顶元素 题目2: 利用队列的方式实现辉三角的输出。 算法设计分析 (一)数据结构的定义 1、栈的应用 实现十进制到其他进制的转换,该计算过程是从低位到高位顺序产生R进制数的各个位数,而打印输出一般从高位到低位进行,恰好与计算过程相反。因此,运用栈先进后出的性质,即可完成进制转换。 栈抽象数据结构描述 typedef struct SqStack /*定义顺序栈*/ { int *base; /*栈底指针*/ int *top; /*栈顶指针*/ int stacksize; /*当前已分配存储空间*/ } SqStack;

2、队列的应用 由于是要打印一个数列,并且由于队列先进先出的性质,肯定要利用已经进队的元素在其出队之前完成辉三角的递归性。即,利用要出队的元素来不断地构造新的进队的元素,即在第N行出队的同时,来构造辉三角的第N+1行,从而实现打印辉三角的目的。 队列抽象数据结构描述 typedef struct SeqQueue { int data[MAXSIZE]; int front; /*队头指针*/ int rear; /*队尾指针*/ }SeqQueue; (二)总体设计 1、栈 (1)主函数:统筹调用各个函数以实现相应功能 int main() (2)空栈建立函数:对栈进行初始化。 int StackInit(SqStack *s) (3)判断栈空函数:对栈进行判断,若栈中有元素则返回1,若栈为空,则返回0。 int stackempty(SqStack *s) (4)入栈函数:将元素逐个输入栈中。 int Push(SqStack *s,int x) (5)出栈函数:若栈不空,则删除栈顶元素,并用x返回其值。 int Pop(SqStack *s,int x) (6)进制转换函数:将十进制数转换为R进制数 int conversion(SqStack *s) 2、队列 (1)主函数:统筹调用各个函数以实现相应功能 void main() (2)空队列建立函数:对队列进行初始化。 SeqQueue *InitQueue() (3)返回队头函数:判断队是否为空,若不为空则返回队头元素。 int QueueEmpty(SeqQueue *q) (4)入队函数:将元素逐个输入队列中。 void EnQueue(SeqQueue *q,int x) (5)出队函数:若队列不空,则删除队列元素,并用x返回其值。 int DeQueue(SeqQueue *q) (6)计算队长函数:计算队列的长度。 int QueueEmpty(SeqQueue *q) (7)输出辉三角函数:按一定格式输出辉三角。 void YangHui(int n)

队列实验报告

一.实验项目名称 循环队列和链式队列的创建 二、实验目的 1、掌握队列的特点(先进先出FIFO)及基本操作,如入队、出队等, 2、队列顺序存储结构、链式存储结构和循环队列的实现,以便在 实际问题背景下灵活应用。 三、实验内容 1.链式队列的实现和运算 2.循环队列的实现和运算 四、主要仪器设备及耗材 VC++6.0运行环境实现其操作 五.程序算法 (1) 循环队列操作的算法 1>进队列 V oid enqueue (seqqueue &q, elemtype x) { if ((q.rear+1)%maxsize = = q.front) cout<<”overflow”; else { q.rear=(q.rear+1)%maxsize; //编号加1或循环回第一个单元 q.queue[q.rear]=x; } } 2>出队列 V oid dlqueue(seqqueue &q ) { if (q.rear= =q.front) cout<<”underflow”; else q.front =(q.front+1)%maxsize; } 3>取对头元素

elemtype gethead(seqqueue q ) { if (q.rear= =q.front) { cout<<”underflow”; return NULL;} else return q.queue[(q.front+1)%maxsize]; //front指向队头前一个位置 } 4>判队列空否 int empty(seqqueue q ) { if (q.rear= =q.front) reurn 1; else return 0; } (2).链队列操作的算法 1>.链队列上的初始化 void INIQUEUE( linkqueue &s) { link *p; p=new link; p->next=NULL; //p是结构体指针类型,用-> s.front=p; //s是结构体变量,用. s.rear=p; //头尾指针都指向头结点 } 2>.入队列 void push(linkqueue &s, elemtype x) { link *p; //p是结构体指针类型,用-> p=new link; p->data=x; p->next=s.rear->next; //s是结构体变量,用. s.rear->next=p; s.rear=p; //插入最后 } 3>判队空 int empty( linkqueue s ) { if (s.front= =s.rear) return 1; else return 0; } 4>.取队头元素 elemtype gethead( linkqueue s ) { if (s.front= =s.rear) return NULL; else retuen s.front->next->data; }

栈和队列(必备)

栈和队列是操作受限的线性表,好像每本讲数据结构的数都是这么说的。有些书按照这个思路给出了定义和实现;但是很遗憾,这本书没有这样做,所以,原书中的做法是重复建设,这或许可以用不是一个人写的这样的理由来开脱。 顺序表示的栈和队列,必须预先分配空间,并且空间大小受限,使用起来限制比较多。而且,由于限定存取位置,顺序表示的随机存取的优点就没有了,所以,链式结构应该是首选。 栈的定义和实现 #ifndef Stack_H #define Stack_H #include "List.h" template class Stack : List//栈类定义 { public: void Push(Type value) { Insert(value); } Type Pop() { Type p = *GetNext(); RemoveAfter(); return p; }

Type GetTop() { return *GetNext(); } List ::MakeEmpty; List ::IsEmpty; }; #endif 队列的定义和实现 #ifndef Queue_H #define Queue_H #include "List.h" template class Queue : List//队列定义{ public: void EnQueue(const Type &value) { LastInsert(value); } Type DeQueue() {

Type p = *GetNext(); RemoveAfter(); IsEmpty(); return p; } Type GetFront() { return *GetNext(); } List ::MakeEmpty; List ::IsEmpty; }; #endif 测试程序 #ifndef StackTest_H #define StackTest_H #include "Stack.h" void StackTest_int() { cout << endl << "整型栈测试" << endl;

通信电子线路Multisim仿真实验报告

通信电子线路实验报告Multisim调制电路仿真

目录 一、综述 .......................... 错误!未定义书签。 二、实验内容 ...................... 错误!未定义书签。 1.常规调幅AM ................... 错误!未定义书签。 (1)基本理论.................... 错误!未定义书签。 (2)Multisim电路仿真图 ........ 错误!未定义书签。 (3)结论: ...................... 错误!未定义书签。 2.双边带调制DSB ................ 错误!未定义书签。 (1)基本理论.................... 错误!未定义书签。 (2)Multisim电路仿真图 ........ 错误!未定义书签。 3.单边带调制SSB ................ 错误!未定义书签。 (1)工作原理.................... 错误!未定义书签。 (2)Multisim电路仿真图 ........ 错误!未定义书签。 4.调频电路FM ................... 错误!未定义书签。 (1)工作原理.................... 错误!未定义书签。 (2)Multisim电路仿真图 ........ 错误!未定义书签。 5.调相电路PM ................... 错误!未定义书签。 (1)工作原理.................... 错误!未定义书签。 (2)Multisim电路仿真图............ 错误!未定义书签。 三、实验感想 ...................... 错误!未定义书签。

栈和队列的基本操作的实现

封面: 安徽大学 网络工程 栈和队列的基本操作的实现 ______2010\4\12

【实验目的】 1.理解并掌握栈和队列的逻辑结构和存储结构; 2.理解栈和队列的相关基本运算; 3.编程对相关算法进行验证。 【实验内容】 (一)分别在顺序和链式存储结构上实现栈的以下操作(含初始化,入栈,出栈,取栈顶元素等): 1.构造一个栈S,将构造好的栈输出; 2.在第1步所构造的栈S中将元素e 入栈,并将更新后的栈S输出; 3.在第2步更新后所得到的栈S中将栈顶元素出栈,用变量e返回该元素,并将更新后的栈S输出。(二)分别在链队列和循环队列上实现以下操作(初始化,入队,出队,取队头元素等): 1.构造一个队列Q,将构造好的队列输出; 2.在第1步所构造的队列Q中将元素e入队,并将更新后的队列Q输出; 3.在第2步更新后所得到的队列Q中将队头元素出队,用变量e返回该元素,并将更新后的队列Q输出。

【要求】 1.栈和队列中的元素要从终端输入; 2.具体的输入和输出格式不限; 3.算法要具有较好的健壮性,对运行过程中的错误 操作要做适当处理。 三、实验步骤 1.本实验用到的数据结构 (1)逻辑结构:线性结构 (2)存储结构:程序一、四(顺序存储结构); 程序二、三(链式存储结构); 2.各程序的功能和算法设计思想 程序一:顺序栈 # include # include # include #define STACKINITISIZE 100 # define STACKINCREMENT 10 # define OK 1 # define ERROR 0 # define OVERFLOW -2 typedef int SElemtype; typedef int status; typedef struct { SElemtype *base; SElemtype *top; int stacksize; }sqstack; void Initstack (sqstack *s) { (*s).base = (SElemtype *)malloc(STACKINITISIZE * sizeof (SElemtype)); if(!(*s).base) exit(OVERFLOW);

数据结构-队列实验报告

《数据结构》课程实验报告 一、实验目的和要求 (1)熟悉C语言的上机环境,进一步掌握C语言的结构特点。 (2)掌握队列的顺序表示和实现。 二、实验环境 Windows7 ,VC 三、实验内容及实施 实验三:队列 【实验要求】 构建一个循环队列, 实现下列操作 1、初始化队列(清空); 2、入队; 3、出队; 4、求队列长度; 5、判断队列是否为空; 【源程序】 #include #define MAXSIZE 100 #define OK 1; #define ERROR 0; typedef struct { int *base; int front; int rear; }SqQueue;//队列的存储结构 int InitQueue(SqQueue &Q) {

Q.base=new int[MAXSIZE]; Q.front=Q.rear=0; return OK; }//队列的初始化 int EnQueue(SqQueue &Q,int e) { if((Q.rear+1)%MAXSIZE==Q.front) return ERROR; Q.base[Q.rear]=e; Q.rear=(Q.rear+1)%MAXSIZE; return OK; }//队列的入队 int DeQueue(SqQueue &Q,int &e) { if(Q.front==Q.rear) return ERROR; e=Q.base[Q.front]; Q.front=(Q.front+1)%MAXSIZE; return OK; }//队列的出队 int QueueLength(SqQueue &Q) { int i; i=(Q.rear-Q.front+MAXSIZE)%MAXSIZE; return i; }//求队列长度 void JuQueue(SqQueue &Q) { if(Q.rear==Q.front) printf("队列为空"); else printf("队列不为空"); }//判断队列是否为空 void QueueTraverse(SqQueue &Q)

通信电子线路实物实验报告

东南大学电工电子实验中心 实验报告 课程名称:电子电路与综合实验 第一次实物实验 院(系):信息科学与工程学院专业:信息工程姓名:陈金炜学号:04013130 实验室:高频实验室实验组别: 同组人员:陈秦郭子衡邹俊昊实验时间:2015年11月21日评定成绩:审阅教师:

实验一常用仪器使用 一、实验目的 1. 通过实验掌握常用示波器、信号源和频谱仪等仪器的使用,并理解常用仪器的基本工作 原理; 2.通过实验掌握振幅调制、频率调制的基本概念。 二、实验仪器 示波器(带宽大于 100MHz) 1台 万用表 1台 双路直流稳压电源 1台 信号发生器 1台 频谱仪 1台 多功能实验箱 1 套 多功能智能测试仪1 台 三、实验内容 1、说明频谱仪的主要工作原理,示波器测量精度与示波器带宽、与被测信号频率之间关系。 答: (1)频谱仪结构框图为: 频谱仪的主要工作原理: ①对信号进行时域的采集,对其进行傅里叶变换,将其转换成频域信号。这种方法对于AD 要求很高,但还是难以分析高频信号。

②通过直接接收,称为超外差接收直接扫描调谐分析仪。即:信号通过混频器与本振混频后得到中频,采用固定中频的办法,并使本振在信号可能的频谱范围内变化。得到中频后进行滤波和检波,就可以获取信号中某一频率分量的大小。 (2)示波器的测量精度与示波器带宽、被测信号频率之间的关系: 示波器的带宽越宽,在通带内的衰减就越缓慢; 示波器带宽越宽,被测信号频率离示波器通带截止频率点就越远,则测得的数据精度约高。 2、画出示波器测量电源上电时间示意图,说明示波器可以捕获电源上电上升时间的工作原理。 答: 上电时间示意图: 工作原理: 捕获这个过程需要示波器采样周期小于过渡时间。示波器探头与电源相连,使示波器工作于“正常”触发方式,接通电源后,便有电信号进入示波器,由于示波器为“正常”触发方式,所以在屏幕上会显示出电势波形;并且当上电完成后,由于没有触发信号,示波器将不再显示此信号。这样,就可以利用游标读出电源上电的上升时间。 3、简要说明在FM 调制过程中,调制信号的幅度与频率信息是如何加到FM 波中的? 答: 载波的瞬时角频率为()()c f t k u t ωωΩ=+,(其中f k 为与电路有关的调频比例常数) 已调的瞬时相角为00 t ()()t t c f t dt t k u t dt θωωθΩ =++? ?()= 所以FM 已调波的表达式为:000 ()cos[()]t om c f u t U t k u t dt ωθΩ =++? 当()cos m u t U t ΩΩ=Ω时,00()cos[sin ]om c f u t U t M t ωθ=+Ω+ 其中f M 为调制指数其值与调制信号的幅度m U Ω成正比,与调制信号的角频率Ω反比,即 m f f U M k Ω=Ω 。这样,调制信号的幅度与频率信息是已加到 FM 波中。

数据结构实验报告及心得体会

2011~2012第一学期数据结构实验报告 班级:信管一班 学号:201051018 姓名:史孟晨

实验报告题目及要求 一、实验题目 设某班级有M(6)名学生,本学期共开设N(3)门课程,要求实现并修改如下程序(算法)。 1. 输入学生的学号、姓名和 N 门课程的成绩(输入提示和输出显示使用汉字系统), 输出实验结果。(15分) 2. 计算每个学生本学期 N 门课程的总分,输出总分和N门课程成绩排在前 3 名学 生的学号、姓名和成绩。 3. 按学生总分和 N 门课程成绩关键字升序排列名次,总分相同者同名次。 二、实验要求 1.修改算法。将奇偶排序算法升序改为降序。(15分) 2.用选择排序、冒泡排序、插入排序分别替换奇偶排序算法,并将升序算法修改为降序算法;。(45分)) 3.编译、链接以上算法,按要求写出实验报告(25)。 4. 修改后算法的所有语句必须加下划线,没做修改语句保持按原样不动。 5.用A4纸打印输出实验报告。 三、实验报告说明 实验数据可自定义,每种排序算法数据要求均不重复。 (1) 实验题目:《N门课程学生成绩名次排序算法实现》; (2) 实验目的:掌握各种排序算法的基本思想、实验方法和验证算法的准确性; (3) 实验要求:对算法进行上机编译、链接、运行; (4) 实验环境(Windows XP-sp3,Visual c++); (5) 实验算法(给出四种排序算法修改后的全部清单); (6) 实验结果(四种排序算法模拟运行后的实验结果); (7) 实验体会(文字说明本实验成功或不足之处)。

三、实验源程序(算法) Score.c #include "stdio.h" #include "string.h" #define M 6 #define N 3 struct student { char name[10]; int number; int score[N+1]; /*score[N]为总分,score[0]-score[2]为学科成绩*/ }stu[M]; void changesort(struct student a[],int n,int j) {int flag=1,i; struct student temp; while(flag) { flag=0; for(i=1;ia[i+1].score[j]) { temp=a[i]; a[i]=a[i+1]; a[i+1]=temp; flag=1; } for(i=0;ia[i+1].score[j]) { temp=a[i]; a[i]=a[i+1]; a[i+1]=temp; flag=1;

数据结构练习 第三章 栈和队列

数据结构练习第三章栈和队列 一、选择题 1.栈和队列的共同特点是( )。 A.只允许在端点处插入和删除元素 B.都是先进后出 C.都是先进先出 D.没有共同点 2.向顺序栈中压入新元素时,应当()。 A.先移动栈顶指针,再存入元素 B.先存入元素,再移动栈顶指针C.先后次序无关紧要 D.同时进行 3.允许对队列进行的操作有( )。 A. 对队列中的元素排序 B. 取出最近进队的元素 C. 在队头元素之前插入元素 D. 删除队头元素 4.用链接方式存储的队列,在进行插入运算时( ). A. 仅修改头指针 B. 头、尾指针都要修改 C. 仅修改尾指针 D.头、尾指针可能都要修改 5.设用链表作为栈的存储结构则退栈操作()。 A. 必须判别栈是否为满 B. 必须判别栈是否为空 C. 判别栈元素的类型 D.对栈不作任何判别 6.设指针变量front表示链式队列的队头指针,指针变量rear表示链式队列的队尾指针,指针变量s指向将要入队列的结点X,则入队列的操作序列为()。 A.front->next=s;front=s; B. s->next=rear;rear=s; C. rear->next=s;rear=s; D. s->next=front;front=s; 7.设指针变量top指向当前链式栈的栈顶,则删除栈顶元素的操作序列为()。 A.top=top+1; B. top=top-1; C. top->next=top; D. top=top->next; 8.队列是一种()的线性表。 A. 先进先出 B. 先进后出 C. 只能插入 D. 只能删除 9.设输入序列1、2、3、…、n经过栈作用后,输出序列中的第一个元素是n,则输出序列中的第i个输出元素是()。 A. n-i B. n-1-i C. n+l -i D.不能确定 10.设输入序列为1、2、3、4、5、6,则通过栈的作用后可以得到的输出序列为()。 A. 5,3,4,6,1,2 B. 3,2,5,6,4,1 C. 3,1,2,5,4,6 D. 1,5,4,6,2,3 11.队列的删除操作是在()进行。 A.队首 B.队尾 C.队前 D.队后 12.当利用大小为N 的数组顺序存储一个栈时,假定用top = = N表示栈空,则退栈时,用()语句修改top指针。 A.top++; B.top=0; C.top--; D.top=N; 13.队列的插入操作是在()进行。

通信电子线路实验报告三点式振荡

通信电了线路课程设计 课程名称通信电子线路课程设计_________________ 专业___________________ 通信工程 ______________________ 班级___________________________________________ 学号___________________________________________ 姓名___________________________________________

指导教师________________________________________ 、八 刖 现代通信的主要任务就是迅速而准确的传输信息。随着通信技术的日益发展,组成通信系统的电子线路不断更新,其应用十分广泛。实现通信的方式和手段很多,通信电子线路主要利用电磁波传递信息的无线通信系统。 在本课程设计中,着眼于无线电通信的基础电路一一LC正弦振荡器的分析和研究。常用正弦波振荡器主要由决定振荡频率的选频网络和维持振荡的正反馈放大器组成,这就是反馈振荡器。按照选频网络所采用元件的不同,正弦波振荡器可分为LC振荡器、RC振荡器和晶体振荡器等类型。其中LC振荡器和晶体振荡器用于产生高频正弦波。正反馈放大器既可以由晶体管、场效应管等分立器件组成,也可由集成电路组成。LC振荡器中除了有互感耦合反馈型振荡器之外,其最基本的就是三端式(又称三点式)的振荡器。而三点式的振荡器中又有电容三点式振荡器和电感三点式振荡器这两种基本类型。 反馈振荡器是一种常用的正弦波振荡器,主要由决定振荡频率的选频网络和维持振荡的正反馈放大器组成。按照选频网络所采用元件的不同,正弦波振荡器可分为LC振荡器、RC振荡器和晶体振荡器等类型。本文介绍了高频电感三点式振荡器电路的原理及设计,电感三点式易起振,调整频率方便,可以通过改变电容调整频率而不影响反馈系数。正弦波振荡器在各种电子设备中有着广泛的应用。根据所产生的波形不同,可将振荡器分成正弦波振荡器和非正弦波振荡器两大类。前者能产生正弦波,后者能产生矩形波、三角波、锯齿波等。 在此次的通信电子线路课程设计中,我选做的是电感三点式振荡设计,通过为时一周的上机实验,我学到了很多书本之外的知识,在老师的指导下达到实验设计的要求指

数据结构实验二-栈和队列的基本操作与应用

实验报告 课程名称_______数据结构实验__________________ 实验项目___ 栈和队列的基本操作与应用____ 实验仪器_____________________________________ 系别 ___ 计算机学院_______________ 专业 __________________ 班级/学号______ _________ 学生姓名_____________________ __ 实验日期__________________ 成绩_______________________ 指导教师____ __________________

一、实验内容: 本次实验主要内容是表达式求值,主要通过栈和队列来编写程序,需要实现整数运算其中需要实现的功能有加减乘除以及括号的 运用,其中包含优先级的判断。 二、设计思想 1.优先级中加减、乘除、小括号、以及其他可以分组讨论优先 级 2.优先级关系用“>”“<”“=”来表示三种关系 3.为实现运算符优先使用两个栈:OPTR 运算符栈与OPND操作 符栈 4.运用入栈出栈优先级比较等方式完成运算 三、主要算法框架 1.建立两个栈InitStack(&OPTR); InitStack(&OPND); 2.Push“#”到 OPTR 3.判断优先级做入栈出栈操作 If“<” Push(&OPTR, c); If“=” Pop(&OPTR, &x) If“>” Pop(&OPTR, &theta); Pop(&OPND, &b);

Pop(&OPND, &a); Push(&OPND, Operate(a, theta, b)); 四、调试报告 遇到的问题与解决 1.C语言不支持取地址符,用*S代替&S来编写代码 2.一开始没有计算多位数的功能只能计算一位数,在几个中间 不含运算符的数字中间做p = p*10+c运算。代码如下:p = p * 10 + c - '0'; c = getchar(); if (In(c)) { Push(&OPND, p); p = 0; } 主要算法改进设想: 1.可以用数组储存优先级 2.可以用C++编写,C++支持取地址符&。 五、实验总结

通信电子线路实验报告解析

LC与晶体振荡器 实验报告 班别:信息xxx班 组员: 指导老师:xxx

一、实验目的 1)、了解电容三点式振荡器和晶体振荡器的基本电路及其工作原理。 2)、比较静态工作点和动态工作点,了解工作点对振荡波形的影响。 3)、测量振荡器的反馈系数、波段复盖系数、频率稳定度等参数。 4)、比较LC 与晶体振荡器的频率稳定度。 二、实验预习要求 实验前,预习教材:“电子线路非线性部分”第3章:正弦波振荡器;“高频电子线路”第四章:正弦波振荡器的有关章节。 三、实验原理说明 三点式振荡器包括电感三点式振荡器(哈脱莱振荡器)和电容三点式振荡器(考毕兹振荡器),其交流等效电路如图1-1。 1、起振条件 1)、相位平衡条件:X ce 和X be 必 需为同性质的电抗,X cb 必需为异性质 的电抗,且它们之间满足下列关系: 2)、幅度起振条件: 图1-1 三点式振荡器 式中:q m ——晶体管的跨导, F U ——反馈系数, A U ——放大器的增益, LC X X X X Xc o C L ce be 1 |||| )(= -=+-=ω,即)(Au 1 * 'ie L oe m q q q Fu q ++ >

q ie——晶体管的输入电导, q oe——晶体管的输出电导, q'L——晶体管的等效负载电导, F U一般在0.1~0.5之间取值。 2、电容三点式振荡器 1)、电容反馈三点式电路——考毕兹振荡器 图1-2是基本的三点式电路,其缺点是晶体管的输入电容C i和输出电容Co对频率稳定度的影响较大,且频率不可调。 L1L1 (a)考毕兹振荡器(b)交流等效电路 图1-2 考毕兹振荡器 2)、串联改进型电容反馈三点式电路——克拉泼振荡器 电路如图1-3所示,其特点是在L支路中串入一个可调的小电容C3,并加大C1和C2的容量,振荡频率主要由C3和L决定。C1和C2主要起电容分压反馈作用,从而大大减小了C i和C o对频率稳定度的影响,且使频率可调。

相关主题
文本预览
相关文档 最新文档