数据结构实验报告一Word文件下载.docx
- 文档编号:17939905
- 上传时间:2022-12-12
- 格式:DOCX
- 页数:10
- 大小:72.12KB
数据结构实验报告一Word文件下载.docx
《数据结构实验报告一Word文件下载.docx》由会员分享,可在线阅读,更多相关《数据结构实验报告一Word文件下载.docx(10页珍藏版)》请在冰豆网上搜索。
//数据结构实验1.1线性表的链式存储结构
//调试环境:
VisualC++6.0
//-----库文件的预设和定义
#include<
stdio.h>
stdlib.h>
malloc.h>
iostream.h>
conio.h>
#defineNULL0
#definePWRS5//定义评委人数
structpw//定义评委信息
{charname[6];
floatscore;
intage;
};
typedefstructpwPW;
structnode//定义链表结点
{structpwdata;
structnode*next;
typedefstructnodeNODE;
//自定义函数的声明
NODE*create(intm);
//创建单链表
intcalc(NODE*h);
//计算、数据处理
voidprint(NODE*h);
//输出所有评委打分数据
voidinput(NODE*s);
//输入评委打分数据
voidoutput(NODE*s);
//输出评委打分数据
voidmain()
{
NODE*head;
floatave=0;
floatsum=0;
head=create(PWRS);
printf("
所有评委打分信息如下:
\n"
);
print(head);
//显示当前评委打分
calc(head);
//计算成绩
该选手去掉1最高分和1最低分后的有效评委成绩:
//显示去掉极限分后的评委打分
}
voidinput(NODE*s)
请输入评委的姓名:
"
scanf("
%S"
&
s->
data.name);
年龄:
%d"
data.age);
打分:
%f"
data.score);
}
voidoutput(NODE*s)
{printf("
评委姓名:
%8s,年龄:
%d,打分:
%2.2f\n"
s->
data.name,s->
data.age,s->
NODE*create(intm)
{NODE*head,*p,*q;
inti;
p=(NODE*)malloc(sizeof(NODE));
head=p;
q=p;
p->
next=NULL;
for(i=1;
i<
=m;
i++){
p=(NODE*)malloc(sizeof(NODE));
input(p);
p->
q->
next=p;
q=p;
}
return(head);
voidprint(NODE*h)
{for(inti=1;
((i<
=PWRS)&
&
(h->
next!
=NULL));
i++){h=h->
next;
output(h);
}printf("
intcalc(NODE*h)
NODE*q,*p,*pmin,*pmax;
p=h->
//指向首元结点
pmin=pmax=p;
//设置初始值
sum+=p->
data.score;
p=p->
for(;
p!
=NULL;
p=p->
next)
{
if(p->
data.score>
pmax->
data.score)pmax=p;
data.score<
pmin->
data.score)pmin=p;
cout<
<
"
给出最高分的评委姓名:
data.name<
年龄:
data.age<
分值:
endl;
给出最低分的评委姓名:
sum-=pmin->
sum-=pmax->
for(q=h,p=h->
q=p,p=p->
if(p==pmin){q->
next=p->
p=q;
}//删除最低分结点
if(p==pmax){q->
}//删除最高分结点
ave=sum/(PWRS-2);
该选手的最后得分是:
ave<
return1;
●程序运行结果如下:
2.线性表的顺序存储结构
用顺序表A记录学生的信息,编写程序:
(1)将A表分解成两个顺序表B和C,使C表中含原A表中性别为男性的学生,B表中含原表中性别为女性的学生,要求学生的次序与原A表中相同。
(2)分别求男生和女生的平均年龄
//数据结构实验1.2线性表的顺序存储结构
string.h>
//包含库函数strcpy的头文件
structstudent//定义学生信息
{charname[8];
intsex;
//0女:
1:
男
typedefstructstudentSTD;
intcreate(STD*m);
//创建顺序表
intcalc(STD*m,STD*n,STD*r,float&
Fage,float&
Mage);
voidprint(STD*m);
constintMAX=100;
//定义人数
STDA[MAX];
STDB[MAX];
STDC[MAX];
floatage1=0,age2=0;
//age1男age2女
create(A);
学生总表A记录如下:
\n"
print(A);
calc(A,B,C,age1,age2);
女生名册B记录如下:
print(B);
男生名册C记录如下:
print(C);
intcreate(STD*m)
intn;
printf("
请输入班级总人数:
\n"
scanf("
n);
m[0].age=n;
//置顺序表长度
请输入学生信息:
for(inti=1;
=n;
i++)
printf("
姓名:
scanf("
%s"
m[i].name);
性别0女1男:
m[i].sex);
m[i].age);
return1;
Mage)
{inti,j=1,k=1;
n[0].age=r[0].age=0;
for(i=1;
=m[0].age;
i++)
{if(m[i].sex==0)
strcpy(n[j].name,m[i].name);
n[j].sex=m[i].sex;
n[j].age=m[i].age;
n[0].age++;
Mage+=m[i].age;
j++;
else
strcpy(r[k].name,m[i].name);
r[k].sex=m[i].sex;
r[k].age=m[i].age;
r[0].age++;
Fage+=m[i].age;
k++;
Mage=Mage/n[0].age;
Fage=Fage/r[0].age;
女生的平均年龄是:
Mage<
男生的平均年龄是:
Fage<
voidprint(STD*m)
printf("
%3s,性别(0女1男):
%d,年龄:
%d\n"
m[i].name,m[i].sex,m[i].age);
3.实验结论
线性表采用顺序存储(顺序表)时:
逻辑结构与存储结构一致,可用数组或指针实现,能随机访问,但插入删除操作平均而言移动元素次数较多,效率很低.插入位置i,移动元素次数为n-i+1.删除位置是i,移动次数n-i。
线性表采用链式存储(链表)时:
以结构变量存储结点,动态生成结点,以指针链接结点,能有效利用存储空间,插入删除方便,但不能随机访问.单向链表可从某结点访问到后继结点。
单向链表操作的关键步骤:
●建立链表的头插法:
指针变量p开辟单元,生成结点,指针变量q始终指向头结点,操作为:
p->
next=q->
q->
●尾插法:
指针变量q始终指向尾结点,p指针开辟单元,生成结点:
q->
q=p;
●插入:
p所指向结点的后面插入新结点s所指结点
s->
p->
next=s;
●删除:
p,q指向相邻结点,q所指结点是p所指结点的后继,删除q所指结点,
●遍历:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 实验 报告