




已阅读5页,还剩5页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验二 链表操作实现实验日期: 2017 年 3 月 16 日 实验目的及要求1. 熟练掌握线性表的基本操作在链式存储上的实现;2. 以线性表的各种操作(建立、插入、删除、遍历等)的实现为重点;3. 掌握线性表的链式存储结构的定义和基本操作的实现;4. 通过本实验加深对C语言的使用(特别是函数的参数调用、指针类型的应用)。实验内容已知程序文件linklist.cpp已给出学生身高信息链表的类型定义和基本运算函数定义。(1)链表类型定义typedef struct int xh; /*学号*/ float sg; /*身高*/ int sex; /*性别,0为男生,1为女生*/ datatype;typedef struct node datatype data; /*数据域*/ struct node *next; /*指针域*/ LinkNode, *LinkList; (2)带头结点的单链表的基本运算函数原型LinkList initList();/*置一个空表(带头结点)*/void createList_1(LinkList head);/*创建单链表*/void createList_2(LinkList head);/* 创建单链表*/void sort_xh(LinkList head);/*单链表排序*/void reverse(LinkList head);/*对单链表进行结点倒置*/void Error(char *s);/*自定义错误处理函数*/void pntList(LinkList head);/*打印单链表*/void save(LinkList head,char strname);/*保存单链表到文件*/任务一创建程序文件linklist.cpp,其代码如下所示,理解LinkList类型和基本运算函数后回答下列问题。#include #include /*单链表结点类型*/typedef struct int xh; /*学号*/ float sg; /*身高*/ int sex; /*性别,0为男生,1为女生*/ datatype;typedef struct node datatype data; /*数据域*/ struct node *next; /*指针域*/ LinkNode, *LinkList;/*带表头的单链表的基本运算函数*/LinkList initList();/*置一个空表(带头结点)*/void createList_1(LinkList head);/*创建单链表*/void createList_2(LinkList head);/*创建单链表*/void sort_xh(LinkList head);/*单链表排序*/void reverse(LinkList head);/*单链表倒置*/void Error(char *s);/*自定义错误处理函数*/void pntList(LinkList head);/*打印单链表*/void save(LinkList head,char strname);/*保存单链表到文件*/*置一个空表*/LinkList initList() LinkList p; p=(LinkList)malloc(sizeof(LinkNode); p-next=NULL; return p;/*创建单链表*/void createList_1(LinkList head) FILE *fp;int xh;float sg; int sex;LinkList p;if(fp=fopen(records.txt,r)=NULL) Error(can not open file !); return ;while(!feof(fp)fscanf(fp,%d%f%d,&xh,&sg,&sex);p=(LinkList)malloc(sizeof(LinkNode);p-data.xh=xh;p-data.sg=sg;p-data.sex=sex;p-next=head-next;head-next=p;fclose(fp);/*创建单链表*/void createList_2(LinkList head)FILE *fp;int xh;float sg; int sex;LinkList p,rear;if(fp=fopen(records.txt,r)=NULL) Error(can not open file !); return ;rear=head;while(!feof(fp)fscanf(fp,%d%f%d,&xh,&sg,&sex);p=(LinkList)malloc(sizeof(LinkNode);p-data.xh=xh;p-data.sg=sg;p-data.sex=sex;p-next=NULL;rear-next=p;rear=p;fclose(fp);/*单链表排序*/void sort_xh(LinkList head) LinkList q,p,u; p=head-next; head-next=NULL;/*利用原表头结点建新的空表*/ while(p) q=p; /*q为被插入的结点*/ p=p-next;/*用p记录后继结点*/ /*遍历新链表查找插入位置*/ u=head; while(u-next!=NULL)/*查找插入位置*/ if(u-next-data.xhq-data.xh) break; u=u-next; /*插入在u结点的后面*/ q-next=u-next; u-next=q; /*单链表倒置*/void reverse(LinkList head) LinkList p, r; p=head-next; head-next=NULL; while(p) r=p; p=p-next; /*r指向结点头插到链表*/ r-next=head-next; head-next=r; /*输出单链表*/void pntList(LinkList head)LinkList p;p=head-next;while(p!=NULL)printf(%2d: %.2f %dn,p-data.xh,p-data.sg,p-data .sex); p=p-next;/*自定义错误处理函数*/void Error(char *s) printf(n %s, s); exit(1); /*返回OS,该函数定义在stdlib.h中*/*保存单链表到文件*/void save(LinkList head,char strname)FILE *fp;LinkList p;if(fp=fopen(strname,w)=NULL) printf(can not open file !); return ;p=head-next;while(p!=NULL) fprintf(fp,%2d %5.2f %2dn,p-data.xh,p-data.sg,p-data.sex); p=p-next;fclose(fp);请回答下列问题:(1)由单链表结点类型定义可知,该链表结点类型名为 LinkNode ,结点的指针类型为 LinkList ,向系统申请一个学生结点空间并把起始地址存于上述结点指针变量new中的语句是: p=(LinkList)malloc(sizeof(LinkNode); 。(2)回答问题:a)已知:LinkList head ; 画出执行head=initList();语句后的链表结构示意图head*顺序:1-13-7-15-2 pb)在a)操作的基础上,根据records.txt中的数据,画出执行createList_1(head);语句后的链表结构示意图head1315172 c)在b)操作的基础上,画出执行sort_xh(head) ;语句后的链表结构示意图 head1513721d)在c)操作的基础上,画出执行reverse(head) ;语句后的链表结构示意图 head1512713e)在d)操作的基础上,写出执行pntList(head) ;语句后屏幕输出结果(3)写出下列操作对应的执行语句(以下的指针变量的类型都是上述定义的结点指针类型)a)把一个new指针指向的结点头插到以h为头指针带表头结点的单链表中的语句new-next=h-next;h-next=new;b)把一个new指针指向的结点头插到以h为头指针不带表头结点的单链表中的语句new-next=h;h=new;c)在单链表中删除r所指结点的后继结点(假设存在)的语句 r-next=r-next-nextd)分别写出循环及非循环单链表中判断r所指结点是尾结点(假设存在)的条件循环:r-next= =NULL非循环:r-next!=NULL任务二1题目要求创建一个新的程序文件sy12.cpp,请调用linklist.cpp提供的功能函数(以#include “linklist.cpp” 方式导入函数库)及自定义的函数完成以下操作:l 从数据文件records.txt中读取学生信息,建立与源数据同序的学生链表并打印在屏幕上;l 统计学生链表中身高达标人数(男女生的身高达标值由键盘输入),并打印结果;l 从键盘输入一位学生的相关信息插入到已排序的学生身高链表中后仍然保持学号的有序性;l 对上述操作后的学生链表进行倒置,结果输出到数据文件result.txt中;l 删除链表中身高为指定值的所有学生结点并打印; 在程序文件sy12.cpp需再定义以下三个功能函数:(1)int count(LinkList head,float sg_fm,float sg_m)功能:已知女生达标身高为sg_fm,男生达标身高为sg_m,统计head为头指针的学生链表中身高达标人数并返回;(2)void insertX(LinkList head, datatype x)功能:在学号从小到大排序的学生链表中插入值为x的学生仍保持学号的有序性(3)int delete(LinkList head,float sg)功能:删除head为头指针的学生链表中指定身高的所有学生结点,删除成功返回1,否则返回0;2请根据题目功能要求或程序中的注释完整sy12.cpp代码#include linklist.cppint count(LinkList head,float sg_fm,float sg_m);/*统计head为头指针的学生链表中身高达标人数并返回*/void insertX(LinkList head, datatype x);/*在学号从小到大排序的学生链表中插入值为x的学生仍保持学号的有序性*/int delete(LinkList head,float sg);/*删除head为头指针的学生链表中指定身高的所有学生结点,删除成功返回1,否则返回0*/void main() LinkList head; int c,flag; float sg,sg_fm,sg_m; datatype x; /*建立与源数据文件同序的学生链表并输出;*/ head= initList() ; /*建空链表*/ createList_2(head) ; /*调用建链表函数建立所需链表*/ printf(n与数据文件同序的学生链表:n); pntList(head) ; /*调用函数打印输出链表中信息*/ getchar(); /*统计学生链表中身高达标人数(男女生的身高达标值由键盘输入)并打印结果;*/ printf(n输入达标的女生、男生身高值:); scanf(%f%f,&sg_fm,&sg_m); c=count( head, sg_fm, sg_m ); printf(n达标学生人数为:%d,c); getchar(); /*对学生链表按学号进行排序*/ sort_xh(head); /*在学生链表中插入指定的学生元素后使链表仍按学号有序*/ x.xh=3; x.sg=1.67; x.sex=0; insertX( head, x ); printf(n new list after insert:n); pntList(head); getchar(); /*对学生链表进行倒置,结果输出到文件result.txt中;*/ reverse(head); save(head,result.txt); getchar(); /*删除链表中身高为指定值的所有学生结点;*/ sg=1.67; flag= dele(head, sg) ; if(flag) printf(ndelete succeed!n); else printf(ndelete failedn); printf(n new list after delete:n); pntList(head); getchar();/统计学生链表中身高达标人数并返回(sg_fm女生身高达标值、sg_m男生身高达标值)int count(LinkList head,float sg_fm,float sg_m) int n=0; LinkList p; p = head-next;while (p != NULL)if (p-data.sex = 1)/*sex:1 女生*/if (p-data.sg = sg_fm)n+;el
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 以小组工作赋能:河南科技大学宿舍人际关系优化探究
- 以学定教:基于学习风格的初中美术设计·应用教学策略创新
- 2025-2030年中国银锆石耳环行业深度研究分析报告
- 渔光互补光伏施工方案设计
- 2022-2027年中国九江房地产行业市场调研及未来发展趋势预测报告
- 中国轨道结构减振产品行业市场前景预测及投资战略研究报告
- 2025年PTT行业市场突围建议及需求分析报告
- 2025年中国IC卡控水器行业市场发展前景及发展趋势与投资战略研究报告
- 2025年中国大豆深加工市场深度调查及发展前景研究预测报告
- 2025年中国化学交联剂行业市场前景预测及投资价值评估分析报告
- 江苏省南通市2024-2025学年高二下学期6月期末质量监测政治试题(含答案)
- 电工厂搬迁方案(3篇)
- 一级医院医保管理制度
- 2025年南京市中考数学真题试卷
- 老年人眼科疾病
- 2024年深圳市中考历史试卷真题(含答案解析)
- 四川省地质灾害治理工程常用资料表格
- RFJ0132010人民防空工程防化设计规范
- CA6140车床杠杆工艺设计说明书完全版
- T_CHES 17-2018 水井报废与处理技术导则
- 酒店住宿账单模板
评论
0/150
提交评论