资源描述
,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,*,浅谈栈和队列,摘要,栈和队列是常见的数据结构,是两种非常重要的线性结构,也都是线性表,它们是操作受限的的线性表,有顺序栈、链式栈、链式队列和循环队列等形式。从数据结构角度看,栈和队列是受限的线性表,栈和队列的数据元素具有单一的前驱和后继的线性关系。他们广泛应用在操作系统和编译程序等各种软件系统中。,论文提纲,1,栈,1,2,队列,2,3,栈的队列的应用区别,3,4,栈和队列的发展前景,4,结束,引言,在对高级语言编写的源程序进行编译时类似于表达式括号匹配问题就是用栈来解决的;计算机系统在处理子程序之间的调用关系是,用栈来保存处理执行过程中的调用次序。现实世界中有许多问题可以用队列描述。例如,对顾客服务部门的工作往往是按照队列方式进行的,这类系统乘坐排队系统。程序设计中,也经常使用队列记录需按照先进先出方式处理的数据,例如键盘缓冲区,操作系统中的作业调度等。,返回到总目录,1,栈,1.1,栈的概念,栈(,stack,)是一种特殊的线性表。作为一个简单的例子,可以把食堂里冼净的一摞碗看作一个栈。在通常情况下,最先冼净的碗总是放在最底下,后冼净的碗总是摞在最顶上。而在使用时,却是从顶上拿取,也就是说,后冼的先取用,后摞上的先取用。如果我们把冼净的碗“摞上”称为进栈(压栈),把“取用碗”称为出栈(弹出),那么上例的特点是:后进栈的先出栈。然而,摞起来的碗实际上是一个线性表,只不过“进栈”和“出栈”都在最顶上进行,或者说,元素的插入和删除操作都是在线性表的一端进行而已。,栈是一种特殊的线性表。其特殊性在于限定插入和删除数据元素的操作只能在线性表的一端进行。,插入元素又称为进栈,删除元素又称为出栈。允许进行插入和删除操作的一端称为栈顶(,top,),另一端称为栈(,bottom,)。处于栈顶位置的数据元素称为栈顶元素,处于栈底位置的数据元素称为栈底元素。不含任何数据元素的栈称为空栈。,1.2,栈的基本操作,栈除了在栈顶进行进栈与出栈外,还有初始化、判空等操作,常用的基本操作有:,(,1,)初始化栈,InitStack(S),。其作用是构造一个空栈,S,。,(,2,)判断栈空,EmptyStack(S),。其作用是判断是否是空栈,若栈,S,为空,则返回,1,;否则返回,0,。,(,3,)进栈,Push(S,x),。其作用是当栈不为满时,将数据元素,x,插入栈,S,中,使其为栈,S,的栈顶元素。,(,4,)出栈,Pop(S,x),。其作用是当栈,S,不为空时,将栈顶元素赋给,x,,并从栈,S,中删除当前栈顶元素。,(,5,)取栈顶元素,GetTop(S,x),。其作用是当栈,S,不为空时,将栈顶元素赋给,x,并返回,操作结果只是读取栈顶元素,栈,S,不发生变化。,由于栈是操作受限制的线性表,因此与线性表类似,栈也有两种存储结构,即顺序存储结构和链式存储结构。,顺序栈,栈的顺序存储结构称为顺序栈。类似于顺序表的类型定义,顺序栈是用一个预设的足够长度的一维数组和一个记录栈顶元素位置的变量来实现。,链栈,用链式存储结构实现的栈称为链栈,3,,链栈与不带头结点单链表组织形式相似,因为栈的主要操作是在栈顶进行插入与删除操作,显然将链表的第一个结点作为栈顶是最方便的,因此,没有必要如单链表那样为了操作方便附加一个头结点。,链栈的基本操作实现也有初始化栈操作,判断栈空操作,进栈操作,出栈操作,取栈顶元素。,。,1.3,栈的分类,2.1,队列的概念,在日常生活中的排队上车,排队的规则是不允许“插队”。后来的人需站在队尾,每次总是队头先上车。这种先进先出的规则应用在数据结构中称为队列(,queue,),队列又称为先进先出(,first in first out,)的线性表,简称,FIFO,表。,队列也是一种特殊的线性表,4,。与栈不同,其插入操作限定在线性表的一端进行,删除操作限定在线性表的另一端进行,队列插入操作又称为入队,删除操作又称为出队,允许进行插入的一端称为队尾(,rear,),允许进行删除的一端称为队头(,front,)。处于队头位置的数据元素称为队头元素。处于队尾位置的数据元素称为队尾元素。不含任何数据元素的队列称为空队,。,2,队列,2.2 队列的基本操作,队列的除了在队头进行出队和队尾进行入队外,还有初始化、判空等操作,常用的基本操作有:,(1)初始化队列InitQueue(Q)。其作用是构造一个空队列Q。,(2)判断队列空EmptyQueue(Q)。其作用是判断是否是空队列,若队列Q为空,则返回1;否则返回0。,(3)入队EnQueue(Q,x)。其作用是当队列不为满时,将数据元素x插入队列Q的队尾,使其为队列Q的队尾元素。,(4)出队DeQueue(Q,x)。其作用是当队列Q不为空时,将队头元素赋给x,并从队列Q中删除当前队头元素,而其后继元素成为队头元素。,(5)取队头元素GetFront(Q,x)。其作用是当队列Q不为空时,将队头元素赋给x并返回,操作结果只是读取队头元素,队列Q不发生变化。,UGS,由于队列是操作受限制的线性表,因此与线性表类似,队列也有两种存储结构,即顺序存储结构和链式存储结构。,队列的顺序存储结构需要使用一个数组和两个整型变量来实现,利用数组来顺序存储队列中的所有元素,利用两个整型变量来分别存储队首元素和队尾元素的下标位置,分别称它们为队首指针和队尾指针。,队列也是操作受限的线性表。限定在队尾处插入,而在队头处删除。,队列是先进先出(,First In First Oout,,,FIFO,)的线性表。,UGS,约定队列的头指针front指向队列头元素前一位置,而为指针rear指向队尾元素自身。循环队列是重要数据结构,即指队列的顺序存储结构。凡涉及队头或队尾指针的修改都要对MAXSIZE求模:,front=(front+1)%MAXSIZE;,rear=(rear+1)%MAXSIZE;,循环队列,队空的判定条件:rear=front;,循环队列,队满的的判定条件是:(rear+1)%MAXSIZE=front;,队列的链式存储结构称为链队列。通常设附加头结点,并设队头指针指向头结点,即指向第一个数据结点的前一位置。队列的尾指针指向终端结点。,链队列的基本操作,也是单链表操作的简化,插入只考虑在链队列的尾部进行,删除只考虑在链队列的头部进行,其时间复杂度均为O(1)。,UGS,1.,队列先进先出,栈先进后出。,2.,对插入和删除操作的,限定,。栈是限定只能在表的一端进行插入和删除操作的线性表。队列是限定只能在表的一端进行插入和在另一端进行删除操作的线性表。从,数据结构,的角度看,它们都是线性结构,即数据元素之间的关系相同。但它们是完全不同的数据类型。除了它们各自的基本操作集不同外,主要区别是对插入和删除操作的,限定,。栈和队列是在程序设计中被广泛使用的两种线性数据结构,它们的特点在于基本操作的特殊性,栈必须按,后进先出,的规则进行操作,而队列必须按,先进先出,的规则进行操作。和线性表相比,它们的插入和删除操作受更多的约束和限定,故又称为限定性的线性表结构。,3,栈和队列的应用区别,UGS,3.,遍历数据速度不同。栈只能从头部取数据 也就最先放入的需要遍历整个栈最后才能取出来,而且在遍历数据的时候还得为数据开辟临时空间,保持数据在遍历前的一致性队列怎不同,他基于地址指针进行遍历,而且可以从头或尾部开始遍历,但不能同时遍历,无需开辟临时空间,因为在遍历的过程中不影像数据结构,速度要快的多。栈(,Stack,)是限定只能在表的一端进行插入和删除操作的线性表。队列(,Queue,)是限定只能在表的一端进行插入和在另一端进行删除操作的线性表。从,数据结构,的角度看,它们都是线性结构,即数据元素之间的关系相同。但它们是完全不同的数据类型。除了它们各自的基本操作集不同外,主要区别是对插入和删除操作的,限定,。栈和队列是在程序设计中被广泛使用的两种线性数据结构,它们的特点在于基本操作的特殊性,栈必须按,后进先出,的规则进行操作,而队列必须按,先进先出,的规则进行操作。和线性表相比,它们的插入和删除操作受更多的约束和限定,故又称为限定性的线性表结构,。,UGS,栈和队列在各类系统中应用广泛。堆栈技术被广泛应用于编译软件和程序设计,操作系统、事务管理中广泛应用了队列技术。讨论堆栈与队列的结构特征与实现特点,有重要意义。,4,栈和队列的发展前景,UGS,目前,国内外关于数据结构中栈和队列这两种限定性线性表的研究都只局限于传统的单栈、单循环队列、双端栈、链栈等存储结构,在实际的课堂教学中也只涉及到这些内容,这些存储结构大多事先开辟好定量存储空间,导致了在具体应用中存储空间不同程度的浪费,以往文献未就此问题做深入探究以求解决。所以,关于栈和队列我们还有许多要改善的和提高的,只有这样,才能让操作程序更高效化,便捷化。,UGS,谢谢!,再见!,UGS,人有了知识,就会具备各种分析能力,,明辨是非的能力。,所以我们要勤恳读书,广泛阅读,,古人说“书中自有黄金屋。,”通过阅读科技书籍,我们能丰富知识,,培养逻辑思维能力;,通过阅读文学作品,我们能提高文学鉴赏水平,,培养文学情趣;,通过阅读报刊,我们能增长见识,扩大自己的知识面。,有许多书籍还能培养我们的道德情操,,给我们巨大的精神力量,,鼓舞我们前进,。,
展开阅读全文