浅谈栈和队列_第1页
浅谈栈和队列_第2页
浅谈栈和队列_第3页
浅谈栈和队列_第4页
浅谈栈和队列_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

浅谈栈和队列

摘要栈和队列是常见的数据结构,是两种非常重要的线性结构,也都是线性表,它们是操作受限的的线性表,有顺序栈、链式栈、链式队列和循环队列等形式。从数据结构角度看,栈和队列是受限的线性表,栈和队列的数据元素具有单一的前驱和后继的线性关系。他们广泛应用在操作系统和编译程序等各种软件系统中。

论文提纲1栈12队列23栈的队列的应用区别34栈和队列的发展前景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不发生变化。由于栈是操作受限制的线性表,因此与线性表类似,栈也有两种存储结构,即顺序存储结构和链式存储结构。1.3.1顺序栈栈的顺序存储结构称为顺序栈。类似于顺序表的类型定义,顺序栈是用一个预设的足够长度的一维数组和一个记录栈顶元素位置的变量来实现。1.3.2链栈用链式存储结构实现的栈称为链栈[3],链栈与不带头结点单链表组织形式相似,因为栈的主要操作是在栈顶进行插入与删除操作,显然将链表的第一个结点作为栈顶是最方便的,因此,没有必要如单链表那样为了操作方便附加一个头结点。链栈的基本操作实现也有初始化栈操作,判断栈空操作,进栈操作,出栈操作,取栈顶元素。

。1.3栈的分类2.1队列的概念在日常生活中的排队上车,排队的规则是不允许“插队”。后来的人需站在队尾,每次总是队头先上车。这种先进先出的规则应用在数据结构中称为队列(queue),队列又称为先进先出(firstinfirstout)的线性表,简称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由于队列是操作受限制的线性表,因此与线性表类似,队列也有两种存储结构,即顺序存储结构和链式存储结构。队列的顺序存储结构需要使用一个数组和两个整型变量来实现,利用数组来顺序存储队列中的所有元素,利用两个整型变量来分别存储队首元素和队尾元素的下标位置,分别称它们为队首指针和队尾指针。

队列也是操作受限的线性表。限定在队尾处插入,而在队头处删除。队列是先进先出(FirstInFirstOout,FIFO)的线性表。UGS

约定队列的头指针front指向队列头元素前一位置,而为指针rear指向队尾元素自身。循环队列是重要数据结构,即指队列的顺序存储结构。凡涉及队头或队尾指针的修改都要对MAXSIZE求模:front=(front+1)%MAXSIZE;rear=(rear+1)%MAXSIZE;

循环队列,队空的判定条件:rear==front;循环队列,队满的的判定条件是:(rear+1)%MAXSIZE==front;

队列的链式存储结构称为链队列。通常设附加头结点,并设队头指针指向头结点,即指向第一个数据结点的前一位置。队列的尾指针指向终端结点。链队列的基本操作,也是单链表操作的简化,插入只考虑在链队列的尾部进行,删除只考虑在链队列的头部进行,其时间复杂度均为O(1)。UGS1.队列先进先出,栈先进后出。

2.对插入和删除操作的"限定"。栈是限定只能在表的一端进行插入和删除操作的线性表。队列是限定只能在表的一端进行插入和在另一端进行删除操作的线性表。从"数据结构"的角度看,它们都是线性结构,即数据元素之间的关系相同。但它们是完全不同的数据类型。除了它们各自的基本操作集不同外,主要区别是对插入和删除操作的"限定"。栈和队列是在程序设计中被广泛使用的两种线性数据结构,它们的特点在于基本操作的特殊性,栈必须按"后进先出"的规则进行操作,而队列必须按"先进先出"的规则进行操作。和线性表相比,它们的插入和删除操作受更多的约束和限定,故又称为限定性的线性表结构。

3栈和队列的应用区别UGS3.遍历数据速度不同。栈只能从头部取数据也就最先放入的需要遍历整个栈最后才能取出来,而且在遍历数据的时候还得为数据开辟临时空间,保持数据在遍历前的一致性队列怎不同,他基于地址指针进行遍历,而且可以从头或尾部开始遍历,但不能同时遍历,无需开辟临时空间,因为在遍历的过程中不影像数据结构,速度要快的多。栈(Stack)是限定只能在表的一端进行插入和删除操作的线性表。队列(Queue)是限定只能在表的一端进行插入和在另一端进行删除操作的线性表。从"数据结构"的角度看,它们都是线性结构,即数据元素之间的关系相同。但它们是完全不同的数据类型。除了它们各自的基本操作集不同外,主要区别是对插入和删除操作的"限定"。栈和队列是在程序设计中被广泛使用的两种线性数据结构,它们的特点在于基本操作的特殊性,栈必须按"后进先出"的规则进行操作,而队列必须按"先进先出"的规则进行操作。和线性表相比,它们的插入和删除操作受更多的约束和限定,故又称为限定性的线性表结构。UGS栈和队列在各类系统中应用广泛。堆栈技术被广泛应用于编译软件和程序设计,操作系统、事务管理中广泛应用了队列技术。讨论堆栈与队列的结构特征与实现特点,有重要意义。

4栈和队列的发展前景

UGS目前,国内外关于数据结构中栈和队列这两种

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论