当前位置:文档之家› 北邮信通院数据结构实验二--八皇后问题实验报告(内附源代码完整版)

北邮信通院数据结构实验二--八皇后问题实验报告(内附源代码完整版)

北邮信通院数据结构实验二--八皇后问题实验报告(内附源代码完整版)
北邮信通院数据结构实验二--八皇后问题实验报告(内附源代码完整版)

数据结构实验报告

实验名称:实验二——八皇后问题

学生姓名:

班级:

班内序号:

学号:

日期:2014年11月27日

1.实验要求

【实验目的】

进一步掌握指针、模板类、异常处理的使用

掌握栈的操作的实现方法

掌握队列的操作的实现方法

学习使用栈解决实际问题的能力

学习使用队列解决实际问题的能力

【实验内容】

利用栈结构实现八皇后问题。

八皇后问题19世纪著名的数学家高斯于1850年提出的。他的问题是:在8*8的棋盘上放置8个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列、同一斜线上。请设计算法打印所有可能的摆放方法。

提示:

1、可以使用递归或非递归两种方法实现

2、实现一个关键算法:判断任意两个皇后是否在同一行、同一列和同一斜线上2. 程序分析

2.1 存储结构

存储结构:栈(递归)

2.2 关键算法分析

①递归调用摆放皇后

1、关键算法伪代码:

(1).如果输入的row大于皇后的数量,则输出皇后的位置

(2)否则col从0开始递增

(3) 检测(row,col)上的点是否符合条件,不符合则col自增,符合则转到下

一个皇后的排列

2、代码详细分析:

void SeqStack::PlaceQueen(int row) //摆放皇后

