第三章栈和队列
- 格式:ppt
- 大小:1.41 MB
- 文档页数:59
第三章1.栈的定义与基本操作:1.概念:栈是一种特殊的线性表(操作限定在表的一端进行的线性表)栈顶:允许进行插入,删除等操作的一端栈底:固定的,不允许进行插入和删除的一端入栈:插入一个新元素出栈(退栈):从栈中删除一个元素空栈:栈中没有数据元素时特点:先进的元素后出,后进的元素先出2.栈的应用:1.撤销操作2.在函数调用时保存断点信息3.栈的基本操作:初始化,求栈的长度,判断栈是否为空,入栈操作,出栈操作,取栈顶元素(书上P48面)栈的顺序存储结构概念:栈是特殊的线性表,因此线性表的存储结构对于栈也是适用的栈的两种存储结构:顺序存储结构和链式存储结构1.顺序栈的定义:与顺序表的定义类似,顺序栈是指用一片连续的存储空间存储数据元素的栈。
实现形式:采用数组的形式,把栈底设在数组的底端,同时用一个记录栈顶位置的整型变量top(栈顶指针)存储栈顶元素的位置2.顺序栈的三种存储池状态:空栈,满栈,非空非满栈3.顺序栈的溢出问题:栈是一个动态结构,而数组的空间大小有限,是静态的:当处于满栈状态时,再进行进栈操作会产生溢出错误(上溢出),当处于空栈状态时,再进行出栈操作时也会产生溢出错误(下溢出).解决方法:在执行进出栈之前,应该进行溢出判断4.顺序栈的基本操作初始化操作,求顺序栈的长度,判断顺序栈是否为空,入栈操作,出栈操作(书上P51面,自己看)栈的链式存储结构栈的顺序存储结构是一种静态的存储结构,必须确定存储空间的大小,太大会造成存储空间的浪费,太小又会因栈满而产生溢出。
实际应用中,如果难以估计栈的最大容量,最好采用栈的链式存储结构(可自行略过)1.链栈的定义:概念:采用链式存储结构的栈。
链栈通常采用单链表表示,其结点结构与单链表的结构一样,每个数据元素都存放在链表结点的数据域中,在指针域中存放直接后继结点的地址,栈底结点的指针域为空(NULL)【不想看的,还是要看看,作个了解】链栈的特点:由于栈的链接存储结构,是一种动态的存储结构,其结点是动态产生的,因此它不会存在满栈状态,也不会发生上溢出错误2.链栈的基本操作:初始化链栈和清空链栈的操作,判断链栈是否为空,入栈操作,出栈操作(书上P54面,并非不是重点,自己看!!!)队列的定义与基本操作队列的定义:1.由于排列的队列是单行的,因此每个元素之间是“一对一”的关系,即它是一种线性结构2.排列的队列是一种特殊的线性表,插入元素的操作(入队)只能在线性表的一端完成,而删除元素的操作(出队)只能在线性表的另一端完成。
第3章数据结构栈和队列数据结构是计算机科学中重要的基础知识之一,它是用于组织和管理数据的方法。
栈和队列是其中两种常见的数据结构,它们分别以后进先出(Last In First Out,LIFO)和先进先出(First In First Out,FIFO)的方式操作数据。
本文将详细介绍栈和队列的概念、特点以及应用。
一、栈栈是一种限制仅在表尾进行插入和删除操作的线性表。
插入和删除操作称为入栈和出栈,即数据项的入栈相当于把数据项放入栈顶,而数据项的出栈相当于从栈顶移除数据项。
栈具有后进先出的特点,即后入栈的数据项先出栈,而最先入栈的数据项最后出栈。
类比现实生活中的例子就是一叠盘子,我们只能从最上面取盘子或放盘子。
栈的实现方式有两种:基于数组和基于链表。
基于数组的栈实现相对简单,通过一个数组和一个指向栈顶的指针来完成栈的操作。
基于链表的栈实现则需要定义一个节点结构,每个节点包含一个数据域和一个指向下一个节点的指针,通过头指针来操作栈。
栈的应用非常广泛,比如浏览器中的返回功能就是通过栈来实现的。
当我们点击浏览器的返回按钮时,当前页面会入栈,点击前进按钮时,当前页面会出栈。
在编程中,栈也被广泛应用,比如函数调用栈用于存储函数调用的上下文信息。
二、队列队列是一种限制仅在表头删除和在表尾插入的线性表。
表头删除操作称为出队列,表尾插入操作称为入队列。
和栈不同,队列采用先进先出的原则,即最先入队列的元素最先出队列。
队列的实现方式也有两种:基于数组和基于链表。
基于数组的队列实现和栈类似,通过一个数组和两个指针(一个指向队头,一个指向队尾)来完成队列的操作。
基于链表的队列实现则需要定义一个节点结构,每个节点包含一个数据域和一个指向下一个节点的指针,通过头指针和尾指针来操作队列。
队列同样具有广泛的应用,比如操作系统中的进程调度就是通过队列来实现的。
CPU会按照进程到达的顺序,依次从队列中取出进程进行执行。
在编程中,队列也常用于解决一些需要按顺序处理数据的问题。