1 / 13
文档名称:

实验一 链表操作实验报告.doc

格式:doc   大小:130KB   页数:13页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

实验一 链表操作实验报告.doc

上传人:xunlai783 2018/11/25 文件大小:130 KB

下载得到文件列表

实验一 链表操作实验报告.doc

相关文档

文档介绍

文档介绍:题目:链表操作
日期
姓名
班级
实验环境:
PC机,Windows XP,Visual C++
实验目的:
通过链表操作,来进一步掌握对该部分知识的理解,并为后续实验中进行模拟算法的编程作好准备工作。
实验原理
Linux操作系统是用C/C++语言编写完成的,掌握 C/C++语言,能够用该语言进行基本的操作是读懂Linux源代码的基本前提。掌握C/C++语言中结构体和链表的操作又是基本的工作。本实验中可以创建两条链表,实现按一定次序插入节点、删除节点,以及在链表间移动节点的功能。
实验步骤
1 创建两个单链表,并在每个链表中至少插入三个结点。数据域定义为学号和身高。
2 遍历链表1和链表2。
3 删除第一个链表中的第二个结点。
4 将第二个链表中的第二个结点移动到第一个结点适当的位置。
5 建立一个双向链表,实现以上操作。(选做)
6 建立一个循环(双向)链表实现以上操作。(选做)
实验内容
按实验内容与步骤阅读理解数据结构及主函数,并完成各子函数的功能。
#include <>
#include <>
typedef struct node{
int num; //学号
float height; //身高
struct node *next;
}Node,*Link;
Link CreateLink();//创建链表
Link Delete(Link H,int n); //删除节点
Node *GetNode(Link H,int n);//获取节点
Link Insert(Link H,Node *N);//插入节点
int print(Link H);//输出
/* 创建链表*/
Link CreateLink()
{
Link H=NULL;
Node *p,*q;
int num=-1;//保存学号
float hei=-;//保存身高
int min=1;//计数,至少插入3个节点
printf("请输入学号:num=");
scanf("%d",&num);
fflush(stdin);//清空输入缓冲区,确保不影响后面的数据读取
printf("请输入身高:hei=");
scanf("%f",&hei);
printf("\n");
fflush(stdin);//清空输入缓冲区,确保不影响后面的数据读取
while(num!=-1 || min<=3)
{
if(H==NULL)
{
p=(Node *)malloc(sizeof(Node));
p->num=num;
p->height=hei;
p->next=NULL;
min++; //计数加一
H=p;
}
else
{
q=(Node *)malloc(sizeof(Node));
q->num=num;
q->height=hei;
q->next=NULL;
min++;
p->next=q;
p=p->next;
}
lab1: printf("请输入学号:num=");
scanf("%d",&num);
fflush(stdin);
if(num==-1 && min<=3)
{
printf("\n请至少输入3个节点\n\n");
goto lab1; //跳到 lab1
}
if(num==-1 && min>3) //退出输入
break;
printf("请输入身高:hei=");
scanf("%f",&hei);
printf("\n");
fflush(stdin);
}
return H;
}
/* 删除节点*/
/* 参数 H 为表头节点*/
/* 参数 n 为删除第几个节点*/
Link Delete(Link H,int n)
{
int i=1;
Node *p,*q;

if(n==1) //删除的是第一个节点
{
H=H->next;
return H;
}
p=H;
while(p!=NULL)
{
if(i==(n-1)) //删除节点的前一个节点
break;
p=p->next;
i++;
}
if(i==(n-1))//存在n-1个节点
{
q=p->next;
p->next=q->next;
free(q); //释放q节点
}
else
{
printf("不存在第