欢迎来到天天文库
浏览记录
ID:56904409
大小:35.02 KB
页数:9页
时间:2020-07-21
《创建单链表并实现逆置.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、武汉大学实验报告资源与环境科学院系地理信息系统专业2013年12月22号实验名称单链表的创建和逆置指导老师游涟姓名冯萱班级地信三班学号2012301130082成绩一、实验原理利用单链表的节点和指针对单链表实现一系列的操作,包括单链表的定义、创建、测长、插入、删除、取元素、撤销单链表、逆置单链表等函数。二、实验目的掌握线性表的链式存储结构——单链表的定义及C语言实现;掌握线性表在链式存储结构——单链表中的各种基本操作。三、实验内容及步骤1、把节点结构体的建立和一些实现函数放到了头文件SLNOde头文件里,头文件主要包括以下几个函数:1:创建节点
2、结构体:typedefstructNode{DataTypedata;structNode*next;}SLNode;2、初始化单链表函数:voidListInitiate(SLNode**head)//初始化头指针和头结点//{if((*head=(SLNode*)malloc(sizeof(SLNode)))==NULL)exit(1);//头指针指向头结点,并为头结点申请内存空间//(*head)->next=NULL;//置结束标记//}3、求单链表的长度:intListLength(SLNode*head)//求数据个数//{SLNo
3、de*p=head;//p指向头结点//intsize=0;while(p->next!=NULL)//循环计数//{p=p->next;size++;}returnsize;}4、插入数据函数:intListInsert(SLNode*head,inti,DataTypex)//在第i个节点上插入一个数字x,并以1说明插入成功//{SLNode*p,*q;//p指向地i-1个结点,q用来放x//intj;//用来找第i个//p=head;//p指向头结点//j=-1;while(p->next!=NULL&&j4、-1个结点//{p=p->next;j++;}if(j!=i-1)//判断是否在i前就空了//{printf("插入数据出错!");return0;}if((q=(SLNode*)malloc(sizeof(SLNode)))==NULL)exit(1);//给插入的数据一个结点空间//q->data=x;//把数据给结点//q->next=p->next;//把指针给结点//p->next=q;//把结点的地址给前一个//return1;}5、删除数据元素函数:intListDelete(SLNode*head,inti,DataType*x5、)//删除第i个节点,并有x带回,其中成功返回一//{SLNode*p,*s;//p用来找第i-1个位置,s用来指向i//intj;p=head;j=-1;while(p->next!=NULL&&p->next->next!=NULL&&jnext;j++;}if(j!=i-1)//判断是否在i前就空了//{printf("删除位置错误");return0;}s=p->next;//s指向i//*x=s->data;//取i的数值给x//p->next=p->next->next;6、//把i+1的地址给i的指针//free(s);//s结点释放,即删除//return1;}6、取链表的元素函数:intListGet(SLNode*head,inti,DataType*x)//去链表中的元素//{SLNode*p;//指向i-1的位置//intj;//判断是否在i之前就空了//p=head;j=-1;while(p->next!=NULL&&jnext;j++;}if(j!=i)//i前就空了//{printf("元素位置错误");return0;}*x=p->data;//成功并返回一说明//retu7、rn1;}7、释放单链表函数:voidDestory(SLNode**head)//释放动态内存单链表//{SLNode*p,*p1;//p1区释放呢//p=*head;while(p!=NULL){p1=p;p=p->next;free(p1);}*head=NULL;//释放head结点的内存//}8、就地逆置单链表函数:voidJiudiReserve(SLNode*head)//对带头结点的单链表L实现就地逆置//{SLNode*curr,*next;curr=head->next;head->next=NULL;while(curr!8、=NULL){next=curr->next;curr->next=head->next;head->next=curr;curr=next;}}9、
4、-1个结点//{p=p->next;j++;}if(j!=i-1)//判断是否在i前就空了//{printf("插入数据出错!");return0;}if((q=(SLNode*)malloc(sizeof(SLNode)))==NULL)exit(1);//给插入的数据一个结点空间//q->data=x;//把数据给结点//q->next=p->next;//把指针给结点//p->next=q;//把结点的地址给前一个//return1;}5、删除数据元素函数:intListDelete(SLNode*head,inti,DataType*x
5、)//删除第i个节点,并有x带回,其中成功返回一//{SLNode*p,*s;//p用来找第i-1个位置,s用来指向i//intj;p=head;j=-1;while(p->next!=NULL&&p->next->next!=NULL&&jnext;j++;}if(j!=i-1)//判断是否在i前就空了//{printf("删除位置错误");return0;}s=p->next;//s指向i//*x=s->data;//取i的数值给x//p->next=p->next->next;
6、//把i+1的地址给i的指针//free(s);//s结点释放,即删除//return1;}6、取链表的元素函数:intListGet(SLNode*head,inti,DataType*x)//去链表中的元素//{SLNode*p;//指向i-1的位置//intj;//判断是否在i之前就空了//p=head;j=-1;while(p->next!=NULL&&jnext;j++;}if(j!=i)//i前就空了//{printf("元素位置错误");return0;}*x=p->data;//成功并返回一说明//retu
7、rn1;}7、释放单链表函数:voidDestory(SLNode**head)//释放动态内存单链表//{SLNode*p,*p1;//p1区释放呢//p=*head;while(p!=NULL){p1=p;p=p->next;free(p1);}*head=NULL;//释放head结点的内存//}8、就地逆置单链表函数:voidJiudiReserve(SLNode*head)//对带头结点的单链表L实现就地逆置//{SLNode*curr,*next;curr=head->next;head->next=NULL;while(curr!
8、=NULL){next=curr->next;curr->next=head->next;head->next=curr;curr=next;}}9、
此文档下载收益归作者所有