{

for (int col=0;col< n;col++) //遍历0~7,

{

Push(col);

if (Check()) //判断摆放皇后的位置是否合适

{

if (row< n-1) //若还没有放到最后一个,则进行下一个皇后的放置

PlaceQueen(row+1);

else

{

num++; //计数器加1

Print(n); //打印成功的坐标点}

}

Pop(); //若不符合条件则出栈}

}

3、计算时间复杂度:O(n2)

②判断皇后位置是否合适:

1、关键算法伪代码:

对于一个坐标,将前面每一个坐标均与这个坐标比较

若在同一列或在同一斜线上,则返回0,

否则j自增1,面每一个坐标与前面做比较

若与前面坐标在同一列

最后返回

2、代码分析:

bool SeqStack::Check()

{

for(int i=0;i

检查前面已摆放的皇后位置

if(data[top]==data[i]||(abs(data[top]-data[i]))==(top-i)) //判断是否在同一

列同一斜线

return false;

return true;

}

3、时间复杂度:O(n)

2.3 其他

说明:由于输出显示时对话框有限,而程序结果比较多,占用空间大,运用输出坐标位置来表示,则可以输出全部解。

3. 程序运行结果

(1)程序框图:

(2)程序代码:

#include

using namespace std;

const int m=1024; //定义栈的最大高度

int num=0; //初始化方案种类计数器

int n; //摆放的皇后个数

class SeqStack //定义顺序栈

{

public:

SeqStack(){top=-1;} //构造函数,初始化空栈

void Push(int x); //入栈void Pop(); //出栈void PlaceQueen(int row); //摆放皇后的递归函数

bool Check(); //判断是否在同一行同一列同一斜线

void Print(int n); //打印以坐标的形式

bool Empty(); //判别栈是否为空

private:

int data[m]; //定义数组

int top; //栈顶指针

};

void SeqStack::Push(int x) //入栈操作{

if(top>= m-1) throw "上溢";

top++; //栈顶指针上移

data[top]=x;

}

void SeqStack::Pop() //出栈操作{

if(Empty()) throw "下溢";

top--; //栈顶指针下移

}

void SeqStack::PlaceQueen(int row) //摆放皇后

{

for (int col=0;col< n;col++) //遍历0~7,

{

Push(col);

if (Check()) //判断摆放皇后的位置是否合适

{

if (row< n-1) //若还没有放到最后一个,则进行下一个皇后的放置

PlaceQueen(row+1);

else

{

num++; //计数器加1

Print(n); //打印成功的坐标点

}

}

Pop(); //若不符合条件则出栈

}

}

bool SeqStack::Empty()

{

if(top==-1)

return true;

else

return false;

}

bool SeqStack::Check()

{

for(int i=0;i

if(data[top]==data[i]||(abs(data[top]-data[i]))==(top-i)) //判断是否在同一列同一斜线

return false;

return true;

}

void SeqStack::Print(int n) //将栈的数组形式打印成坐标

{

int i;

for(i=1;i<=n;i++)

cout<<"("<

cout<

}

void main()

{ cout<<"输入Queen的数目(n>0)"<

cin>>n;

if(n<0||n>1024)

{cout<<"输入错误"<

SeqStack Queen; //定义类的对象

Queen.PlaceQueen(0); //从栈底开始

赋值

cout<<" Queen可能的摆放位置种类:"<

(3)运行结果:

4. 总结

调试时出现的问题:最初由于递归的思想未能很好掌握,导致几次调试都出现比较严重的错误;且在运用该方法时,未能将八皇后问题的具体思路搞清,没有考虑“如果前次的皇后放置错误导致后面的放置无论如何都不能满足要求,在设计递归算法总是只显示几种,为了将92种情形全部打印,采用坐标的形式。使用了栈的存储结构来存储位置的纵坐标,不符合时将其出栈,要注意栈是否为空。

总结:这次实验让我更好地掌握了栈思想以及函数的嵌套调用等等知识,以及一些书本上没有的东西,让我学会了运用递归算法去解决一些复杂的问题。另外,在写程序时,要避免由于粗心造成的低级错误,减少调试的次数。

改进:不仅可以设计放置八皇后,只要修改输入的N,便可显示其他情况的结果。

数据结构课程实验指导书

数据结构实验指导书 一、实验目的 《数据结构》是计算机学科一门重要的专业基础课程,也是计算机学科的一门核心课程。本课程较为系统地论述了软件设计中常用的数据结构以及相应的存储结构与实现算法,并做了相应的性能分析和比较,课程内容丰富,理论系统。本课程的学习将为后续课程的学习以及软件设计水平的提高打下良好的基础。 由于以下原因,使得掌握这门课程具有较大的难度: 1)理论艰深,方法灵活,给学习带来困难; 2)内容丰富,涉及的知识较多,学习有一定的难度; 3)侧重于知识的实际应用,要求学生有较好的思维以及较强的分析和解决问题的能力,因而加大了学习的难度; 根据《数据结构》课程本身的特性,通过实验实践内容的训练,突出构造性思维训练的特征,目的是提高学生分析问题,组织数据及设计大型软件的能力。 课程上机实验的目的,不仅仅是验证教材和讲课的内容,检查自己所编的程序是否正确,课程安排的上机实验的目的可以概括为如下几个方面: (1)加深对课堂讲授内容的理解 实验是对学生的一种全面综合训练。是与课堂听讲、自学和练习相辅相成的必不可少的一个教学环节。通常,实验题中的问题比平时的习题复杂得多,也更接近实际。实验着眼于原理与应用的结合点,使学生学会如何把书上学到的知识用于解决实际问题,培养软件工作所需要的动手能力;另一方面,能使书上的知识变" 活" ,起到深化理解和灵活掌握教学内容的目的。 不少学生在解答习题尤其是算法设计时,觉得无从下手。实验中的内容和教科书的内容是密切相关的,解决题目要求所需的各种技术大多可从教科书中找到,只不过其出

现的形式呈多样化,因此需要仔细体会,在反复实践的过程中才能掌握。 (2) 培养学生软件设计的综合能力 平时的练习较偏重于如何编写功能单一的" 小" 算法,而实验题是软件设计的综合训练,包括问题分析、总体结构设计、用户界面设计、程序设计基本技能和技巧,多人合作,以至一整套软件工作规范的训练和科学作风的培养。 通过实验使学生不仅能够深化理解教学内容,进一步提高灵活运用数据结构、算法和程序设计技术的能力,而且可以在需求分析、总体结构设计、算法设计、程序设计、上机操作及程序调试等基本技能方面受到综合训练。实验着眼于原理与应用的结合点,使学生学会如何把书本上和课堂上学到的知识用于解决实际问题,从而培养计算机软件工作所需要的动手能力。 (3) 熟悉程序开发环境,学习上机调试程序一个程序从编辑,编译,连接到运行,都要在一定的外部操作环境下才能进行。所谓" 环境" 就是所用的计算机系统硬件,软件条件,只有学会使用这些环境,才能进行 程序开发工作。通过上机实验,熟练地掌握程序的开发环境,为以后真正编写计算机程序解决实际问题打下基础。同时,在今后遇到其它开发环境时就会触类旁通,很快掌握新系统的使用。 完成程序的编写,决不意味着万事大吉。你认为万无一失的程序,实际上机运行时可能不断出现麻烦。如编译程序检测出一大堆语法错误。有时程序本身不存在语法错误,也能够顺利运行,但是运行结果显然是错误的。开发环境所提供的编译系统无法发现这种程序逻辑错误,只能靠自己的上机经验分析判断错误所在。程序的调试是一个技巧性很强的工作,尽快掌握程序调试方法是非常重要的。分析问题,选择算法,编好程序,只能说完成一半工作,另一半工作就是调试程序,运行程序并得到正确结果。 二、实验要求 常用的软件开发方法,是将软件开发过程划分为分析、设计、实现和维护四个阶段。虽然数据结构课程中的实验题目的远不如从实际问题中的复杂程度度高,但为了培养一个软件工作者所应具备的科学工作的方法和作风,也应遵循以下五个步骤来完成实验题目: 1) 问题分析和任务定义 在进行设计之前,首先应该充分地分析和理解问题,明确问题要求做什么?限制条件是什么。本步骤强调的是做什么?而不是怎么做。对问题的描述应避开算法和所涉及的数据类型,而是对所需完成的任务作出明确的回答。例如:输入数据的类型、值的范围以及输入的

