实验二 链表操作实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验二链表操作实现
实验日期: 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;/*利用原表头结点建新的空表*/