资源描述
精品学习资料范文
数据结构实验报告总结
篇一:数据结构实验报告及心得体会
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;i i+=2) /*对所(转自:wWw.bdF 千 叶帆 文摘:数据结构实验报告总结)有奇数项进行一遍比较*/ if (a[i].score[j] a[i+1].score[j]) { temp=a[i]; a[i]=a[i+1]; a[i+1]=temp; flag=1; }
for(i=0;i i+=2)/*对所有偶数项进行一遍比较*/
if (a[i].score[j] a[i+1].score[j])
{ temp=a[i]; a[i]=a[i+1]; a[i+1]=temp; flag=1; }}}
void print_score(struct student a[],int n,int j){ int i,k;
printf(“ 奇偶交换 成绩 %d 排序表 ,j+1); printf( \n
printf( 名 次 学 号 姓 名 分 数\n k=1;
for(i=0;k N i i++)
{ if(i 0 a[i].score[j]!=a[i-1].score[j])k++;
printf( %4d ,k); printf( %4d ,a[i].number); printf( %s ,a[i].name); printf( %6d ,a[i].score[j]); printf( \n }} main()
{ int i,j,k;
for (i=0;i i++) /*输入每个学生信息*/
{ printf( 请输入第 %d 名学生分数: ,i+1);printf( \n printf( 姓 名: scanf( %s ,stu[i].name);
printf( 编 号:
scanf( %4d , stu[i].number); printf( 数据结构:
scanf( %4d , stu[i].score[0]);
printf( 离散数学:
scanf( %4d , stu[i].score[1]);printf( 大学英语:
scanf( %4d , stu[i].score[2]);
}
for(i=0;i i++) /*计算每个学生总分*/{stu[i].score[N]=0; for(j=0;j j++)
stu[i].score[N]+=stu[i].score[j];
}
changesort(stu,M,N); /*对总分进行排序*/
printf( 学生总分成绩排序表\n
printf( 名次 学号 姓 名数据结构 离散数学 大学英语 k=1;
for(i=0;i i++)
{ if(i 0 stu[i].score[N]!=stu[i-1].score[N]) k++;
printf( %4d ,k);
printf( %4d ,stu[i].number);
printf( %s ,stu[i].name);
for(j=0;j j++)
printf( %6d ,stu[i].score[j]);
printf( \n
}
changesort(stu,M,0); /*对数据结构成绩进行排序*/ print_score(stu,M,0); /*输出数据结构前 3 名同学成绩*/changesort(stu,M,1); /*对离散数学成绩进行排序*/
总 分\n
篇二:数据结构综合实验心得体会
心得体会:
做了一个星期的程序设计终于做完了,在这次程序设计课中,真是让我获益匪浅。 对大一学习的C语言和这学期开的数据结构,并没有掌握,很多知识都不太懂,突然让自己独立完成一个程序让我手忙脚乱,起码在我认为那真的特别难,看了老师给的题目以及上网查找了一些相关的知识,简单的编了几行就告一段落了,第一天等于只完成了老师要求写的需求分析和概要设计,后来查找了关于哈希表的相关知识,了解了如何创建哈希表,如何合适的构建哈希函数,(选取合适的表长,合适的余数,使得查找时间以及平均查找长度最短)以及什么是除留余数法,和怎样用除留余数法创建哈希表,看懂了之后,我又看了处理冲突的方法,有三种线性探测再散列法法,二次探测再散列法,伪随机数序列法三种,而我所要做的是第一种线性探测再散列的方法,相较后两种要简单很多,在遇到冲突的时候地址加一,知道冲突解决。
在了解这些概念以后,我就开始着手编程序了,在遇到问题的时候请教我们班擅长的同学,慢慢把不能不会不理解的地方给弄明白了,在经过很多次调试以后,一些基本功能已经可以实现了,为了使平均查找长度越小越好,我不断尝试新的表长以及除数,在没有出现错误的基础上,将功能实现,最后,终于在周四的时候将所有的程序调试完全。
这次的综合性实验使我了解到,平时对知识的积累相当重要,同时也要注重课上老师的讲解,老师在课上的延伸是课本上所没有的,这些知识对于我们对程序的编写有很大的作用,同时,编程也要求我们有足够的耐心,细细推敲。越着急可能就越无法得到我们想要的结果,遇到不会的问题要多多请教,知识是在实践与向别人请教的过程中积累的,所以问是至关重要的,只要肯下功夫很多东西都是可以完成的。
篇三:数据结构课程设计总结
KC021-
CHANGZHOUINSTITUTEOFTECHNOLOGY
课 程 设 计 说 明 书
课程名: 《数据结构课程设计》
题 目: 一元多项式运算系统
二级学院: 计算机信息工程学院专 业: 软件工程
班 级: 10 软 件 一 学 号: 10030431 姓 名: 指导教师: 陈 利 民
2012年1月
一、课程认识
数据结构课程主要是研究非数值计算的程序设计问题中所出现的计算机操作对象以及它们之间的关系和操作的学科。数据结构是介于数学、计算机软件和计算机硬件之间的一门计算机专业的核心课程,它是计算机程序设计、数据库、操作系统、编译原理及人工智能等的重要基础,广泛的应用于信息学、系统工程等各种领域。
学习数据结构是为了将实际问题中所涉及的对象在计算机中表示出来并对它们进行处理。通过课程设计可以提高学生的思维能力,促进学生的综合应用能力和专业素质的提高。通过此次课程设计主要达到以下目的:
? 了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力; ? 初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;
? 提高综合运用所学的理论知识和方法独立分析和解决问题的能力; ? 训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风。
? 训练学生灵活应用所学数据结构知识,独立完成问题分析,结合数据结构理论知识,编写程序求解指定问题。
二、问题描述及分析
1、问题描述
设计一个一元多项式程序,并完成多项式的加法、减法、以及乘法的运算。如A(x)=15+6x+9x7+3x18 B(x)=4x+5x6+16x7 求 A+B A*B
2、问题分析
①.在数学上,一个一元多项式Pn(x)可按升幂写成:Pn(x)=a 0+a1 x+a2 x +?+an x-1 .它由n+1个系数惟一确定,因此,在计算机里,它可用一个线性表P来表示:Pn=(a0,a1,a2,?,an)每一项的指数i隐含在其系数ai的序号里。设m n,则两个多项式相加或者相减的结果 Rn(x)=Pn(x)+(-)Qm(x)。乘
法也是类似,通过使用链式存储结构存放多项式的每一项,从而将一元多项式的运算转化成对链表的运算。
②由于一元多项式的建立、运算等操作经常要插入或者删除元素,所以考虑使用链式存储结构(带头结点的链表)作为数据结构,以减少移动元素的次数,减少空间复杂度和空间复杂度。
③减法运算可以转化为加法运算,因此可以大大地简化程序。 ④乘法运算可以多次调用加法函数实现。
三、数据结构描述
1、数据结构选择
本程序讨论的是利用线性链表的基本操作来实现一元多项式的运算。
2、数据结构与多项式的结合
在数学中,每个单项式都具有系数和指数,当系数为0时,该项就失去了意义,在计算机内要表示一个多项式,至少以下数据信息:系数信息、指数信息和指向下一个单项式的指针。通过指针,我们就可以把多个单项式连接起来,形式一个多项式,需要说明的是从广义的角度讲,单项式也是一个多项式。
3、数据结构的特点及结点表示
线性链表的另一个特点是插入或删除结点是不必移动其他结点,而仅需调整指针的指向关系以适应新的数据关系,从而大大简化了创建、插入和删除的工作。
基于以上的分析,我们定义多项式的数据结构为如下结构体形式:
struct node {
float coef; int expn;struct node *next;
};
//系数 //指数
//指针指向下一个结点
四、主要算法流程描述(个人负责部分)
如图4-1为主函数流程图
图5-1为加法算法的流程图
展开阅读全文