北邮数据库实验四数据库模式的设计

北邮数据库实验四数据 库模式的设计 Revised by Chen Zhen in 2021

北京邮电大学 实验报告 课程名称数据库 实验名称数据库模式的设计班级 姓名 学号 指导老师 成绩_________ 实验

.1.实验目的 1.了解E-R图的基本概念和根据数据需求描述抽象出E-R图并将其转换为数据库逻辑模式进而实现数据库中的表和视图。 2.通过进行数据库表的建立操作,熟悉并掌握Power designer数据库表的建立方法,理解关系数据库表的结构,巩固SQL标准中关于数据库表的建立语句。 3.通过对Power designer中建立、维护视图的实验,熟悉Power designe中对视图的操作方法和途径,理解和掌握视图的概念。 .2.实验内容 1 针对以下需求信息,尽可能全面地给出各个实体的属性和实体之间的系。 在线考试系统需求信息如下: 在线考试系统是关于一门课程的授课教师安排自己的学生在线参加各种考试的应 用,如果阶段性考试,期中考试和期末考试等。在线考试系统要求有用户的登录和登出。在线考试系统主要包括用户管理、试题管理、试卷管理和考试管理功能。需要实现教师输入试题,从试题生成试卷;学生参加考试获取试卷,提交答案和给出考试成绩等主要逻辑功能。 系统的用户包括教师、学生角色,一个用户有且只有一种角色。 鉴于在线考试的客观条件限制,试题完全采用单项选择形式。试题有所属知识点、内容、分值、备选答案和唯一正确答案等属性组成。课程的知识点是确定的,可以扩展,一道试题只能考察一个知识点。

教师录入各种试题构成题库,并根据考察的知识点不同生成试卷,相同知识点的试题只能在一张试卷中出现一次,试卷由试卷标题和一定数量(即知识点的数量)的试题组成。试卷生成后,教师指定某次考试使用的试卷,学生参加考试使用统一的试卷,考试信息还包含考试标题、任教老师、考试时间。 学生登录后,可以参加考试并在提交答案后立刻得到自己的考试成绩,也可以查看自己的考试历史记录。教师登录后可以查看学生的成绩。 ?2将E-R图输入Power Designer形成概念模型 ? 3 使用Power Designe将输入的E-R图转换成数据库物理模型 ? 4 使用Power Designe将输入的数据库物理模型转化为生成数据库中的表和视图的脚 本 ? 5 执行SQl脚本,生成表和视图 ? 6 成功后,查看生成的表和视图的情况 .3.实验环境 普通PC、Windows系列操作系统、IBM DB2 数据库管理系统 .4.实验步骤、结果与分析 1)五个实体: 用户: 用户ID( UserID )、用户名(UserName)、角色(Role)、密码(Password). 试题库(ItemBank): 题目代码(ItemID)、题目内容(Icontent)、分数(Iscore)、选项(Ioption)、正确答案(Ianswer)、知识点代码(PointID)(froeign). 知识点(KonwledgePoint): 知识点代码(PointID)、知识点内容(Pcontent)、知识点学科(Psubject). 试卷(Paper):

北邮导师简介

这是我以前到处搜刮来的,自己看看吧。 唐老师是中国网通集团宽带业务应用国家工程实验室副总共,兼职导师,硕士只有两个名额,博士有一个名额, 05年上院线的4个人都要了,06年,竞争比较激烈分比较高,07年上院线的4个,唐老师只有两个名额,要了两个,并且帮另外两个同学调剂到其他导师那里.08年,只有一个报考唐老师的上线,唐老师接受了一个调剂的. 其实所谓的方向,都是遇到什么做什么,并非那么死. 如果跟唐老师读研的话,运营商的各个方向,只要有兴趣,老师都会尽量给你实习的机会. 另外,如果能找到更好的实习机会或者出国,唐老师一定会积极鼓励的. 往年: 大宋(含宋梅)老师 350+ 刘杰老师350+ (这些年有刘杰老师偏高大宋老师走低的趋势) 老邓院长那320(招不满的情况下就另计了,会择优收一些调剂) 张校长(含王卫东老师) 320 新来的刘元安院长(含唐碧华老师)没有往年参考数据,前电院四小龙分低不了吧呵呵 新来的继教的老师没有参考数据不详 吕奶奶(依每年看情况不详) 光方向(不详) 写在前面的话:整个暑期都泡在北邮人考研版上,发现很多同学对与考研问题不断,但问题的重复率也很高,因此对此稍做整理,方便同学考研解惑,希望对你们有帮助 注:以下问题及其答案大部分都是在版块内搜集的,如有错误欢迎大家纠正 因为北邮院系改革,而且很多老师都没有到位,因此报考专业可能出现变化,一切以即将出的09招生简章为准

