实验二-链表操作实现

  • 格式:doc
  • 大小:99.50 KB
  • 文档页数:12

下载文档原格式

  / 12
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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;/*利用原表头结点建新的空表*/