写一份 数据结构课程设计报告。两个部分为:二叉树的遍历和查找(折半查找)的实现?

《数据结构》课程设计

一、 课程设计目的
通过本次课程设计的教学,帮助学生掌握各种数据结构的特点、存储表示、运算方法以及在计算机科学中最基本的应用。培养学生选用合适的数据结构和编写质量高、风格好的应用程序的基本技能,提高学生分析问题、解决问题的能力,并为后续课程的学习打下良好的基础。

二、 课程设计内容

第一部分 二叉树的遍历
内容:
任意给定一棵二叉树。试设计一个程序,在计算机中构造该二叉树,并对它进行遍历。
要求先建立二叉树,然后分别对它进行前序、中序、后序遍历,并输出遍历序列。 

第二部分 查找的实现
内容:
将折半查找算法写成完整的程序,并上机通过。要求输入有序表中的10个数(任意),及待查找的2个记录。例如:输入23,表中存在待查找记录,则显示该记录在表中位置2,输入58显示该记录不存在。

三、 课程设计要求
1. 设计以程序和报告形式完成,根据课程设计报告质量给出课设成绩。
报告内容及要求如下:
(1)简述题目要解决的问题是什么,并说明输入和输出数据的形式。
(2)简述算法的基本思想。
(3)列出通过调试的源程序。 程序粘贴
(4)列出上面程序对应的运行结果。 截图
(5)写出心得体会。 总共写一个
(6)格式按要求编写(字体:宋体,总标题三号,文中标题四号,正文小四号,行间距20磅)
(7)封面按统一格式(附后)A4纸打印,左侧装订。
2.独立完成课程设计(报告)不能雷同,否则一律视为不及格。
3. 按时完成设计,上交课设报告。

四、 课程设计步骤
1.简要描述题目要求,对所需完成的任务做出明确的陈述,例如输入数据的类型、值的范围以及输入的形式,输出数据的类型、值的范围以及输出的形式。
2.选定数据结构,写出算法,首先描述算法的基本思想,然后进行算法细化。
3.使用Java语言编好上机程序,并进行反复检查,使程序中的逻辑错误和语法错误减少到最低程度。对程序中有疑问的地方,应做出标记,以便在上机时给予注意。
4.上机输入和调试程序,在调试程序过程中除了系统的问题以外,一般应自己独立解决。在程序调试通过后,打印输出程序清单和运行结果。
5.上机结束后,撰写课设报告。