Q:北邮的研究生报考时给其他学校不一样,要先报导师,但不知道具体怎么回事 A:08时的计算机,使用的是报导师组(就是选定一个专业方向)的方式。如果考上了,那么复试就是在导师组内复试,调剂也优先考虑组内调剂,不行才会考虑组外调剂。 Q:北邮是否有专业课辅导班?如何报考? A:北邮本校是没有专业课辅导班。所谓的通原辅导班是由外面辅导机构所办。海文和北邮合作的专业课辅导是李莉,李宗豪讲,是北邮代课老师。但是在下特此声明,命题的老师不会也不可能出来讲课的,这是不允许的。 Q:该什么时候联系导师啊? A:保研的现在研究;考研的在报考前考虑一下,实际加紧联系就在出成绩那段时间了。 Q:请问院系重组对研究生学院有什么影响? A:暂时未知,有消息及时通知 Q:北邮计算机今年复试是不是要上机? A:08头一年上机,明年应该还会有 Q:08年电院分数线是多少?其他学院呢? A:电院320 信院305 计科300 电子300 Q:非应届毕业生一定要去北邮参加研究生考试么? A:答:不需要,各地有考试点 Q:信息工程院的密码学怎么样,专业课是考高等代数吗? A:信号通原数学都行,只有专业,导师到时候再分配 Q:电信工程院有哪些牛导? A:在外界看来电院最厉害的是三大牛导:张平王文博杨大成 Q:北邮考研有歧视吗? A:没有。这个问题很多人问过,老师一律平等对待,好好考好初试。 Q:北邮哪个老师做嵌入式的比较牛? A:邝坚 Q:复试的时候导师主要以什么作参考?导师比较看重什么?比如项目经验,学校? A:每个导师看中的方面都不一样,无法回答。好好过了初试再去费心复试的问题

北邮信通院数据结构实验报告三哈夫曼编码器之欧阳光明创编

数据结构实验报告 欧阳光明(2021.03.07) 实验名称:实验三树——哈夫曼编/解码器 学生姓名: 班级: 班内序号: 学号: 日期: 2014年12月11日 1.实验要求 利用二叉树结构实现赫夫曼编/解码器。 基本要求: 1、初始化(Init):能够对输入的任意长度的字符串s进行统 计,统计每个字符的频度,并建立赫夫曼树 2、建立编码表(CreateTable):利用已经建好的赫夫曼树进行编 码,并将每个字符的编码输出。 3、编码(Encoding):根据编码表对输入的字符串进行编码,并 将编码后的字符串输出。 4、译码(Decoding):利用已经建好的赫夫曼树对编码后的字符 串进行译码,并输出译码结果。 5、打印(Print):以直观的方式打印赫夫曼树(选作) 6、计算输入的字符串编码前和编码后的长度,并进行分析, 讨论赫夫曼编码的压缩效果。 测试数据: I love data Structure, I love Computer。I will try my best to study

data Structure. 提示: 1、用户界面可以设计为“菜单”方式:能够进行交互。 2、根据输入的字符串中每个字符出现的次数统计频度,对没有 出现的 字符一律不用编码。 2. 程序分析 2.1 存储结构 Huffman树 给定一组具有确定权值的叶子结点,可以构造出不同的二叉树,其中带权路径长度最小的二叉树称为Huffman树,也叫做最优二叉树。

weight lchild rchildparent 2-1-1-1 5-1-1-1 6-1-1-1 7-1-1-1 9-1-1-1 weight lchild rchild parent

数据结构实验报告代码

线性表 代码一 #include "stdio.h" #include "malloc.h" #define OK 1 #define ERROR 0 #define OVERFLOW -2 #define LIST_INIT_SIZE 100 #define LISTINCREMENT 10 typedef struct { int * elem; int length; int listsize; }SqList; int InitList_Sq(SqList *L) { L->elem = (int*)malloc(LIST_INIT_SIZE*sizeof(int)); if (!L->elem) return ERROR; L->length = 0; L->listsize = LIST_INIT_SIZE; return OK; } int ListInsert_Sq(SqList *L, int i,int e) { int *p,*newbase,*q; if (i < 1 || i > L->length+1) return ERROR; if (L->length >= L->listsize) { newbase = (int *)realloc(L->elem,(L->listsize+LISTINCREMENT)*sizeof (int)); if (!newbase) return ERROR; L->elem = newbase; L->listsize += LISTINCREMENT; } q = &(L->elem[i-1]); //插入后元素后移for(p=&(L->elem[L->length-1]);p>=q;p--) *(p+1)=*p; *q=e; L->length++; return OK; } int ListDelete_Sq(SqList *L, int i, int *e) {

北邮大三数据库实验六数据查询分析实验

实验六数据查询分析实验 实验目的 通过对不同情况下查询语句的执行分析,巩固和加深对查询和查询优化相关理论知识的理解,提高优化数据库系统的实践能力,熟悉了解Sybase中查询分析器的使用,并进一步提高编写复杂查询的SQL 程序的能力。 实验内容 1.索引对查询的影响 (1)对结果集只有一个元组的查询分三种情况进行执行(必如查询一个具体学生的信息):不建立索引,(学号上)建立非聚集索引,(学号上)建立聚集索引。 建立聚集索引: create clustered index student on student(student_id) go 建立非聚集索引: create nonclustered index student_index on student(student_id) go 用查询分析器的执行步骤和结果对执行进行分析比较。 select*from student where student_id='30201' 不建立索引 建立聚集索引

