下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
链表是学习数据结构的大门,在微软等大公司招聘c\c++技术人员的时候有3个会必然出现的东西,指针、链表、二叉树!在看一下内容时请确认您已经熟悉C语言的指针,否则请先复习指针的基础知识。以下以单链表为说明对象!我从一个初学者的角度来对链表进行说明:理论上的东西大家可以参考c语言数据结构一书,在此主要用一些例子来说明:看下面链表的基本形式:Structlink_c{Charname[20];Structlink_c*link;}可以看到这是一个结构体,结构体中有一个link_c的指针link。如图所示,head是链表的头指针,他指向链表的第一个节点,如果head为空则说明链表是空的。而节点中的link指向下一节点的首地址,如果link为空则代表此节点为这个链表的最后一个节点(非循环表,循环表的最后一个link指向head)。这里要注意的是Link要与他后面所指的节点的结构相同,所以其类型必须是link。下面我们创建一个简单的链表并且进行基本操作。〃定义链表的基础结构体Structstudent{Intnum;Structstudent*next;};〃创建一个只有头节点的空链表Structstudent*creat()//返回的是一个结构体指针{Structstudent*head;//定义并初始化头指针Head=(structstudent*)malloc(sizeof(structstudent));〃如果内存分配失败则返回空If(!head)//这种写法我也很不适应,但是比较规范{Returnnull;}//head头结点的指向的next为空,链表只有一个节点。Head->next=NULL;Returnhead;}以上建立了一个单节点的链表。接下来可以根据以上代码进行优化修改,创建一个多链接的链表创建有n个节点的链表Structstudent*creat(intn)//返回的是一个结构体{IntI;Structstudent*head,*p,*s;//定义并初始化头指针Head=(structstudent*)malloc(sizeof(structstudent));〃如果内存分配失败则返回空If(!headl){Returnnull;}P=head;For(i=0,i<n,i++){S=(structstudent*)malloc(sizeof(structstudent));If(!s){Returnnull;}p->next=s;s->next=NULL;p=s;//i+1后s的前驱节点就变成了上一循环的s也就是现在的p,,,此处有点绕}Returnhead;返回头节点指针}上面已经建立了一个比较简单的链表结构,下面进行一些链表的基本操作链表的查询操作Structstudent*search(structstudent*head,int*num)//head是头指针,num是要查找的数据{structstudent*p;〃定义一个节点指针int*m;//临时保存节点内的数据p=head->next;//头指针是不包含数据的,所以搜索的第一个节点是头指针指向的节点while(p!=NULL)//没有到最后一个节点{M=P->num;If(strcmp(num,m)==0)//strcmp应用可查csdn{Returnp;}Elsep=p->next;//如果判断不正确则指向下一个节点}If(p==NULL){〃没有找到数据,可以做消息弹出}}接下来是链表的插入操作,将s节点插入到p节点以前设结构体中的intnum是一个关键字,链表以这个关键字进行的排序Structstudent*instert(structstudent*s,structstudent*head)//s就是要插入的结构体*插入的节////点必须和原链表结构相同。{Structstudent*p,*q;If(!head)//如果头节点为空{Head=s;//s就是新的头节点s->next=NULL;returns;}P=head;Q=p;//q用来临时存储前驱节点While(p)//当p不为空时,这时的p=head{If(p->num<s->num)//如果关键码小于要插入的节点则指向下一节点{Q=pP=p->next;}ElseQ->next=s//这个需要认真的理解一下了,说明很难说明,可以参考上面的土s->next=preturnhead;〃当p为空时,没有找到q节点,所以s节点放到最后。Q->next=ss->next=NULLreturnhead;}链表的删除操作原理:理解链表的删除首先要明白函数malloc()与free()之间的关系。前者我们在创建或者插入一个节点的时候都用到,而后者则是删除的时候需要用到的。删除关键字为Key的节点Structstudent*del(intkey,structstudent*head){Structstudent*p,*q;〃如果表空If(!head)Return(0);〃如果头节点就是要删除的节点If(head->num==key)P=head;Head=head->next;Free(p);Returnhead;〃从头开始搜索遍历P=head;Q=p;If(p->num!=key){Q=p;//q始终保持为p的前驱节点p->next;}Else{q->next=p->next;//p节点的前驱节点Q指向p的nextfree(p)//释放Preturnhead;}Returnhead;}总结:上面从链表的各个方面进行了简
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 房地产项目可行性分析报告的目的是什么
- 钢铁是怎样炼成的习题答案
- 职业规划模拟剧指南
- 工程力学就业方向
- 2025年广西壮族自治区来宾市初二地生会考考试题库(含答案)
- 2025年湖南省长沙市初二地理生物会考真题试卷(+答案)
- 2025年湖南娄底市初二学业水平地理生物会考考试真题及答案
- 2025年广东省肇庆市八年级地生会考题库及答案
- AI产品核心卖点解析
- 压疮的伤口护理最佳实践
- 结肠癌疑难病例护理讨论
- 工程机械设备保险课件
- 2025年全国普通高校招生全国统一考试数学试卷(新高考Ⅰ卷)含答案
- 哈尔滨2025年哈尔滨“丁香人才周”(春季)延寿县事业单位引才招聘笔试历年参考题库附带答案详解
- 工程项目绩效管理
- 特种作业培训合同模板8篇
- 购销合同退换货协议
- 2024联易融线上用印软件使用手册
- 中医药膳食疗的养生作用
- 房屋安全鉴定服务投标方案(技术标)
- 2024年二级注册结构工程师专业考试试题及答案(上午卷)
评论
0/150
提交评论