创建单链表并实现逆置.doc

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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

文档评论(0)

新起点 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档