C语言程序设计教程 王秀贵 等 第10章 结构与指针的应用

C语言程序设计教程 王秀贵 等 第10章 结构与指针的应用

ID:40238595

大小:1.09 MB

页数:110页

时间:2019-07-28

C语言程序设计教程 王秀贵 等 第10章 结构与指针的应用_第1页
C语言程序设计教程 王秀贵 等 第10章 结构与指针的应用_第2页
C语言程序设计教程 王秀贵 等 第10章 结构与指针的应用_第3页
C语言程序设计教程 王秀贵 等 第10章 结构与指针的应用_第4页
C语言程序设计教程 王秀贵 等 第10章 结构与指针的应用_第5页
资源描述:

《C语言程序设计教程 王秀贵 等 第10章 结构与指针的应用》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第10章结构与指针的应用单链表双链表循环链表堆栈队列第页共109页10.1单链表单链表的存储结构建立一个单链表将结点插入到有序单链表从有序单链表中删除结点第页共109页10.1.1单链表的存储结构单链表又称单向线性链表。在单链表中,每个数据存储项都称做结点,它是表示某一个数据结构特征(如信息、连接方式)的基本单位。每个结点所占存储空间在逻辑上可分为两部分:一部分存放数据元素,通常称为data域,另一部分存放指向链表下一结点的指针,习惯上称为next域,如下图所示。第页共109页10.1.1单链表的存储结构单链表中的一个结点第页共1

2、09页10.1.1单链表的存储结构单向线性链表的基本特征是表中每个结点都有且只有一个指向表中下一个结点的指针。链表通过指向后继结点的指针将链表中的各个结点连接在一起。链表最后一个结点的next域的值为NULL,表示该结点为表尾结点。为了记住链表的起始位置,需要一个表头指针(不妨设为head)指向链表的第一个结点。单链表的结点类型LNode定义如下:typedefstructLNode{ElemTypedata;structLNode*next;}LinkNode;第页共109页10.1.1单链表的存储结构这里的ElemType可以

3、是任何合法的数据类型,如int,char等,它表示存储于结点中的数据的类型。设ElemType为int类型,如下图所示是一个具有四个结点的单链表。具有四个结点的单链表第页共109页10.1.1单链表的存储结构在下图中,存放于结点的数据是一个整数值。根据链表头指针head,可以访问存储于第一个结点的数据,由第一个结点的指针又可以访问第二个结点的数据。如此下去,直到访问最后一个结点的数据。最后一个结点的指针值为0,即NULL指针,表示链表到此为止。可见,一个单链表是一组结点的有限序列,它有一个无前驱的首结点和一个无后继的尾结点。除尾结

4、点外,每个结点都用一个指针指向它的后继结点。第页共109页10.1.1单链表的存储结构有时,在单链表的第一个结点之前附加一个结点,称之为“头结点”。头结点的数据域(data域)可以不存储任何信息,也可以存储如链表长度等附加信息,头结点的指针域(next域)存放指向第一个结点的指针(即第一个数据元素结点的地址)。如下图所示,此时,单链表的头指针head指向头结点。第页共109页10.1.1单链表的存储结构带头结点的单链表第页共109页10.1.2建立一个单链表为简单起见,假定输入一串字符,以空格作结束标志,每个字符作为结点data域

5、的数据建立一个单链表。可编写建立单链表的函数CreatList,如所示,如果成功建立了单链表,则函数返回1;否则返回0。第页共109页10.1.2建立一个单链表这个函数建立了一个不带头结点的单链表。由于考虑到在建表过程中,系统可能不能满足用户的空间分配要求,从而不能成功地建立链表,因此,用函数的返回值来反映函数执行状态:建表成功则返回1;否则返回0。那么如何把建好的单链表传递给调用者呢?使用全局变量不失为一种方法,但这是一种最坏的方法。因此只有通过参数来传递了。试想用下面的调用语句来调用这个函数:result=CreatList(

6、head);第页共109页10.1.2建立一个单链表因为链表还未建立,实参head指针的初值应该为NULL,所以实参传递给函数形参的是一个NULL值。CreatList函数要把建好的单链表的表头地址(第一个结点的地址)传递给实参head,即它要改变head的值。但是,CreatList函数根本不能访问指针head。显然,上述调用语句中的head参数接收不到建好的单链表。然而,虽然不能直接访问head,但可以间接访问。于是,将CreatList函数的函数原型设计成如下形式:第页共109页10.1.2建立一个单链表intCreatLi

7、st(LinkNode**h);因为head是一个指向LinkNode的指针,所以参数h的类型就是一个指向LinkNode的指针的指针。只要将调用语句改为:result=CreatList(&head);就可以通过变量h间接访问到实参head,也就可以修改head的值,从而把单链表的表头地址传递给调用者。事实上,由于将head的地址传递给了形参h,因此,指针h指向了实参head。函数中的语句*h=current;第页共109页10.1.2建立一个单链表就是将第一个结点的地址赋值给指针h所指的目标对象head。图中描述了该赋值语句执

8、行后各指针的指向情况。函数CreatList建立第一个结点后的状态图第页共109页10.1.2建立一个单链表CreatList函数在建立单链表时,总是把刚生成的新结点挂在当前表尾,链表中结点数据的有序性是由输入本身决定的。如此建立的单链表又称为直接

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。