资源描述
数据结构课程实验报告
学生姓名
学 号
班 级
指导老师
实验名称
线性表的链式存储结 构
实验成绩
实验报告
实 验 概 述
实验目的:
掌握线性表的链式存储结构及基本操作,深入了解顺序表的基本特性。
实验要求:
1、建立一个评委打分的单向链表。
2、显示删除相关结点后的链表信息。
3、显示要求的结果。
请认真阅读以上实验的问题描述,按照实验要求认真独立完成实验。如果在实 验过程中遇到困难,你可以通过以下辅助方式,顺利完本钱实验。
实验基本原理:
1、声明线性表的数据类型;
2、一般在头文件中声明(该头文件中还应包括操作接口的声明);
3、告诉编译器该数据类型占内存空间的大小;
4、定义线性表类型的变量;
5、在函数中或实现代码中的定义;
6、告诉编译器为变量分配内存空间;
7、操作线性表类型变量;
8、操作变量中保存的数据;
实 验 内 容
实验设计思路、步骤和方法等:
1、评委信息结点用结构变量存储,包含三个成员项,即姓名、年龄、评分。 结构类型定义如下:
〃定义评委信息
struct pw
(
char name [8]; 〃姓名
short age; //年龄
float score; 〃评分
);
2、用头插法或尾插法建立带头结点的单链表,本实验采用尾插法。
3、遍历链表并逐次比拟求最高分和最低分。
4、在链表中物理删除,即实际删除最高分和最低分结点;也可以进行逻辑删 除,即在被删结点的数据域设置一个删除标记,本实验采用物理删除的方法。
5、遍历链表,累加求和,计算总分及平均分,并输出相关信息。
如果对于自己编写好的程序不知道是否正确,你可以查看“实验程序”进行核查。
实验过程(实验中涉及的记录、数据、分析):
〃实验1.1线性表的链接存储结构
#include#include#include
define PWRS 5 〃定义评委人数〃定义评委信息 struct pw (char name [8] ; //姓名
short age; 〃年龄float score; 〃评分 );
typedef struct pw PW;〃定义链表结点 struct node(
PW data;struct node * next;
};typedef struct node NODE;
NODE *create (int n); 〃建立单链表void input (NODE *s, int i) ; //输入第 i 个评委信息
void output (NODE *s); 〃输出评委信息void traverse (NODE *head); 〃遍历链表
void calc (NODE *head) ; //计算及数据处理 void main(){
NODE *head=NULL;head=create (PWRS) ; //建立评委信息单链表
printf (〃\n所有评委的评分信息如下:\n〃);traverse (head); 〃输出所有评委的评分信息
calc (head); 〃计算成绩
printf (〃该参赛者去掉一个最高分和一个最低分后的有效评委的评分信息 如下:\n〃);traverse (head); 〃输出有效评委的评分信息 )
〃尾插法建立带头结点的单链表
NODE *create(int n) {NODE *head, *p, *q;int i;
p=(NODE*)malloc(sizeof(NODE));head=p; q=p; p->next=NULL;for(i=l; i<=n; i++){
p= (NODE*)malloc(sizeof(NODE));input (p, i);p->next=NULL;
q->next=p;q=p;
return (head);}
〃输入评委信息,包括姓名、年龄和评分void input (NODE *s, int i) {
printf (〃请输入第%d个评委的姓名、年龄和评分:〃,i);scanf(〃%s%d%f〃, &s->data. name, &s->data. age, &s->data. score);}
〃输出评委信息void output(NODE *s)
{printf (〃评委姓名:%6s年龄:%d评
分:%6. 2f\n〃, s->data. name, s->data. age, s->data. score);)
〃遍历链表,输出所有评委的评分信息void traverse (NODE *head){
NODE *p=head->next; 〃指向第一个结点while (p!=NULL)
{
output (p);p=p-〉next;} printf(〃\n〃);)
〃输出最高分及最低分评委信息,删除最高分及最低分结点并计算参赛者的最后平 均分void calc(NODE *head){
NODE *q, *p, *pmin, *pmax; float sum=0; 〃总分 float ave=0; 〃平均分 〃查找最高分和最低分并计算总分p=head->next;pmin=pmax=p;while(p!=NULL) {
sum+=p->data. score;if (p->data. score>pmax->data. score) pmax=p;
//pmax指向最高分结点if(p->data. scoredata, score) pmin=p;
//pmin指向最低分结点
C : \Docusient s and Sett ings\All Users\^ffi\sy 1 _ 1 \Debug\sy 1__6 5 0 0 8
8 7 8 9 7
5 6 8 2 8
4 3 4 5 3 a b c d e
6 5 0 0 8
8 7 8 9 7
5 6 8 2 8
4 3 4 5 3 a b c d e
分分分分分 评评评评评 口口 口口口 年禾禾禾不 3N^3E43N3tM =1 -==1 一---=1- rEciEiE左 尔省答苞省
4T7 "/Yr 4TT 4TT 牙£音A开K音K音A 评评评评评 个 12 3 4 5 BBS 入入入入入 ^1 ^HJ A a^i A l^i A i_i A tf " aiBf 青青青青青
s I s S •• 评评评评评 5 6 8 2 8 4 3 4 5 3 T=心心朋蛤心 口三三二-三三 力.耳耳耳耳拜 息
信 a b c d e 分
评 委答答答答答 rr_ L 二二二 _ 二_二__ 历平干平平正
d 年龄:52 评分:90.00
b 年龄:36 评分:75.00
会出.商分的评查姓名:
合出最显分的评委姓名:
81.33
一个最高分和一个最低分后的平均得分为:
个最低分后的有效评委的评分信息如下:
86.00
80.00
78.00
W:
评分,
去掉一个最高分和一 :a年龄,45
:c隼龄:48
:e年龄338
至名名 导三二4二二 费姓姓 参案萋 亥平平平
any key to cont inue实验结果:
实验的心得体会:
实
验
小
结
1、线性表采用链式存储(链表)时,用结构变量存储结点,动态生成结点, 用指针链接结点,能有效利用存储空间,插入删除方便。
2、链表不能随机访问,是顺序访问方式,可从某结点访问到其后继结点, 通常对单链表的遍历即从表头结点顺序访问到表尾结点,任何在链表上做的查找运算都是 在遍历
的基础上进行的。
3、单链表操作的关键步骤包括:
(1)建立链表的头插法:指针变量P开辟单元,生成结点,指针变量 q始终指向头结点;操作为:p->next=q->next; q->next=p;
(2)建立链表的尾插法:指针变量p开辟单元,生成结点,指针变量 q始终指向尾结 点; 操作为:q->next=p; q=p;
(3)插入:p结点的后面插入新结点s;操作为:s->next=p->next; p->next=s;
4、删除:p, q指向相邻结点,q结点是p结点的后继,删除q结点; 操作为: p->next=q->next;
5、遍历:p指向后继结点;操作为:p=p >nex
实验思考:
指 导 教 师 评 语指导教师
日期
展开阅读全文