- 1、本文档共9页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
武汉大学实验报告
资源与环境科学院 系 地理信息系统 专业 2013年12月22号
实验名称
单链表的创建和逆置
指导老师
游涟
姓名
冯萱
班级
地信三班
学号
2012301130082
成绩
实验原理
利用单链表的节点和指针对单链表实现一系列的操作,包括单链表的定义、创建、测长、插入、删除、取元素、撤销单链表、逆置单链表等函数。
实验目的
掌握线性表的链式存储结构——单链表的定义及C语言实现;掌握线性表在链式存储结构——单链表中的各种基本操作。
实验内容及步骤
把节点结构体的建立和一些实现函数放到了头文件SLNOde头文件里,头文件主要包括以下几个函数:
1:创建节点结构体:
typedef struct Node
{
DataType data;
struct Node *next;
}SLNode;
2、初始化单链表函数:
void ListInitiate(SLNode **head)//初始化头指针和头结点//
{
if((*head=(SLNode *)malloc(sizeof(SLNode)))==NULL) exit(1);//头指针指向头结点,并为头结点申请内存空间//
(*head)-next=NULL;//置结束标记//
}
3、求单链表的长度:
int ListLength(SLNode *head)//求数据个数//
{
SLNode *p=head;//p指向头结点//
int size=0;
while(p-next!=NULL)//循环计数//
{
p=p-next;
size++;
}
return size;
}
4、插入数据函数:
int ListInsert(SLNode *head,int i,DataType x)//在第i个节点上插入一个数字x,并以1说明插入成功//
{
SLNode *p,*q;//p指向地i-1个结点,q用来放x//
int j;//用来找第i个//
p=head;//p指向头结点//
j=-1;
while(p-next!=NULLji-1)//最终让指针p指向i-1个结点//
{
p=p-next;
j++;
}
if(j!=i-1)//判断是否在i前就空了//
{
printf(插入数据出错!);
return 0;
}
if((q=(SLNode *)malloc(sizeof(SLNode)))==NULL) exit(1);//给插入的数据一个结点空间//
q-data=x;//把数据给结点//
q-next=p-next;//把指针给结点//
p-next=q;//把结点的地址给前一个//
return 1;
}
5、删除数据元素函数:
int ListDelete(SLNode *head,int i,DataType *x)//删除第i个节点,并有x带回,其中成功返回一//
{
SLNode *p,*s;//p用来找第i-1个位置,s用来指向i//
int j;
p=head;
j=-1;
while(p-next!=NULLp-next-next!=NULLji-1)//最终让指针p指向i-1个结点//
{
p=p-next;
j++;
}
if(j!=i-1)//判断是否在i前就空了//
{
printf(删除位置错误\n);
return 0;
}
s=p-next;//s指向i//
*x=s-data;//取i的数值给x//
p-next=p-next-next;//把i+1的地址给i的指针//
free(s);//s结点释放,即删除//
return 1;
}
6、取链表的元素函数:
int ListGet(SLNode *head,int i,DataType *x)//去链表中的元素//
{
SLNode *p;//指向i-1的位置//
int j;//判断是否在i之前就空了//
p=head;
j=-1;
while(p-next!=NULLji)
{
p=p-next;
j++;
}
if(j!=i)//i前就空了//
{
printf(元素位置错误\n);
return 0;
}
* x=p-data;//成功并返回一说明//
return 1;
}
7、释放单链表函数:
void Destory(SLNode * *head)//释放动态内存单链表//
{
SLNode *p,*p1;//p1区释放呢//
p=*head;
while (p!=NULL)
{
p1=p;
p=p-next;
fre
您可能关注的文档
- 1 有趣的骰子_答案.pdf
- 16位ALUVHDL实现源程序.doc
- 2016年全国统一高考地理试卷(全国一卷).doc
- 2017高考全国二卷.doc
- 2017年全国统一高考化学试卷(全国二卷).doc
- 2018全国三卷英语写作.ppt
- 2019全国卷1作文:劳动(2019全国卷1).doc
- stata中如何实现调节效应.doc
- verilog_简单交通灯实现.doc
- 大学生应如何在社会中实现自己的价值.doc
- 化学反应速率与平衡.ppt
- 企业会计信息质量问题及对策【精品发布】.doc
- 免疫学的应用高二上学期生物人教版选择性必修一.pptx
- 高中物理自由落体运动课题研究力学部分+课件+-2023-2024学年高一上学期物理人教版必修第一册.pptx
- 北师大版生物七年级上册 《细胞的基本结构和功能》第2课时CEP课件1.pptx
- Unit 4 Grammar and usage(教学课件)-高中英语牛津译林版(2020)选择性必修第三册.pptx
- 特异性免疫高二上学期生物人教版选择性必修1.pptx
- 期末复习课件专题9+物体的浮沉条件及应用(2)++2023-2024学年人教版八年级物理下册.pptx
- 其他植物激素高二上学期生物人教版选择性必修1.pptx
- 三大费用核算节税技巧【会计实务操作教程】.pptx
文档评论(0)