一 : 数据结构实验报告一
班级 学号 姓名 实验组别
实验日期 2010/12/20 室温 报告日期 2010/12/20 成绩 报告内容:(目的和要求,原理,步骤,数据,计算,小结等)
实验名称: 实验一 线性表的表示及实现
一、实验目的:
1. 掌握线性表的概念。(www.61k.com)
2. 掌握线性表的顺序及链式存储结构定义。
3. 熟练运用C语言实现顺序表的基本操作及单链表的基本操作。
4. 在掌握顺序表基本操作的基础上,能够用顺序表解决简单问题。
二、实验内容:
5. 定义一个顺序表,并输入10个整数,作为顺序表中的元素。然后编写一个函数PrintList输出表中的所有元素。
6. 用算法2-2统计顺序表中的元素数。
7. 输入一个位置值和一个元素值,用算法2-4将新元素插入指定的位置,然后输出顺序表中的所有元素,检查插入是否正确。
8. 输入一个位置值,用算法2-5将该位置的元素删除,然后用PrintList输出表中的所有元素。
三、实验学时:2学时
四、实验涉及知识点:
1. 线性表可用顺序、链式存储结构表示,线性表的抽象数据类型表示了线性表中的数据元素,元素间的逻辑关系及对线性表的操作集合;
2. 顺序表的特点是用数据元素在计算机内物理位置相邻来表示线性表中数据元素之间的逻辑关系;
3. 对顺序表的基本操作包括初始化、求元素个数、判断表是否为空、插入元素、删除元素、查找元素位置和遍历等;
4. 链式存储结构不要求逻辑上相邻的数据元素在物理位置上也相邻,链表又包括带头结点和不带头结点的链表;
5. 对单链表的基本操作包括判断表是否为空、初始化、求元素个数、插入元素、删除元素、销毁单链表等。
五、程序流程分析:
第 页
数据结构实验报告 数据结构实验报告一
本实验为线性表的基本操作,用到的思想比较简单,流程主要为顺序结构,顺序表和单链表的操作流程图都大致如下:
图1.顺序表操作流程图
根据题目要求,对链表的操作比顺序表仅仅只多了一项“清除所有结点”,这就要每删除一个节点都输出该结点值。[www.61k.com]
所以对链表的操作流程图知识在图1所示的顺序表操作流程图的基础上增添以下流程
第 页
数据结构实验报告 数据结构实验报告一
图2.与顺序表操作相比,链表操作附加的流程图
六、实验源程序:
对顺序表和单链表的基本操作可以直接应用书中所给算法,包括初始化、求表长、删除元素、输出表中所有元素;单链表还包括销毁表,这些基本操作及数据类型可以先编写入一个头文件中,如下所示: 对顺序表操作的头文件“shunxubiao.h”为:
#include <stdio.h>
#define listsize 100
typedef int datatype;
typedef struct
{
datatype items[listsize];
int length;
}sqlist;
第 页
数据结构实验报告 数据结构实验报告一
int initlist(sqlist *l)
{
l->length=0;
return 1;
}
int listlength(sqlist l)
{
return l.length;
}
int listinsert(sqlist *l,int pos,datatype item) {
int i;
if(l->length>=listsize)
{
printf("表已满,无法插入!"); return 0;
}
if(pos<=0||pos>l->length+1)
{
printf("插入位置不合法!");
return 0;
}
for(i=l->length-1;i>=pos-1;i--)
l->items[i+1]=l->items[i];
l->items[pos-1]=item;
l->length++;
return 1;
}
int listdelete(sqlist *l,int pos,datatype *item) {
int i;
if(pos<1||pos>l->length)
{
printf("删除位置不合法!");
return 0;
第 页
数据结构实验报告 数据结构实验报告一
}
*item=l->items[pos-1];
for(i=pos;i<l->length;i++)
l->items[i-1]=l->items[i];
l->length--;
return 1;
}
int printlist(sqlist l)
{
int i;
for(i=0;i<l.length;i++)
printf("%d ",l.items[i]);
printf("n");
return 1;
}
然后再在对顺序表进行操作的主程序中先包含头文件“shunxubiao.h”该主程序为:
#include <stdio.h>
#include "shunxubiao.h"
#define N 10
int main()
{
int i,item_in,pos_in,item_del,pos_del; //item_in,pos_in用于输入插入的元素和位置, item_del用于返回删除元素,pos_del用于输入删除的元素
int a[N];
sqlist sxlist;
initlist(&sxlist); //初始化线性表 printf("请输入%d个数字:n",N); //用户键入数据 for(i=0;i<N;i++)
scanf("%d",&a[i]);
for(i=0;i<N;i++) //将数据插入线性表 {
if(!listinsert(&sxlist,i+1,a[i]))
第 页
数据结构实验报告 数据结构实验报告一
} { printf("n运行错误!n"); return 0; } } printf("该线性表如下:n"); printlist(sxlist); //将数据输出 printf("n"); printf("该顺序表中的元素数为: n%d个n",listlength(sxlist));//统计顺序表中D的元素数 printf("n请输入要插入的元素和位置:n"); scanf("%d%d",&item_in,&pos_in); if(!listinsert(&sxlist,pos_in,item_in)) { printf("n插入操作错误!n"); return 0; } printf("n插入元素后的线性表如下:n"); printlist(sxlist); printf("n请输入要删除的元素的位置:n"); scanf("%d",&pos_del); if(!listdelete(&sxlist,pos_del,&item_del)) { printf("n删除操作时运行错误!n"); return 0; } printf("n删除的元素为:n%dn",item_del); printf("n删除操作后的线性表如下:n"); printlist(sxlist);
61阅读提醒您本文地址:
单链表除了所包含的头文件中和主程序中变量名与顺序表的程序中的变量名不同外,其他都大致相同,只不过单链表所包含的头文件中多了一个基本操作:即销毁单链表的同时输出所删除的元素。[www.61k.com)程序如下: void destroylist(linklist h)
{
第 页
数据结构实验报告 数据结构实验报告一
} int i=1; pnode p=h; h=h->next; free(p); while(h) { printf("第%d次删除的元素为:%dn",i++,h->data); p=h; h=h->next; free(p); }
这样在主程序的最后多加一句destroylist(h)调用语句,就可以完成对单链表的销毁操作。[www.61k.com)
单链表主程序所包含的头文件“xianxinglianbiao.h”如下: #include<malloc.h>
typedef int datatype;
typedef struct node
{
datatype data;
struct node *next;
}lnode,*pnode,*linklist;
int initlist(linklist *h)
{
*h=(linklist)malloc(sizeof(lnode)); if(!h)
{
printf("初始化链表错误!n");
return 0;
}
(*h)->next=NULL;
return 1;
}
int listlength(linklist h)
{
int total=0;
第 页
数据结构实验报告 数据结构实验报告一
pnode p=h->next;
while(p)
{
total++;
p=p->next;
}
return total;
}
int listinsert(linklist h,int pos_in,datatype item_in) {
pnode p=h,q;
int i=0;
while(p&&i<pos_in-1)
{
p=p->next;
i++;
}
if(!p||i>pos_in-1)
{
printf("插入位置不合法!n");
return 0;
}
q=(pnode)malloc(sizeof(lnode));
if(!q)
{
printf("不能生成新结点n");
return 0;
}
q->data=item_in;
q->next=p->next;
p->next=q;
return 1;
}
int listdelete(linklist h,int pos_del,datatype *item_del) {
pnode p=h,q;
第 页
数据结构实验报告 数据结构实验报告一
int i=0;
while(p->next&&i<pos_del-1)
{
p=p->next;
i++;
}
if(!p->next||i>pos_del-1)
{
printf("删除位置不合法!n");
return 0;
}
q=p->next;
p->next=q->next;
*item_del=q->data;
free(q);
return 1;
}
void destroylist(linklist h)
{
int i=1;
pnode p=h;
h=h->next;
free(p);
while(h)
{
printf("第%d次删除的元素为:%dn",i++,h->data); p=h;
h=h->next;
free(p);
}
}
void printlist(linklist h)
{
pnode p=h->next;
while(p)
{
第 页
数据结构实验报告 数据结构实验报告一
} printf("%d ",p->data); p=p->next; } printf("n");
单链表的主程序如下:
#include<stdio.h>
#include"xianxinglianbiao.h"
#define N 6
int main()
{
int i,item_in,pos_in,item_del,pos_del;
//item_in,pos_in用于输入插入的元素和位置,item_del用于返回删除的元素,pos_del用于输入删除的位置
int a[N];
linklist h=NULL;
initlist(&h);
printf("请输入%d个数字:n",N); //用户键入数据 for(i=0;i<N;i++)
scanf("%d",&a[i]);
for(i=0;i<N;i++)
{
if(!listinsert(h,i+1,a[i]))
{
printf("插入操作错误n");
return 0;
}
}
printf("此链表的所有元素如下:n"); printlist(h);
printf("n请输入要删除的元素的位置:n"); scanf("%d",&pos_del);
if(!listdelete(h,pos_del,&item_del)) {
第 页
数据结构实验报告 数据结构实验报告一
printf("n删除操作时运行错误!n"); return 0;
}
printf("n删除的元素为:n%dn",item_del); printf("n删除操作后的链表如下:n"); printlist(h);
printf("n请输入要插入的元素和位置:n"); scanf("%d%d",&item_in,&pos_in);
if(!listinsert(h,pos_in,item_in))
{
printf("n插入操作错误!n");
return 0;
}
printf("n插入元素后的线性表如下:n"); printlist(h);
printf("n");
destroylist(h);
}
七、实验步骤
顺序表程序的实验步骤:
1. 进行Visual Studio开发环境;
2. 创建项目:
文件—新建—项目—WIN32项目—输入项目名称test1;
3. 创建头文件和源文件,将预先编制好的程序输入;
4. 保存文件;
5. 选择调试—开始调试。[www.61k.com)
对于单链表程序实验步骤,与上述步骤相同,只是项目名称为test2,头文件和源文件的名称和上述顺序表的不同,输入的程序不同而已。 具体的调试过程,顺序表和单链表也是一样的,只需要根据程序调用时提示的语句操作,就可以完成对程序的测试,即先随意输入指定个数的数据,等待程序提示输入要插入的元素值和位置时再次输入,再次等到程序提示输入要删除元素的位置时,再次输入,最后就可以查看整个过程的运行结果,结果如下:
顺序表的程序的运行结果为:
第 页
数据结构实验报告 数据结构实验报告一
图1.顺序表的程序运行结果
61阅读提醒您本文地址:
单链表的程序运行结果如下:
第 页
数据结构实验报告 数据结构实验报告一
图2.单链表的程序运行结果
八、实验小结
本题实验是第一次数据结构实验,让我感觉到了数据结构所讲内容的特点,以及应用数据结构相关方法进行编程的优势,以前学完C语言以后进行编程,虽然也能完成功能,但是每一次编程都要做很多重复性的工作,即使每次编程所用的数据的结构相同,而这次实验用了一些书上的基本算法,这些算法的特点就是通用性很强,它们包括了对常用的数据类型的基本操作,需要用到这些操作的时候只需要对这些函数进行调用即可,大大减小了编程的工作量,可以将这些基本操作或函数编写如头文件中,以后再对这一类数据用到类似的操作时,一样可以直接调用,会节省很大的时间和精力,可以大大提高编程的效率。(www.61k.com]
第 页
61阅读提醒您本文地址:
二 : 数据结构实验心得体会
数据结构实验报告及心得体会
2011~2012 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) 实验体会(文字说明本实验成功或不足之处) 。 2 三、实验源程序(算法) 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]; }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<n-1;i+=2) /*对所有奇数项进行一遍比较*/ /*score[N]为总分,score[0]-score[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; } for(i=0;i<n-1;i+=2) /*对所有偶数项进行一遍比较*/ if (a[i].score[j]>a[i+1].score[j]) 3 { 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(" 名 次 学 号 姓 k=1; for(i=0;k<N&&i<n;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); 名 分 数n"); printf(" %6d",a[i].score[j]); printf("n"); } } main() { int i,j,k; for (i=0;i<M;i++) /*输入每个学生信息*/ { printf("请输入第 %d 名学生分数: ",i+1);printf("n"); printf("姓 名: "); scanf("%s",stu[i].name); printf("编 号: "); 4 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<M;i++) /*计算每个学生总分*/ { stu[i].score[N]=0; for(j=0;j<N;j++) stu[i].score[N]+=stu[i].score[j]; } changesort(stu,M,N); printf(" printf(" 名次 学号 姓 名 k=1; for(i=0;i<M;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<N+1;j++) printf(" %6d",stu[i].score[j]); /*对总分进行排序*/ 学生总分成绩排序表n"); 数据结构 离散数学 大学英语 总 分n"); printf("n"); } changesort(stu,M,0); /*对数据结构成绩进行排序*/ print_score(stu,M,0); /*输出数据结构前 3 名同学成绩*/ changesort(stu,M,1); /*对离散数学成绩进行排序*/ 5 print_score(stu,M,1); /*输出离散数学前 3 名同学成绩*/ changesort(stu,M,2); /*对大学英语成绩进行排序*/ print_score(stu,M,2); /*输出大学英语前 3 名同学成绩*/ } 源代码结果: 源代码结果: 请输入第 1 名学生分数: 姓 名: 史孟晨 编 号: 01 数据结构: 87 离散数学: 90 大学英语: 78 请输入第 2 名学生分数: 姓 名: 袁欣 编 号: 02 数据结构: 78 离散数学: 80 大学英语: 92 请输入第 3 名学生分数: 姓 名: 赵宇 编 号: 03 数据结构: 88 离散数学: 76 大学英语: 95 请输入第 4 名学生分数: 姓 名: 滕芷 编 号: 04 数据结构: 79 离散数学: 84 大学英语: 88 请输入第 5 名学生分数: 姓 名: 张一析 编 号: 05 数[www.61k.com)据结构: 78 离散数学: 68 大学英语: 91 请输入第 6 名学生分数: 姓 名: 白晓彤 编 号: 06 数据结构: 88 离散数学: 76 大学英语: 90 6 学生总分成绩排序表 名次 学号 姓 名 数据结构 离散数学 大学英语 1 5 张一析 78 68 91 2 2 袁欣 78 80 92 3 4 滕芷 79 84 88 4 6 白晓彤 88 76 90 5 1 史孟晨 87 90 78 6 3 赵宇 88 76 95 奇偶交换 成绩 1 排序表 名 次 学 号 姓 名 分 数 1 5 张一析 78 1 2 袁欣 78 2 4 滕芷 79 3 1 史孟晨 87 奇偶交换 成绩 2 排序表 名 次 学 号 姓 名 分 数 1 5 张一析 68 2 6 白晓彤 76 2 3 赵宇 76 3 2 袁欣 80 奇偶交换 成绩 3 排序表 名 次 学 号 姓 名 分 数 1 1 史孟晨 78 2 4 滕芷 88 3 6 白晓彤 90 Press any key to continue 总 分 237 250 251 254 255 259 7 Change.c #include "stdio.h" #include "string.h" #define M 6 #define N 3 void changesort(struct student a[],int n,int j); void print_score(struct student a[],int n,int j); struct student { char name[10]; int number; int score[N+1]; 分,score[0]-score[2]为学科成绩*/ }stu[M]; /*score[N] 为 总 main() { int i,j,k; for (i=0;i<M;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]); 8 } for(i=0;i<M;i++) /*计算每个学生总分*/ { stu[i].score[N]=0; for(j=0;j<N;j++) stu[i].score[N]+=stu[i].score[j]; } changesort(stu,M,N); /*对总分进行排序*/ printf(" 学生总分成绩排序表n"); printf(" 名次 学号 姓 名 数据结构 离散数学 大学英语 总 分n"); k=0; for(i=0;i<M+1;i++) { if(i>0&&stu[i].score[N]!=stu[i-1].score[N]) { k++; printf("%4d",k); printf(" %4d",stu[i-1].number); printf(" %s",stu[i-1].name); for(j=0;j<N+1;j++) { printf(" %6d",stu[i-1].score[j]); } } printf("n"); } changesort(stu,M,0); /*对数据结构成绩进行排序*/ print_score(stu,M,0); /*输出数据结构前 3 名同学成绩*/ changesort(stu,M,1); /*对离散数学成绩进行排序*/ print_score(stu,M,1); /*输出离散数学前 3 名同学成绩*/ changesort(stu,M,2); /*对大学英语成绩进行排序*/ print_score(stu,M,2); /*输出大学英语前 3 名同学成绩*/ } void changesort(struct student a[],int n,int j) { int flag=1,i; struct student temp; while(flag) { 9 flag=0; for(i=1;i<n-1;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; } for(i=0;i<n-1;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<n;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"); } } 升序改降序: 请输入第 1 名学生分数: 姓 名: 史孟晨 10 编 号: 01 数据结构: 87 离散数学: 90 大学英语: 78 请输入第 2 名学生分数: 姓 名: 袁欣 编 号: 02 数据结构: 78 离散数学: 80 大学英语: 92 请输入第 3 名学生分数: 姓 名: 赵宇 编 号: 03 数据结构: 88 离散数学: 76 大学英语: 95 请输入第 4 名学生分数: 姓 名: 滕芷 编 号: 04 数据结构: 79 离散数学: 84 大学英语: 88 请输入第 5 名学生分数: 姓 名: 张一析 编 号: 05 数据结构: 78 离散数学: 68 大学英语: 91 请输入第 6 名学生分数: 姓 名: 白晓彤 编 号: 06 数据结构: 88 离散数学: 76 大学英语: 90 名次 学号 姓 名 学生总分成绩排序表 数据结构 离散数学 大学英语 76 90 76 84 80 68 88 92 91 95 78 90 总 分 259 255 254 251 250 237 1 3 赵宇 88 2 1 史孟晨 87 3 6 白晓彤 88 4 4 滕芷 79 5 2 袁欣 78 6 5 张一析 78 奇偶交换 成绩 1 排序表 11 名 次 学 号 姓 名 分 数 1 3 赵宇 88 1 6 白晓彤 88 2 1 史孟晨 87 3 4 滕芷 79 奇偶交换 成绩 2 排序表 名 次 学 号 姓 名 分 数 1 1 史孟晨 90 2 4 滕芷 84 3 2 袁欣 80 奇偶交换 成绩 3 排序表 名 次 学 号 姓 名 分 数 1 3 赵宇 95 2 2 袁欣 92 3 5 张一析 91 Press any key to continue 12 Seletsort.c #include "stdio.h" #include "string.h" #define M 6 #define N 3 void changesort(struct student a[],int n,int j); void print_score(struct student a[],int n,int j); struct student { char name[10]; int number; int score[N+1]; 分,score[0]-score[2]为学科成绩*/ }stu[M]; /*score[N] 为 总 main() { int i,j,k; for (i=0;i<M;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]); 13 } for(i=0;i<M;i++) /*计算每个学生总分*/ { stu[i].score[N]=0; for(j=0;j<N;j++) stu[i].score[N]+=stu[i].score[j]; } changesort(stu,M,N); /*对总分进行排序*/ printf(" 学生总分成绩排序表n"); printf(" 名次 学号 姓 名 数据结构 离散数学 大学英语 总 分n"); k=0; for(i=0;i<M+1;i++) { if(i>0&&stu[i].score[N]!=stu[i-1].score[N]) { k++; printf("%4d",k); printf(" %4d",stu[i-1].number); printf(" %s",stu[i-1].name); for(j=0;j<N+1;j++) { printf(" %6d",stu[i-1].score[j]); } } printf("n"); } changesort(stu,M,0); /*对数据结构成绩进行排序*/ print_score(stu,M,0); /*输出数据结构前 3 名同学成绩*/ changesort(stu,M,1); /*对离散数学成绩进行排序*/ print_score(stu,M,1); /*输出离散数学前 3 名同学成绩*/ changesort(stu,M,2); /*对大学英语成绩进行排序*/ print_score(stu,M,2); /*输出大学英语前 3 名同学成绩*/ } void changesort(struct student a[],int n,int j) { int flag=1,i,m,k; struct student temp; while(flag) { 14 flag=0; for(i=0;i<n-1;i++) { k=i; for(m=i+1;m<n;m++) if (a[m].score[j]>a[k].score[j]) { k=m; temp=a[i]; a[i]=a[k]; a[k]=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<n;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"); } } 简单选择: 请输入第 1 名学生分数: 姓 名: 史孟晨 15 编 号: 01 数据结构: 87 离散数学: 90 大学英语: 78 请输入第 2 名学生分数: 姓 名: 袁欣 编 号: 02 数据结构: 78 离散数学: 80 大学英语: 92 请输入第 3 名学生分数: 姓 名: 赵宇 编 号: 03 数据结构: 88 离散数学: 76 大学英语: 95 请输入第 4 名学生分数: 姓 名: 滕芷 编 号: 04 数据结构: 79 离散数学: 84 大学英语: 88 请输入第 5 名学生分数: 姓 名: 张一析 编 号: 05 数据结构: 78 离散数学: 68 大学英语: 91 请输入第 6 名学生分数: 姓 名: 白晓彤 编 号: 06 数据结构: 88 离散数学: 76 大学英语: 90 名次 学号 姓 名 学生总分成绩排序表 数据结构 离散数学 大学英语 76 90 76 84 80 68 88 92 91 95 78 90 总 分 259 255 254 251 250 237 1 3 赵宇 88 2 1 史孟晨 87 3 6 白晓彤 88 4 4 滕芷 79 5 2 袁欣 78 6 5 张一析 78 选择交换 成绩 1 排序表 16 名 次 学 号 姓 名 分 数 1 3 赵宇 88 1 6 白晓彤 88 2 1 史孟晨 87 3 4 滕芷 79 选择交换 成绩 2 排序表 名 次 学 号 姓 名 分 数 1 1 史孟晨 90 2 4 滕芷 84 3 2 袁欣 80 选择交换 成绩 3 排序表 名 次 学 号 姓 名 分 数 1 3 赵宇 95 2 2 袁欣 92 3 5 张一析 91 Press any key to continue 17 Bubblesort.c #include "stdio.h" #include "string.h" #define M 6 #define N 3 void changesort(struct student a[],int n,int j); void print_score(struct student a[],int n,int j); struct student { char name[10]; int number; int score[N+1]; 分,score[0]-score[2]为学科成绩*/ }stu[M]; /*score[N] 为 总 main() { int i,j,k; for (i=0;i<M;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]); 18 } for(i=0;i<M;i++) /*计算每个学生总分*/ { stu[i].score[N]=0; for(j=0;j<N;j++) stu[i].score[N]+=stu[i].score[j]; } changesort(stu,M,N); /*对总分进行排序*/ printf(" 学生总分成绩排序表n"); printf(" 名次 学号 姓 名 数据结构 离散数学 大学英语 总 分n"); k=0; for(i=0;i<M+1;i++) { if(i>0&&stu[i].score[N]!=stu[i-1].score[N]) { k++; printf("%4d",k); printf(" %4d",stu[i-1].number); printf(" %s",stu[i-1].name); for(j=0;j<N+1;j++) { printf(" %6d",stu[i-1].score[j]); } } printf("n"); } changesort(stu,M,0); /*对数据结构成绩进行排序*/ print_score(stu,M,0); /*输出数据结构前 3 名同学成绩*/ changesort(stu,M,1); /*对离散数学成绩进行排序*/ print_score(stu,M,1); /*输出离散数学前 3 名同学成绩*/ changesort(stu,M,2); /*对大学英语成绩进行排序*/ print_score(stu,M,2); /*输出大学英语前 3 名同学成绩*/ } void changesort(struct student a[],int n,int j) { { int flag=1,i; struct student temp; while(flag) 19 { flag=0; for(i=0;i<n;i++) /*冒泡排序法*/ 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<n;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"); } } 运行结果: 运行结果: 请输入第 1 名学生分数: 姓 名: 史孟晨 编 号: 01 数据结构: 87 离散数学: 90 大学英语: 78 请输入第 2 名学生分数: 姓 名: 袁欣 20 编 号: 02 数据结构: 78 离散数学: 80 大学英语: 92 请输入第 3 名学生分数: 姓 名: 赵宇 编 号: 03 数据结构: 88 离散数学: 76 大学英语: 95 请输入第 4 名学生分数: 姓 名: 滕芷 编 号: 04 数据结构: 79 离散数学: 84 大学英语: 88 请输入第 5 名学生分数: 姓 名: 张一析 编 号: 05 数据结构: 78 离散数学: 68 大学英语: 91 请输入第 6 名学生分数: 姓 名: 白晓彤 编 号: 06 数据结构: 88 离散数学: 76 大学英语: 90 名次 学号 姓 名 学生总分成绩排序表 数据结构 离散数学 大学英语 76 90 76 84 80 68 88 92 91 95 78 90 总 分 259 255 254 251 250 237 1 3 赵宇 88 2 1 史孟晨 87 3 6 白晓彤 88 4 4 滕芷 79 5 2 袁欣 78 6 5 张一析 78 冒泡交换 成绩 1 排序表 名 次 学 号 姓 名 分 数 1 3 赵宇 88 1 6 白晓彤 88 2 1 史孟晨 87 3 4 滕芷 79 冒泡交换 成绩 2 排序表 21 名 次 学 号 姓 名 分 数 1 1 史孟晨 90 2 4 滕芷 84 3 2 袁欣 80 冒泡交换 成绩 3 排序表 名 次 学 号 姓 名 分 数 1 3 赵宇 95 2 2 袁欣 92 3 5 张一析 91 Press any key to continue 22 Jusertsort.c #include "stdio.h" #include "string.h" #define M 6 #define N 3 void changesort(struct student a[],int n,int j); void print_score(struct student a[],int n,int j); struct student { char name[10]; int number; int score[N+1]; 分,score[0]-score[2]为学科成绩*/ }stu[M]; /*score[N] 为 总 main() { int i,j,k; for (i=0;i<M;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("大学英语: "); 23 scanf("%4d",&stu[i].score[2]); } for(i=0;i<M;i++) /*计算每个学生总分*/ { stu[i].score[N]=0; for(j=0;j<N;j++) stu[i].score[N]+=stu[i].score[j]; } changesort(stu,M,N); /*对总分进行排序*/ printf(" 学生总分成绩排序表n"); printf(" 名次 学号 姓 名 数据结构 离散数学 大学英语 总 分n"); k=0; for(i=0;i<M+1;i++) { if(i>0&&stu[i].score[N]!=stu[i-1].score[N]) { k++; printf("%4d",k); printf(" %4d",stu[i-1].number); printf(" %s",stu[i-1].name); for(j=0;j<N+1;j++) { printf(" %6d",stu[i-1].score[j]); } } printf("n"); } changesort(stu,M,0); /*对数据结构成绩进行排序*/ print_score(stu,M,0); /*输出数据结构前 3 名同学成绩*/ changesort(stu,M,1); /*对离散数学成绩进行排序*/ print_score(stu,M,1); /*输出离散数学前 3 名同学成绩*/ changesort(stu,M,2); /*对大学英语成绩进行排序*/ print_score(stu,M,2); /*输出大学英语前 3 名同学成绩*/ } void changesort(struct student a[],int n,int j) { int i, m; struct student temp; 24 /*插入排序法*/ for(i=1; i<n; i++) { temp = a[i]; for(m=i; m>0 && temp.score[j] > a[m-1].score[j]; m--) { a[m] = a[m-1]; } a[m] = temp; } } 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<n;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"); } } 请输入第 1 名学生分数: 姓 名: 史孟晨 编 号: 01 数据结构: 87 离散数学: 90 大学英语: 78 请输入第 2 名学生分数: 姓 名: 袁欣 25 编 号: 02 数据结构: 78 离散数学: 80 大学英语: 92 请输入第 3 名学生分数: 姓 名: 赵宇 编 号: 03 数据结构: 88 离散数学: 76 大学英语: 95 请输入第 4 名学生分数: 姓 名: 滕芷 编 号: 04 数据结构: 79 离散数学: 84 大学英语: 88 请输入第 5 名学生分数: 姓 名: 张一析 编 号: 05 数据结构: 78 离散数学: 68 大学英语: 91 请输入第 6 名学生分数: 姓 名: 白晓彤 编 号: 06 数据结构: 88 离散数学: 76 大学英语: 90 名次 学号 姓 名 学生总分成绩排序表 数据结构 离散数学 大学英语 76 90 76 84 80 68 88 92 91 95 78 90 总 分 259 255 254 251 250 237 1 3 赵宇 88 2 1 史孟晨 87 3 6 白晓彤 88 4 4 滕芷 79 5 2 袁欣 78 6 5 张一析 78 插入交换 成绩 1 排序表 名 次 学 号 姓 名 分 数 1 3 赵宇 88 1 6 白晓彤 88 2 1 史孟晨 87 3 4 滕芷 79 插入交换 成绩 2 排序表 26 名 次 学 号 姓 名 分 数 1 1 史孟晨 90 2 4 滕芷 84 3 2 袁欣 80 插入交换 成绩 3 排序表 名 次 学 号 姓 名 分 数 1 3 赵宇 95 2 2 袁欣 92 3 5 张一析 91 Press any key to continue 27 心得体会本学期开设的《数据结构基础》课程已经告一段落,现就学习体会进行学 习总结. 这是一门纯属于设计的科目,它需用把理论变为上机调试。刚开始学转载请著名来自:(htTP://wWW.yXTvg.cOm 读后感)的时 候确实有很多地方我很不理解,每次上课时老师都会给我们出不同的设计题目, 对于我们一个初学者来说,无疑是一个具大的挑战,撞了几次壁之后,我决定静 下心来,仔细去写程序。老师会给我们需要编程的内容一些讲解,顺着老师的思 路,来完成自己的设计,我们可以开始运行自己的程序。 这门课结束之后,我总结了学习中遇到的一些问题,最为突出的,书本上 的知识与老师的讲解都比较容易理解, 但是当自己采用刚学的知识点编写程序时 却感到十分棘手, 有时表现在想不到适合题意的算法, 有时表现在算法想出来后, 只能将书本上原有的程序段誊写到自己的程序中再加以必要的连接以完成程序 的编写。 刚开始学的时候确实有很多地方我很不理解,每次上上机课时老师都会给 我们出不同的设计题目,对于我们一个初学者来说,无疑是一个具大的挑战,撞 了几次壁之后,我决定静下心来,仔细去写程序。老师会给我们需要编程的内容 一些讲解, 顺着老师的思路, 来完成自己的设计, 我们可以开始运行自己的程序, 可是好多处的错误让人看的可怕,还看不出到底是哪里出现了错误,但是程序还 是得继续下去,我多次请教了老师和同学,逐渐能自己找出错误,并加以改正。 TC 里检查错误都是用英文来显示出来的,经过了这次课程设计,现在已经可以 了解很多错误在英文里的提示,这对我来说是一个突破性的进步,眼看着一个个 错误通过自己的努力在我眼前消失,觉得很是开心。此次的程序设计能够成功, 是我和我的同学三个人共同努力作用的结果。在这一段努力学习的过程中,我们 的编程设计有了明显的提高。 其实现在想起来,收获还真是不少,虽然说以前非常不懂这门语言,在它 上面花费了好多心血,觉得它很难,是需用花费了大量的时间编写出来的。现在 真正的明白了一些代码的应用,每个程序都有一些共同点,通用的结构,相似的 格式。只要努力去学习,就会灵活的去应用它。 以上便是我对《数据结构基础》这门课的学习总结,我会抓紧时间将没有 吃透的知识点补齐,克服学习中遇到的难关,在打牢基础的前提下向更深入的层 面迈进!
三 : 数据库上机实验报告
数据库上机实验报告61阅读| 精彩专题| 最新文章| 热门文章| 苏ICP备13036349号-1