网站大量收购独家精品文档,联系QQ:2885784924

C语言程序设计(第二版) 教学课件 作者 刘加海 朱云其第十二章 第十二章.ppt

C语言程序设计(第二版) 教学课件 作者 刘加海 朱云其第十二章 第十二章.ppt

  1. 1、本文档共35页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Company Logo LOGO 第12章 链表及其应用 本章重点 §链表的定义 §栈的基本操作的实现 §队列的基本操作的实现 本章难点 §链表中栈的应用。 §链表中队列的应用。 §链表的插入、删除、查找和排序 12.1 链表的定义 链表中的每个结点,除了要有存放数据本身的数据域外,至少还需要有一个指针域,用它来存放下一个结点元素的地址,以便通过这些指针把各结点连接起来,从而形成如图12.1所示的链表。 图12.1 链表 每个链表都用一个“头指针”来指向链表的开始结点,链表最后一个结点的指针域不再指向其他结点,就置成\0( NULL)值,标志着链表的结束。 单向链表的结构体结点的类型定义如下: struct node { int i; struct node *next; }; 单向链表的建立,需要用到下面两个内存管理函数。 1)void *malloc(unsigned size ) 在具体应用中为 p=(struct node *)malloc(sizeof(struct node)) 2)void free(void *ptr) 12.2 堆 栈 堆栈是一端固定,只允许在另一端进行插入和删除的特殊的线性表,如图12.2所示。允许插入和删除的一端称为栈顶,固定的一端称为栈底。当堆栈中没有任何元素时称为空栈。向堆栈中插入元素称为入栈,删除元素称为出栈。 图12.2 堆栈 【例12.1】 从键盘输入一串字符,以堆栈的形式存放,当输入*时结束,然后逆序输出。 分析:堆栈是先进后出的存储结构,在堆栈建立过程中,头指针是不断在移动的。 堆栈的建立过程如下(见表12.3)。 1)链表未建立时,结点数为0,头指针为空,即n=0, head=NULL;如图12.3所示。 2)用p指针申请空间,产生第一个存储单元,读入数据,如图12.4所示。 图12.3 当头指针为空时 图12.4 动态分配一个结点 3)读入第一个数据,存入第一个存储单元,即p-i=x1;将第一个存储单元链接在头指针后面,即p-next=head;head=p;如图12.5所示。 图12.5 头指针指向P所指的存储单元 4)申请第二个存储单元,读入数据,p-i=x2;将第二个结点链接到x1的前面,头指针head的后面,完成语句p-next=head;head=p;如图12.6所示。接下去重复步骤2)~4)。 图12.6 第二个结点链入堆栈 编辑源程序代码12-1.c: 点击查看代码 堆栈一般具有如下基本操作: 1)置空栈。 清空栈的内容,准备存放数据。 2)入栈。 在栈顶插入一个元素,栈顶位置加1。 3)出栈。 删除原栈顶元素,栈顶位置减1。 4)取栈顶元素。 返回栈顶元素,栈顶位置不变。 5)栈空判断。 判断栈是否为空,一般用于出栈或取栈顶元素。 12.3 队 列 队列是一种先进先出的存储结构,它是允许在队列的一端插入、在另一端删除的特殊线性表。允许插入的一端称为队尾,允许删除的一端称为队首,如图12.7所示。a1,a2,…,an-1,an依次插入队尾,先插入的元素先退出队列,因此又称为先进先出线性表。 图12.7 队列 【例12.2】 建立一个队例,用来存储输入的字符,当输入#符号时结束,然后输出队列中的数据。 分析:队列是先进先出的存储结构,在队列的建立过程中,头指针不动,而尾指针不断指向新产生的结点。 队列的建立过程:在队列的建立过程中,所用到的有头指针head、尾指针rear和当前指针p,尾指针rear始终指向队列中最后的结点。 1)链表未建立时,结点数为0,头指针为空,即n=0, head=NULL; 如图12.8所示。 2)p指针申请第一个存储单元,读入数据,如图12.9所示。 图12.8 当头指针为空时 图12.9 动态分配一个结点 3)将第一个数据读入,并将数据存入第一个存储单元,即p-i=x1;将第一个存储单元链接到头指针的后面,即p-next=head;head=p;rear=p;如图12.10所示。 图12.10 头指针指向p所指的存储单元 4)申请第二个存储单元,读入数据并赋值,p-i=x2;将第二个数据链接到结点x1后面,所用到语句为rear-next=p;把尾指针后移到当前指针rear=p;如图12.11所示。 图12.11 第二个结点链入队列 5)申请第三个存储单元的空间,读入第三个数据,然后给结点赋值,重复步骤2)~4)。 注意:在队列

您可能关注的文档

文档评论(0)

带头大哥 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档