电大《数据结构》实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据结构形成性考核册
实验名称:实验一线性表
线性表的链式存储结构
【问题描述】
某项比赛中,评委们给某参赛者的评分信息存储在一个带头结点的单向链表中,编写程序:
(1)显示在评分中给出最高分和最低分的评委的有关信息(姓名、年龄、所给分数等)。
(2)在链表中删除一个最高分和一个最低分的结点。
(3)计算该参赛者去掉一个最高分和一个最低分后的平均成绩。
【基本要求】
(1)建立一个评委打分的单向链表;
(2)显示删除相关结点后的链表信息。
(3)显示要求的结果。
【实验步骤】
(1)运行PC中的Microsoft Visual C++ 程序,
(2)点击“文件”→“新建”→对话窗口中“文件”→“c++ Source File”→在“文件名”中输入“”
→在“位置”中选择储存路径为“桌面”→“确定”,
(3)输入程序代码,
程序代码如下:
#include <>
#include <>
#include <>
#include <>
#include <>
#define NULL 0
#define PWRS 5 2.2f ge=n; ame);
printf("性别0女1男: ");
scanf("%d",&m[i].sex);
printf("年龄: ");
scanf("%d",&m[i].age);
printf("\n");
}
return 1;
}
int calc(STD *m,STD *n,STD *r,float &Fage,float &Mage)
{ int i,j=1,k=1;
n[0].age=r[0].age=0;
for( i=1;i<=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;
cout<<"女生的平均年龄是:"< return 1; } void print(STD *m) { for(int i=1;i<=m[0].age;i++) { printf ("姓名:%3s, 性别(0女1男):%d, 年龄:%d\n",m[i].name,m[i].sex,m[i].age); } } 程序运行结果如下: 实验结束。 实验结论:线性表采用链式存储(链表)时:以结构变量存储结点,动态生成结点,以指针链接结点,能有效利用存储空间,插入删除方便,但不能随机访问.单向链表可从某结点访问到后继结点。单向链表操作的关键步骤:建立链表的头插法:指针变量p 开辟单元,生成结点,指针变量q 始终指向头结点,操作为:p->next=q->next; q->next=p; 尾插法:指针变量q 始终指向尾结点,p 指针开辟单元,生成结点:q->next=p; q=p; 插入:p 所指向结点的后面插入新结点s 所指结点s->next=p->next; p->next=s; 删除:p,q 指向相邻结点,q 所指结点是p 所指结点的后继,删除q 所指结点,p->next=q->next; 遍历:p=p->next; 实验名称:实验二栈、列队、递归程序设计 栈和队列的基本操作 【问题描述】 编写一个算法,输出指定栈中的栈底元素,并使得原栈中的元素倒置。 【基本要求】 (1)正确理解栈的先进后出的操作特点,建立初始栈,通过相关操作显示栈底元素。 (2)程序中要体现出建栈过程和取出栈底元素后恢复栈的入栈过程,按堆栈的操作规则打印结果栈中的元素。【实验步骤;】 (4)运行PC中的Microsoft Visual C++ 程序, (5)点击“文件”→“新建”→对话窗口中“文件”→“c++ Source File”→在“文件名”中输入“” →在“位置”中选择储存路径为“桌面”→“确定”, (6)输入程序代码, 程序代码如下: #include <> #include <> #define MaxSize 100 typedef char ElemType; typedef struct { ElemType data[MaxSize]; int top; ame ); x=s[0].avg ; while(low<=hight) { mid=(low+hight)/2; if(x>s[mid].avg ) hight=mid-1; else low=mid+1; } for(k=0;k strcpy(s[k].name,s[k+1].name) ; s[k].avg =s[k+1].avg ; } printf("%d",low); strcpy(s[low-1].name ,y) ; s[low-1].avg =x; } void main() { Struct student a[N]= {{"caozh",96},{"cheng",95},{"zhao",93},{"wang",92},{"chen",91}}; struct student stu[N]; int i; for(i=0;i stu[i+1]=a[i]; printf("初始 %d 位同学的信息表\n",MAX); 1 2 5 4 3