1、 /*数据域*/ 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);/*自定
2、义错误处理函数*/void pntList(LinkList head);/*打印单链表*/void save(LinkList head,char strname);/*保存单链表到文件*/任务一创建程序文件linklist.cpp,其代码如下所示,理解LinkList类型和基本运算函数后回答下列问题。#include stdlib.h/*单链表结点类型*/*带表头的单链表的基本运算函数*/*单链表倒置*/*置一个空表*/LinkList initList() LinkList p; p=(LinkList)malloc(sizeof(LinkNode); p-next=NULL; retu
3、rn p;void createList_1(LinkList head) FILE *fp; 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;data.sg=sg;data.sex=sex;next=head-next; head-next=p; fclose(fp);void cre
4、ateList_2(LinkList head) LinkList p,rear; rear=head; rear- rear=p;void sort_xh(LinkList head) LinkList q,p,u; p=head- head-/*利用原表头结点建新的空表*/ while(p) q=p; /*q为被插入的结点*/ p=p-/*用p记录后继结点*/ /*遍历新链表查找插入位置*/ u=head; while(u-next!=NULL)/*查找插入位置*/ if(u-next-data.xhq-data.xh) break; u=u- /*插入在u结点的后面*/ q-next=u
5、- u-next=q;void reverse(LinkList head) LinkList p, r; r=p; /*r指向结点头插到链表*/ r-next=r; /*输出单链表*/void pntList(LinkList head) while(p!=NULL) printf(%2d: %.2f %dn,p-data.xh,p-data.sg,p-data .sex);void Error(char *s) printf(n %s, s); exit(1); /*返回OS,该函数定义在stdlib.h中*/void save(LinkList head,char strname) if
6、(fp=fopen(strname,w printf( fprintf(fp,%2d %5.2f %2dndata.sex);请回答下列问题:(1)由单链表结点类型定义可知,该链表结点类型名为 LinkNode ,结点的指针类型为 LinkList ,向系统申请一个学生结点空间并把起始地址存于上述结点指针变量new中的语句是: 。(2)回答问题:a)已知:LinkList head ; 画出执行head=initList();语句后的链表结构示意图head*顺序:1-13-7-15-2 pb)在a)操作的基础上,根据records.txt中的数据,画出执行createList_1(head);
7、c)在b)操作的基础上,画出执行sort_xh(head) ; headd)在c)操作的基础上,画出执行reverse(head) ;e)在d)操作的基础上,写出执行pntList(head) ;语句后屏幕输出结果(3)写出下列操作对应的执行语句(以下的指针变量的类型都是上述定义的结点指针类型)a)把一个new指针指向的结点头插到以h为头指针带表头结点的单链表中的语句new-next=h- h-next=new;b)把一个new指针指向的结点头插到以h为头指针不带表头结点的单链表中的语句next=h; h=new;c)在单链表中删除r所指结点的后继结点(假设存在)的语句next=r-nextd
8、)分别写出循环及非循环单链表中判断r所指结点是尾结点(假设存在)的条件循环:r-next= =NULL非循环:=NULL任务二1题目要求创建一个新的程序文件sy12.cpp,请调用linklist.cpp提供的功能函数(以#include “linklist.cpp” 方式导入函数库)及自定义的函数完成以下操作:从数据文件records.txt中读取学生信息,建立与源数据同序的学生链表并打印在屏幕上;统计学生链表中身高达标人数(男女生的身高达标值由键盘输入),并打印结果;从键盘输入一位学生的相关信息插入到已排序的学生身高链表中后仍然保持学号的有序性;对上述操作后的学生链表进行倒置,结果输出到数
9、据文件result.txt中;删除链表中身高为指定值的所有学生结点并打印;在程序文件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
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1