建立非聚集索引 (2)对结果集中有多个元组的查询(例如查看某门成绩的成绩表)分类似(1)的三种情况进行执行比较。 select*from student where student_id>'30401' 不建立索引:

建立聚集索引: 建立非聚集索引: (3)对查询条件为一个连续的范围的查询(例如查看学号在某个范围内的学生的选课情况)分类似(1)的三种情况进行执行比较,注意系统处理的选择。 select*from student where student_id between'31201'and'31415' 不建立索引:

数据结构实验一的源代码

#include #include typedef struct Node { int key;//密码 int num;//编号 struct Node *next;//指向下一个节点 } Node, *Link; void InitList(Link &L) //创建一个空的链表{ L = (Node *)malloc(sizeof(Node)); if (!L) exit(1); L->key = 0; L->num = 0; L->next = L; } void Creatlinklist(int n, Link &L) //初始化链表{ Link p, q; q = L; for (int i = 1; i <= n; i++) { p = (Node *)malloc(sizeof(Node)); if (!p) exit(1); scanf("%d", &p->key); p->num = i; L->next = p; L = p; } L->next = q->next; free(q); } Link Locate_m(Link &p, int m)//找到第m个 { Link q; for (int j = 1; jnext; q = p->next; m = q->key;

return q; } void Delete_m(Link &L, Link p, Link q)//删除第m个{ p->next = q->next; free(q); } void main() { Link L, p, q; int n, m; L = NULL; InitList(L);//构造出一个只有头结点的空链表 printf("请输入初始密码人数每个人的密码:\n"); scanf("%d", &m);//初始密码为m scanf("%d", &n);// Creatlinklist(n, L);//构建 p = L; for (int i = 1; i <= n; i++) { q = Locate_m(p, m);//找到第m个 printf("%d", q->num); Delete_m(L, p, q);//删除第m个 } system("pause"); }

数据库实验四

西南石油大学实验报告 注意:在粘贴截图时请保留窗口完整标题,但只需保留关键界面,多余的空白界面请删除。 一、实验课时:2 二、实验目的 (1) 掌握使用T-SQL语句创建登录帐户的方法。 (2) 掌握使用T-SQL语句创建数据库用户的方法。 (3) 掌握使用T-SQL语句创建数据库角色的方法。 (4) 掌握使用T-SQL语句管理数据库用户权限方法。 三、实验要求 (1) 使用SQL Server 2008查询分析器。 (2) 严格依照操作步骤进行。 四、实验环境 (1) PC机。 (2) SQL Server 2008。 五、实验内容及步骤 注意事项: (1)首先在C盘根目录创建文件夹Bluesky,执行脚本文件“PracticePre-第11章安全管理.sql”,创建数据库BlueSkyDB和表; (2)如何建立“数据库引擎查询”;

(3)使用“select user_name()”可查询当前登录账号在当前数据库中的用户名。 步骤1 使用Transact-SQL创建三个SQL Server登录账户TUser1、TUser2、TUser3,初始密码均为“123456”。 --SA CREATE LOGIN TUser1 WITH PASSWORD='123456' CREATE LOGIN TUser2 WITH PASSWORD='123456' CREATE LOGIN TUser3 WITH PASSWORD='123456' 步骤2 使用TUser1建立一个新的数据库引擎查询,在“可用数据库”下拉列表框中是否能看到并选中BlueSkyDB数据库?为什么?

北邮通信工程校内专业实习报告

北京邮电大学实习报告

附:实习总结及心得体会: 课程回顾: 1、电声演播数字电视 这是第一个实验,历时一天半。此实验主要围绕H.264标准进行。 老师介绍了电声演播及数字电视技术的历史与发展,本实验室的历史与发展。然后介绍了各种声学图像方面的老设备以及发展状况,包括留声机、录像机和老式的播放电影带的放映机,到当今的2.0、5.1音响,PL,VCD,DVD等设备。讲解了图像编解码方面的各种知识。 *H.264-SVC的全称为可伸缩视频变换编码,以提高压缩视频流在丢包信道下传输时的错差恢复能力。根据具有不同空间层和时间级的主图像在编码结构中的重要性的不同来优化冗余图像码率的分配。在有效的控制冗余速率的同时,解决了在丢包信道传输视频时的误差漂移问题。该方法使用简单的粗糙量化主图像的方法来生成冗余图像,大大减小了差错恢复工具对编解码复杂度的增加。仿真结果表明,使用优化后的冗余图像能够在有限增加带宽的情况下有效抵制丢包信道下视频传输产生的误差漂移现象,使解码视频质量有明显改善。H.264-SVC采用分层技术,分为基本层和增强层。 实验中,老师改变编解码器不同参数,入帧间隔、编码比特率、编码帧率等,观察视频质量效果的变化,并分析原因。改变量化参数QP,通过观察,可知QP值越小,编码后文件大小越小,图像效果越差。通过改变码率进行流提取,发现视频子层数减少,画面播放速率加快。丢包率的测试中,丢包率越小画面越清晰,但相同丢包率时,有记忆的丢包模式比无记忆丢包模式解码产生的画面更清晰。 声学实验中,实验室放着各种设备,其中一套5.1声道环绕立体声音响放在实验室四周。我们坐在中间,听老师播放出来的不同性质的声音,让我们体会不同因素对声音效果的影响。在欣赏音乐的同时了解了一些原理。

