- 1、本文档共35页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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)。 注意:在队列
您可能关注的文档
- C语言程序设计( 第六版) 高职计算机大类专业基础课 董汉丽 第2章 数据类型表达式及其运算.ppt
- C语言程序设计( 第六版) 高职计算机大类专业基础课 董汉丽 第3章 顺序结构程序设计.ppt
- C语言程序设计( 第六版) 高职计算机大类专业基础课 董汉丽 第4章 选择结构程序设计.ppt
- C语言程序设计( 第六版) 高职计算机大类专业基础课 董汉丽 第5章 循环结构程序设计.ppt
- C语言程序设计( 第六版) 高职计算机大类专业基础课 董汉丽 第6章 数组和指向数组的指针.ppt
- C语言程序设计( 第六版) 高职计算机大类专业基础课 董汉丽 第7章 函数与指针.ppt
- C语言程序设计( 第六版) 高职计算机大类专业基础课 董汉丽 第8章 结构体和共用体.ppt
- C语言程序设计( 第六版) 高职计算机大类专业基础课 董汉丽 第9章 文件.ppt
- C语言程序设计( 第六版) 高职计算机大类专业基础课 董汉丽 第10章 C语言屏幕操作函数及应用.ppt
- C语言程序设计( 第六版) 高职计算机大类专业基础课 董汉丽 目录.ppt
- 设计师的总结.pptx
- 鄂教版八年级语文学科下册教学计划.pptx
- 解析卷-鲁教版(五四制)7年级数学下册期末测试卷带答案详解(夺分金卷).docx
- 解析卷鲁教版(五四制)7年级数学下册期末试题附参考答案详解【黄金题型】.docx
- 河北省南宫市奋飞中学2025届中考历史全真模拟试题含解析.doc
- 镇江市重点中学2025届十校联考最后历史试题含解析.doc
- 湖北省武汉市硚口区2025届中考历史押题卷含解析.doc
- 福建省龙岩院附属中学2025届十校联考最后历史试题含解析.doc
- 云南省普洱市市级名校2025届中考押题历史预测卷含解析.doc
- 陕西省西安市经开区2025届中考历史押题试卷含解析.doc
文档评论(0)