数据结构知识整理5栈和队列

本文介绍了栈和队列这两种重要的数据结构。栈遵循"后进先出"原则,常用于二叉树和递归算法,可以分为顺序栈和链栈。队列则遵循"先进先出"原则,应用广泛,包括操作系统资源分配和排队论,有顺序队和链队等实现方式。此外,还提到了双端队列和其特例——两个栈底相邻的栈。
摘要由CSDN通过智能技术生成

栈和队列

从数据结果的定义看,栈和队列也是一种线性表。其与线性表不同之处在于栈和队列的相关运算具有特殊性,只是线性表相关运算的一个子集。一般线性表插入、删除运算不受限制,而栈和队列上的插入、删除运算均受某种特殊限制。

栈和队列也称作操作受限的线性表。

栈是最常用的和最重要的数据结构之一,用途十分广泛(如二叉树、递归算法转非递归算法)。

栈(后进先出表)是一种只能在一端进行插入或删除操作的线性表。表中允许进行插入、删除操作的一端称为栈顶。栈顶的当前位置是动态的,由一个称为栈顶指针的位置指示器指示。表的另一端称为栈底。栈中没有数据元素时,称为空栈。栈的插入操作通称压栈进栈,栈的删除操作通称退栈出栈

栈的主要特点:“后进先出”,即后进栈的元素先弹出。每次进栈的数据元素都放在当前栈顶元素之前成为新的栈顶元素,每次出栈的数据元素都是当前栈顶元素。

ADT Stack

{

数据对象:D={ai|1≤i≤nn≥0ai 为ElemType类型}//ElemType是自定义的类型标识符

数据关系:R={< ai,ai+1>| ai,ai+1∈D,i=1,…,n-1}

基本运算:初始化,销毁,判断空栈,近栈,出栈,取栈顶元素

}

采用顺序存储的栈称为顺序栈

采用链式存储的栈称为链栈。优点:不存在栈满上溢的情况。

队列

队列也有广泛的应用,特别是在操作系统资源分配和排队论中,大量地使用队列。

队列(先进先出表)简称,仅允许在表的一端进行插入,而在表的另一端进行删除。把进行插入的一端称作队尾(rear,进行删除的一端称作队头队首(front。向队列中插入新元素称为进队入队,新元素进队后就成为新的队尾元素;从队列中删除元素称为出队离队,元素出队后,其直接后继元素就成为队首元素。

队列的主要特点:插入和删除分别在各自一端进行,每个元素必然按照进队次序出队。

front指针指向队首元素(实际是队首前一个位置),rear指向队尾位置(正好是队尾元素)

ADT Queue

{

数据对象:D={ai|1≤i≤nn≥0ai 为ElemType类型}//ElemType是自定义的类型标识符

数据关系:R={< ai,ai+1>| ai,ai+1∈D,i=1,…,n-1}

基本运算:初始化,销毁,判断空队,近队,出队

}

采用顺序存储的队列称为顺序队。将数组前后连接形成环形顺序表成为环形队列循环队列)。

采用链式存储的队列称为链队

双端队列:两端都可以进行进队和出队操作的队列,将队列两端称为前端和后端。

输入受限的双端队列,一端只允许出;输出受限的双端队列,一端只允许进。

若限定双端队列只能哪里进哪里出,就蜕变成两个栈底相邻的栈了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值