北邮数据结构实验3哈夫曼编码

数据结构实验报告 实验名称:实验3——哈夫曼编码 学生姓名: 班级: 班内序号: 学号: 日期:2013年11月24日 1.实验要求 利用二叉树结构实现赫夫曼编/解码器。 基本要求: 1、初始化(Init):能够对输入的任意长度的字符串s进行统计,统计每个 字符的频度,并建立赫夫曼树 2、建立编码表(CreateTable):利用已经建好的赫夫曼树进行编码,并将每 个字符的编码输出。 3、编码(Encoding):根据编码表对输入的字符串进行编码,并将编码后的 字符串输出。 4、译码(Decoding):利用已经建好的赫夫曼树对编码后的字符串进行译 码,并输出译码结果。 5、打印(Print):以直观的方式打印赫夫曼树(选作) 6、计算输入的字符串编码前和编码后的长度,并进行分析,讨论赫夫曼 编码的压缩效果。 2. 程序分析 2.1存储结构: struct HNode { char c;//存字符内容 int weight; int lchild, rchild, parent; }; struct HCode

{ char data; char code[100]; }; //字符及其编码结构 class Huffman { private: HNode* huffTree; //Huffman树 HCode* HCodeTable; //Huffman编码表 public: Huffman(void); void CreateHTree(int a[], int n); //创建huffman树 void CreateCodeTable(char b[], int n); //创建编码表 void Encode(char *s, string *d); //编码 void Decode(char *s, char *d); //解码 void differ(char *,int n); char str2[100];//数组中不同的字符组成的串 int dif;//str2[]的大小 ~Huffman(void); }; 结点结构为如下所示: 三叉树的节点结构: struct HNode//哈夫曼树结点的结构体 { int weight;//结点权值 int parent;//双亲指针 int lchild;//左孩子指针 int rchild;//右孩子指针 char data;//字符 }; 示意图为: int weight int parent int lchild int rchild Char c 编码表节点结构:

数据结构实验程序

顺序表的基本操作 #include using namespace std; typedef int datatype; #define maxsize 1024 #define NULL -1 typedef struct { datatype *data; int last; }sequenlist; void SETNULL(sequenlist &L) { L.data=new datatype[maxsize]; for(int i=0;i>https://www.doczj.com/doc/8d8452956.html,st; cout<<"请输入"<>L.data[i]; } int LENGTH(sequenlist &L) { int i=0; while(L.data[i]!=NULL) i++; return i; } datatype GET(sequenlist &L,int i) { if(i<1||i>https://www.doczj.com/doc/8d8452956.html,st) { cout<<"error1"<

int j=0; while(L.data[j]!=x) j++; if(j==https://www.doczj.com/doc/8d8452956.html,st) { cout<<"所查找值不存在!"<=maxsize-1) { cout<<"overflow"; return NULL; } else if(i<1||(i>https://www.doczj.com/doc/8d8452956.html,st)) { cout<<"error2"<=i-1;j--) L.data[j+1]=L.data[j]; L.data[i-1]=x; https://www.doczj.com/doc/8d8452956.html,st++; } return 1; } int DELETE(sequenlist &L,int i) { int j; if((i<1)||(i>https://www.doczj.com/doc/8d8452956.html,st+1)) { cout<<"error3"<

北邮数据库实验报告

数据库原理与应用 实验报告 实验指导教师:袁宝库 课程主讲教师: 袁宝库 报告提交日期: 2012 年10 月18 日 北京邮电大学

目录 实验任务 (3) 实验任务一 (4) 实验任务二 (5) 实验任务三 (7) 实验任务四 (8) 实验任务五 (9) 实验任务六 (12) 实验任务七 (20) 思考题 (22) 实验总结 (24)

实验任务 1、安装SQL Server 2008 2、使用SQL Server 配置管理器 3、使用SQL Server Management Studio 4、分别使用对象资源管理器和T-SQL创建一个实验数据库 5、使用对象资源管理器修改数据库的相关参数并将一个实验数据库删除 6、分别使用对象资源管理器和T-SQL创建、删除和修改表 7、分别使用对象资源管理器和T-SQL向表中插入、修改和删除数据 思考题: 1、配置SQL Server 2008 以允许远程连接 使用SQL Server 外围应用配置器配置SQL Server 2008 允许远程连接。 经过前几步的实验,现在已经可以通过远程客户端访问SQL Server 2008数据库服务器了,这里要求2个人一组,互相用自己的客户端(SQL Server Management Studio)连接并访问对方的数据库系统。

实验任务一:安装SQL Server 2008 1、实验设计 使用SQL Server 2008安装光盘将SQL Server 2008开发版安装到本地计算机,使本地计算机成为服务器和客户端工具; 选择Windows 7为操作系统,安装开发版SQL Server 2008; 安装数据库服务、客户端组件、文档、示例和示例数据库; 命名实例为shijing; 使用混合模式进行身份验证; 2、实验过程 使用SQL Server 2008安装介质将SQL Server 2008安装到本地计算机,使本地计算机成为服务器和客户端工具

数据结构实验报告全集

数据结构实验报告全集 实验一线性表基本操作和简单程序 1.实验目的 (1)掌握使用Visual C++ 上机调试程序的基本方法; (2)掌握线性表的基本操作:初始化、插入、删除、取数据元素等运算在顺序存储结构和链表存储结构上的程序设计方法。 2.实验要求 (1)认真阅读和掌握和本实验相关的教材内容。 (2)认真阅读和掌握本章相关内容的程序。 (3)上机运行程序。 (4)保存和打印出程序的运行结果,并结合程序进行分析。 (5)按照你对线性表的操作需要,重新改写主程序并运行,打印出文件清单和运行结果 实验代码: 1)头文件模块 #include >验目的 掌握顺序栈的基本操作:初始化栈、判栈空否、入栈、出栈、取栈顶数据元素等运算以及程序实现方法。 2.实验要求 (1)认真阅读和掌握和本实验相关的教材内容。 (2)分析问题的要求,编写和调试完成程序。 (3)保存和打印出程序的运行结果,并分析程序的运行结果。 3.实验内容 利用栈的基本操作实现一个判断算术表达式中包含圆括号、方括号是否正确配对的程序。具体完成如下:

(1)定义栈的顺序存取结构。 (2)分别定义顺序栈的基本操作(初始化栈、判栈空否、入栈、出栈等)。 (3)定义一个函数用来判断算术表达式中包含圆括号、方括号是否正确配对。其中,括号配对共有四种情况:左右括号配对次序不正确;右括号多于左括号;左括号多于右括号;左右括号匹配正确。 (4)设计一个测试主函数进行测试。 (5)对程序的运行结果进行分析。 实验代码: #include < > #define MaxSize 100 typedef struct { ??? int data[MaxSize]; ??? int top; }SqStack; void InitStack(SqStack *st) 验目的 (1)进一步掌握指针变量的用途和程序设计方法。 (2)掌握二叉树的结构特征,以及链式存储结构的特点及程序设计方法。 (3)掌握构造二叉树的基本方法。 (4)掌握二叉树遍历算法的设计方法。 3.实验要求 (1)认真阅读和掌握和本实验相关的教材内容。 (2)掌握一个实际二叉树的创建方法。 (3)掌握二叉链存储结构下二叉树操作的设计方法和遍历操作设计方法。 4.实验内容 (1)定义二叉链存储结构。

北邮数据库实验报告

数据库实验报告(四) 姓名:学号:班级: 1.简单查询: (1) 查询“数据库开发技术”课程的学分; SQL语句: select credit from course where course_name='SQL Server数据库开发技术'; 或者模糊查询: select credit from course where course_name like'%数据库开发技术'; 执行结果: (2) 查询选修了课程编号为“dep04_s004”的学生的学号和成绩,并将成绩按降序输出; SQL语句: select student_id,grade from student_course where course_id='dep04_s003' order by grade desc; 执行结果:

(3) 查询学号为“g9940205”的学生选修的课程编号和成绩; SQL语句: select course_id,grade from student_course where student_id='g9940205'; 执行结果: (4) 查询选修了课程编号为“dep04_s001”且成绩高于85分的学生的学号和成绩。 SQL语句: select student_id,grade from student_course where course_id='dep04_s001'and grade>'85'; 执行结果:

2.在多表连接的查询实验中,用Transact SQL语句完成以下查询操作: (1)查询选修了课程编号为“dep04_s002”且成绩高于85分的学生的学号、姓名和成绩; SQL语句: select student.student_id,student_name,grade from student,student_course where student.student_id=student_course.student_id and student_course.course_id='dep04_s002' and student_course.grade>'85'; 执行结果: (2)查询所有学生的学号、姓名、选修的课程名称和成绩; SQL语句: select student.student_id,student_name,course_name,grade from student,course,student_course where student.student_id=student_course.student_id and student_course.course_id=course.course_id; 执行结果:

北邮数据结构第四次实验题目一排序

数据结构实验报告实验名称:实验四排序(题目1) 姓名: 班级: 班内序号: 学号:

1.实验要求 实验目的:学习、实现、对比各种排序算法,掌握各种排序算法的优劣,以及各种算法使用的情况。实验内容:使用简单数组实现下面各种排序算法,并进行比较。 排序算法: 1、插入排序 2、希尔排序 3、冒泡排序 4、快速排序 5、简单选择排序 要求: 1、测试数据分成三类:正序、逆序、随机数据 2、对于这三类数据,比较上述排序算法中关键字的比较次数和移动次数(其中关键字交换 计为3次移动)。 3、对2的结果进行分析,验证上述各种算法的时间复杂度。 编写测试main()函数测试线性表的正确性。 2. 程序分析 2.1 存储结构 2.2 关键算法分析 2.2.1 插入排序 插入排序的基本方法是寻找一个指定元素在待排序元素中的位置,然后插入。一趟直接插入排序的C++描述过程如下: ①将待插入纪录赋值给哨兵r[0]:r[0]=r[i]; ②从后向前进行顺序查找:for(j=i-1;r[0]

{r[j+1]=r[j];move++; comp++;} //循环中移动计数器++ comp++; //比较计数器++ r[j+1]=r[0];move++; //移动计数器++ } comp++; //比较计数器++ } cout<<"本次直接插入排序数据长度为:"<=1;d=d/2) //以d 为增量在子序列中进行插入排序 { for(int i=d+1;i<=n;i++) //一趟希尔排序 { if(r[i]0&&r[0]

数据结构上机实验线性表单链表源代码

#include template class LinearList { public: virtual bool IsEmpty()const=0; virtual int Length()const=0; virtual bool Find(int i,T& x)const=0; virtual int Search(T x)const=0; virtual bool Insert(int i,T x)=0; virtual bool Update(int i,T x)=0; virtual bool Delete(int i)=0; virtual void Output(ostream& out)const=0; protected: int n; }; #include "linearlist" template class SeqList:public LinearLisr { public: SeqList(int mSize); ~SeqList(){delete [] elements;} bool IsEmpty()const; bool Find(int i,T& x)const; int Length()const; int Search(T x)const; bool Insert(int i,T x); bool Update(int i,T x); bool Delete(int i); void Output(ostream& out)const; private: int maxLength; T *elements; }; template SeqList::SeqList(int mSize) { maxLength=mSize;

北邮大数据库实验三

实验三完整性及视图、索引 视图是基于某个查询结果的一个虚拟表,只是用来查看数据的窗口而已。索引能够提供一种以一列或多列的值为基础迅速查找数据表(或视图)中行的能力,用来快速访问数据表(或视图)中的数据。触发器是一种特殊的存储过程,它在特定语言事件发生时自动执行,通常用于实现强制业务规则和数据完整性。 【实验目的】 掌握MySQL视图、索引的使用,理解什么是数据库的完整性。 【实验要求】 1、每完成一个任务,截取全屏幕快照1~3作为中间步骤和结果的贴图,粘贴在最后的实验报告中。 2、除了使用我们提供的数据外还要自己向表中添加些新数据,以保证每个查询结果不为空集,或计数结果不为0。 3、思考题可以选做,作为优秀加分的依据。 【实验任务】 1、创建一个视图,该视图为每门课程的平均成绩,视图包括的列有课程号 及平均成绩,并用利用该视图查询所有课程的平均成绩,要求给出课程号、课程名及平均成绩。

2、创建一个视图,该视图为每门课程的平均成绩,视图包括的列有课程号、 课程名及平均成绩,并用利用该视图查询所有课程的平均成绩,要求给出课程号、课程名及平均成绩。

3、为院系代码表(dept_code)创建基于“院系代码”列的索引。 4、为教室信息表(classroom_info)创建基于room_id列的惟一索引并插入一 条room_id列与表中已有的值重复的数据,观察系统的反馈。

5、重新修改表stud_info、lesson_info及stud_grade,修改的容为: ①为三表增加主码约束,stud_info的主码为stud_id,lesson_info的主码为 course_id,stud_grade的主码为stud_id、course_id。

北邮信通院数据结构实验报告三哈夫曼编码器

北京邮电大学电信工程学院 数据结构实验报告 实验名称:实验三树 ----- 哈夫曼编/解码器 学生姓名: 班级: 班内序号: 学号: 日期:2014年12月11日 1. 实验要求 利用二叉树结构实现赫夫曼编/解码器。 基本要求: 1、初始化(Init):能够对输入的任意长度的字符串s进行统计,统计每个 字符的频度,并建立赫夫曼树 2、建立编码表(CreateTable)利用已经建好的赫夫曼树进行编码,并将每 个字符的编码输出。 3、编码(Encoding):根据编码表对输入的字符串进行编码,并将编码后的 字符串输出。 4、译码(Decoding):禾U用已经建好的赫夫曼树对编码后的字符串进行译 码,并输出译码结果。 5、打印(Print):以直观的方式打印赫夫曼树(选作) 6计算输入的字符串编码前和编码后的长度,并进行分析,讨论赫夫曼编码的压缩效果。 测试数据: I love data Structure, I love Computer。I will try my best to study data Structure. 提示: 1、用户界面可以设计为“菜单”方式:能够进行交互。 2、根据输入的字符串中每个字符出现的次数统计频度,对没有出现的字符 一律不用编码。

2. 程序分析 2.1存储结构 Huffman 树给定一组具有确定权值的叶子结点,可以构造出不同的二叉树,其中带权路径 长度最小的二叉树称为Huffman 树,也叫做最优二叉树 哈夫虽树示意图 root 孩子双亲表示法 _____________________ JL________________ weight Ichild rchild pare nt

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