数据库课程设计大赛的尘嚣渐渐远去,怀着对这次大赛的些许不舍,怀着对当初课程设计开始时候的豪情万丈的决心的留恋,怀着通过这次课程设计积累的信心与斗志,我开始写这篇文章,为自己的足迹留下哪怕是微不足道但是对自己弥足珍贵的痕迹并期望与大家共勉。首先,让我的记忆追溯到大二暑假,在老大的指引下(老大劝我学asp.net),我接触到Microsoft公司的.NET产品。那个时候我已经学过vc和asp,因为windows程序设计实验的课的关系,接触过vb,但是没有专门去学他,因为习惯了c++里面的class,int,觉得vb的sub,var看着就不是很顺心。我是一个好奇心很强的人,突然看到了一个号称“.net是用于创建下一代应用程序的理想而又现实的开发工具”,而且主推c#语言,由于对c语言的一贯好感,我几乎是立刻对他产生了兴趣。我就开始了对c#的学习,任何语言都不是孤立存在的,所以数据交互是很重要的,暑假的时候我把我们这学期的课本数据库系统概论看了一遍。我记得以前用c语言编程的时候,数据是在内存中申请空间,譬如使用数组等等。很耗费内存空间。这个时候就是数据库站出来的时候啦,于是我又装上了sqlserver2000,以前学asp的时候用的是access,那个时候只是照着人家做,理论是什么也不是很清楚。通过一个暑假的学习,基本搞清楚了理论方面的东西,具体怎么用也不是很清楚。但是这为这学期的课程设计打下了铺垫。来到学校后,随着这学期的数据库课程大赛开始了,我有一个看法就是我自己应该具备的能力不是我会多少,而是我应该具备快速学会东西的能力。遇到什么就学什么。我们有时候很容易被一些专业名词说吓着,包括什么建模,软件工程,数据分析,数据挖掘等等。我身边就有很多同学被这些纸老虎所唬住,而没有勇气去接触他们,总是说这个太难了之类的退堂鼓的话,他们低估了自己的潜力同时也压抑住了他们自己的好奇心。其实都是纸老虎,又不是什么国家科研难题,只是去用一些工具,发明工具是很难,但是用一个工具就容易多了,justdoit!我记得我做这个数据库之前,我们老师说要做好前期分析,我就在网上搜索用什么分析工具好。最后我选择了roseUML建模工具。在此之前,我脑袋里面没有软件建模的思想,什么UML建模对我而言就是一张空白的纸。但是真正接触后并没有想象的那么难,有什么不懂的上网去搜索,这是一个信息横流的世界,有google,baidu就没有不能解决的知识难题。以及后来的数据库分析的时候用到的powerdesigner也是一样。开发的时候我想过用什么架构,c/s模式?模式有很多,怎么选择?我就上网搜索现在最流行的架构是什么。结果搜到了MVC架构,就是你啦。我决定用这个架构,不会,没关系,咱学。Justdoit!前期工作准备好后,那么我就得把我暑假学的.net加以实践。这个时候我更加深入的了解了利用ado.Net操纵数据库的知识。并且对数据库里面的存储过程有了比较深入的了解。经过大概2个多星期的奋斗,我完成了我的数据库课程设计--基于.net数据集的图书馆管理系统。并最后非常荣幸的获得了大赛的一等奖以及以及新技术应用奖。与其临渊羡鱼,不如退而结网。这次数据库课程设计给我的最大的印象就是如果自己有了兴趣,就动手去做,困难在你的勇气和毅力下是抬不了头的。从做这个数据库开始无论遇到什么困难,我都没有一丝的放弃的念头。出于对知识的渴望,出于对新技术的好奇,出于对一切未知的求知。我完成了这次数据库课程设计,不过这只是我学习路上的驿站,未来十年.NET的核心技术就是XML[至少微软是这么宣传的],我会继续学习它,包括jave公司的j2ee我也很想试试,语言本来就是相通的,justdoit!语言并不重要毕竟它仅仅是工具,用好一个工具并不是一件值得为外人道的事情,主要是了解学习思想。古语说的好:学无止境啊!我很庆幸我参加了这次数据库大赛,让我确实打开了眼界。
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-07-23

二叉树的遍历

#include <iostream>
#include <cstring>
#define maxLength 32
using namespace std;
typedef struct binaryNode
{
 char data;
 struct binaryNode *lchild, *rchild;
} binaryNode;
void createByPreAndIn(char preArray[], char inArray[], binaryNode *&parent, int preStart, int preEnd, int inStart, int inEnd);
void createByLastAndIn(char lastArray[], char inArray[], binaryNode *&parent, int lastEnd, int lastStart, int inStart, int inEnd);
void preOrderVisit(binaryNode *root);
void inOrderVisit(binaryNode *root);
void lastOrderVisit(binaryNode *root);
void rugged(binaryNode *root,int);
void brackets(binaryNode *root);
void level(binaryNode *root);
void display(binaryNode *root);
int main(void)
{
 char preArray[maxLength], inArray[maxLength], lastArray[maxLength];
 binaryNode *root;
 cout<<"构造二叉树,输入构造方式。(1代表前中序,其它数字代表后中序): ";
 int way;
 cin>>way;
 if(way==1)
 {
  cout << "输入前序遍历序列: ";
  cin >> preArray;
  cout << "输入中序遍历序列: ";
  cin >> inArray;
  
  createByPreAndIn(preArray, inArray, root, 0, strlen(preArray) - 1, 0, strlen(inArray) - 1);
 }
 else if(way==2)
 {
  cout << "输入后序遍历序列: ";
  cin >> lastArray;
  cout << "输入中序遍历序列: ";
  cin >> inArray;
  createByLastAndIn(lastArray, inArray, root, 0, strlen(lastArray) - 1, 0, strlen(inArray) - 1);
 }//initialization 
 cout<<"构造完成,下列是该二叉树的表示方式"<<endl; 
 display(root);
 cout<<"按enter键继续..."; 
 cin.get(); cin.get();
 
 return 0;
}
void createByPreAndIn(char preArray[], char inArray[],binaryNode *&parent, int preStart, int preEnd, int inStart, int inEnd)
{
 if (preStart <= preEnd)
 {
  parent = new binaryNode;
  parent->data = preArray[preStart], parent->lchild = parent->rchild = NULL;
  int middle = inStart;
  while (inArray[middle] != preArray[preStart] && middle <= inEnd)
   middle++;
  createByPreAndIn(preArray, inArray, parent->lchild, preStart + 1, preStart+middle-inStart, inStart, middle - 1);
  createByPreAndIn(preArray, inArray, parent->rchild, preStart + middle - inStart + 1, preEnd, middle + 1, inEnd);
 }
}
void createByLastAndIn(char lastArray[], char inArray[], binaryNode *&parent, int lastStart, int lastEnd, int inStart, int inEnd)
{
 if (lastStart <= lastEnd)
 {
  parent = new binaryNode;
  parent->data = lastArray[lastEnd], parent->lchild = parent->rchild = NULL;
  int middle = inStart;
  while (inArray[middle] != lastArray[lastEnd] && middle <= inEnd)
   middle++;
  createByLastAndIn(lastArray, inArray, parent->lchild, lastEnd - inEnd + inStart, lastEnd - inEnd + middle - 1, inStart, middle - 1);
  createByLastAndIn(lastArray, inArray, parent->rchild, lastEnd - inEnd + middle, lastEnd - 1, middle + 1, inEnd);
 }
}
void preOrderVisit(binaryNode *root)
{
 if (root)
 {
  std::cout << root->data;
  preOrderVisit(root->lchild);
  preOrderVisit(root->rchild);
 }
}
void inOrderVisit(binaryNode *root)
{
 if (root)
 {
  inOrderVisit(root->lchild);
  std::cout << root->data;
  inOrderVisit(root->rchild);
 }
}
void lastOrderVisit(binaryNode *root)
{
 if (root)
 {
  lastOrderVisit(root->lchild);
  lastOrderVisit(root->rchild);
  cout << root->data;
 }
}
void rugged(binaryNode *root, int indent)
{
 if (root)
 {
  for (int j = 0; j < indent; j++)
   std::cout << "-";
  indent++;
  std::cout << root->data;
  std::cout << std::endl;
  rugged(root->lchild, indent + 1);
  rugged(root->rchild, indent + 1);
 }
}
void level(binaryNode *root)
{
 int front = -1, rear = 0;
 binaryNode *buff[maxLength],*visit;
 buff[rear] = root;
 while (front != rear)
 {
  front = (front + 1) % maxLength;
  visit = buff[front];
  if (visit->lchild)
  {
   rear = (rear + 1) % maxLength;
   buff[rear] = visit->lchild;
  }
  if (visit->rchild)
  {
   rear = (rear + 1) % maxLength;
   buff[rear] = visit->rchild;
  }
  cout << visit->data;
 }
}
void brackets(binaryNode *root)
{
 if (root)
 {
  std::cout << root->data;
  if (root->lchild || root->rchild)
   std::cout << '(';
  brackets(root->lchild);
  if(root->lchild && root->rchild)
   std::cout << ',';
  brackets(root->rchild);
  if (root->lchild || root->rchild)
   std::cout << ')';
 }
}
void display(binaryNode *root)
{
 cout << "前序遍历: ";
 preOrderVisit(root);
 cout << endl;
 cout << "中序遍历: ";
 inOrderVisit(root);
 cout << endl;
 cout << "后序遍历: ";
 lastOrderVisit(root);
 cout << endl;
 cout << "层次遍历: " << endl;
 level(root);
 cout << endl;
 cout << "凹入表示法: " << endl;
 rugged(root, 0);
 cout << endl;
 cout << "括号表示法: " << endl;
 brackets(root);
 cout << endl;
}

本回答被网友采纳
第2个回答  2015-06-24
写一份 数据结构课程设计报
比较分析本回答被提问者采纳
第3个回答  2015-06-24
how much?
相似回答