搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
代码探险家
这个屌丝很懒,什么也没留下!
关注作者
热门标签
jquery
HTML
CSS
PHP
ASP
PYTHON
GO
AI
C
C++
C#
PHOTOSHOP
UNITY
iOS
android
vue
xml
爬虫
SEO
LINUX
WINDOWS
JAVA
MFC
CEF3
CAD
NODEJS
GIT
Pyppeteer
article
热门文章
1
Python爬取今日头条热搜_python抓取今日头条热榜
2
TortoiseSVN文件夹图标不显示_toetoisesvn文件夹没有图标
3
MEION:时钟IP核与分频电路信号波形观察问题_时钟ip核可以输出任意频率吗
4
短时傅里叶变换STFT原理
5
Flutter入门教程_flutter教程
6
【机器学习】机器学习与时间序列分析的融合应用与性能优化新探索_时间序列和机器学习结合
7
网络安全的重要性及应对策略_网络安全重要性
8
Android问题笔记二十四:Studio 编译报错 The minCompileSdk (33) specified in a dependency‘s AAR metadata_one or more issues found when checking aar metadat
9
mvn install:install-file命令
10
硅谷式创业背后点滴:VC们爱听的故事_vcwomen
当前位置:
article
> 正文
数据结构与算法-栈和队列_顺序堆栈可以增删吗
作者:代码探险家 | 2024-08-13 16:10:53
赞
踩
顺序堆栈可以增删吗
一、栈
概述:
栈(stack)又称堆栈,它是
运算受限
的线性表。
其限制是仅允许在表的一端进行插入和删除操作,不允许在其它任何位置进行插入、查找删除等操作。
表中进行插入、删除操作的一端称为栈顶(top),栈顶保存的元素称为栈顶元素
,
相对的表的另一端称为栈底(bottom)。
当栈中没有数据元素时称为空栈。
向一个栈中插入元素称为进栈或入栈。
从一个栈中删除元素称为出栈或退栈。
由于栈的插入和删除操作仅在栈顶进行,后进栈的元素必定先出栈,所以又把堆栈称为后进先出表(Last In First Out,简称LIFO)
储存结构:
顺序栈:
和线性表类似,堆栈也有两种基本的存储结构,顺序存储结构和链式存储结构。
顺序栈是使用顺序存储结构实现的堆栈,既利用一组地址连续的存储单元依次存放堆栈中的数据元素。
由于堆栈是一种特殊的线性表,因此在线性表的顺序存储结构的基础上,选择线性表的一端作为栈顶即可。
根据数组操作的特性,选择数组下标大的一端,即线性表顺序存储的表尾来作为栈顶,此时入栈、出栈等操作可以在O(1)时间完成。
由于堆栈的操作都在栈顶完成,因此在顺序栈的实现中需要附设一个指针top来动态的指示栈顶元素在数组中的位置,通常top可以用栈顶元素所在数组下标来标识,top=-1时表示空栈。
链栈:
链栈即采用链表作为存储结构实现的栈。
当采用单链表存储线性表后,根据单链表的操作特性选择单链表的头作为栈顶,此时入栈、出栈等操作可以在O(1)内完成。
由于堆栈的操作只在线性表的一端进行,在这里使用带头结点的单链表或不带头结点的单链表都可以。
使用带都结点的单链表时,结点的插入和删除都在头结点之后进行。
使用不带头结点的单链表时,结点的插入和删除都在链表的首结点上进行。
二、队列
概述:
队列(queue)简称队,它和堆栈一样,也是一种运算受限的线性表。
其限制是仅允许在表的一端进行插入,而在表的另一端进行删除。
在队列中把插入数据元素的一端称为对尾(rear),删除数据元素的一端称为队首(front)。
向队尾插入元素称为进队或入队,新元素入队后成为新的对尾元素。
从队列中删除元素称为离队或出队,元素出队后,其后续元素成为新的队首元素。
由于队列的插入和删除操作分别在队尾或队首进行,每个元素必然按照进入的次序离队,也就是说先进队的元素必然先出队,所以称队列为先进先出表(First In First Out)。
生活案例:排队打饭、排队进地铁
存储结构:
顺序队列 :
方法一:使用数组作为存储结构
缺点:通过出队操作将数组弹出队列后,front之前的空间还能够再次得到吗?不能。所以使用普通数组实现队列,就再也不能使用front之前的空间了,这会导致大量的空间丢失。
方法二:使用循环数组作为存储结构
为了解决这个问题,将普通的数组换成循环的数组。在循环数组中,末尾元素的下一个元素不是数组外,而是数组的头元素,这样就能够再次使用front之前的存储空间了。
链式队列:
队列的链式存储可以使用单链表来实现。
为了操作实现方便,这里采用带头结点的单链表结构。
根据单链表的特点,选择链表的头部作为队首,链表的尾部作为队尾。
除了链表头结点需要通过一个引用来指向之外,还需要一个对链表尾结点的引用,以方便队列的入队操作。
为此一共设置两个指针,一个队首指针和一个队尾指针,队首指针指向队首元素的前一个结点,即始终指向链表空的头结点,队尾指针指向队尾元素所在的节点。
当队列为空时,队首指针与队尾指针均指向空的头结点。
双端队列deque double ended queue 通常读为 “deck”
所谓双端队列是指两端都可以进行进队和出队操作的队列,如下图所示,将队列的两端分别称为前端和后端,两端都可以入队和出队。其元素的逻辑结构仍然是线性结构
在双端队列进队时:前端进的元素排列在队列中后端元素的前面,后端进的元素排列在队列中前端进的元素的后面。在双端队列出队时,无论前端出还是后端出,先出的元素排列在后出的元素前面。
输出受限的双端队列,即一个端点允许插入和删除,另一个端点只允许插入的双端队列。
输出受限的双端队列,即一个断点允许插入和删除,另一个端点只允许删除的双端队列。
双端队列即可以用来队列操作,也可以用来实现
栈操作
(只操作一端就是了)。
声明:
本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:
https://www.wpsshop.cn/w/代码探险家/article/detail/975615
推荐阅读
article
数据结构
:
队列
_
数据结构
队列
...
好了,
队列
的
数据结构
到这里就差不多结束了,总体来说当我们有顺序表和链表的基础之后,
队列
这个
数据结构
相对来说还是非常简单的...
赞
踩
article
数据结构
:
链表
的
双
指针
技巧_双
指针
链表
...
链表
的
技巧_双
指针
链表
双
指针
链表
文章目录 一、
链表
相...
赞
踩
article
【
数据结构
】
链表
2
:
双
指针
_
一个
链表
有
几个
指针
...
单
链表
双
指针
判断
链表
是否
有
环方法一
:
哈希表方法二
:
快慢
指针
想象
有
两个
指针
,
一个
快
指针
:
每次移动两步;
一个
慢
指针
:
每次移动...
赞
踩
article
(9)
Python
数据结构
:构建高效
算法
与
金融
应用的基石_
python
金融
...
当我们谈论
数据结构
时,我们实际上是在探讨一种组织、存储和管理数据的系统方法。在编程中,
数据结构
的选择对程序的性能、可读性...
赞
踩
article
【
数据结构
】
最小
堆
_
最小
堆
数据结构
...
本文介绍了满二叉树和完全二叉树的概念,重点阐述了
最小
堆
的性质、Python中的heapq模块实现以及插入和删除操作。特别...
赞
踩
article
数据
结构
(
计算机
存储
、
组织
数据
方式)_
数据
结构
计算机
存储
、
组织
数据
方式...
数据
结构
是
计算机
存储
、
组织
数据
的方式。
数据
结构
是指相互之间存在一种或多种特定关系的
数据
元素的集合。通常情况下,精心选择的...
赞
踩
article
【
数据结构
】八大
排序
之
快速
排序
算法
...
数据结构
快速
排序
详解.内容包括:快排的简介及思想,快排代码实现的三种方式,快排的时间复杂度分析,快排的优化,快排的非递归...
赞
踩
article
【
数据结构
】
顺序
表
详解以及
实现
(C语言
实现
)_
顺序
表
的
表
示与
实现
...
存储密度高:
顺序
表
的
每一个节点都有对应
的
数据元素,没有额外开销,存储密度高访问性高:可以通过首地址然后i根据连续性找到后...
赞
踩
article
数据结构
(学习)
2024.8
.9(
双向
链表
)...
双向
链表
的创建,插入,遍历,删除
数据结构
(学习)
2024.8
.9(
双向
链表
) 今天学习的...
赞
踩
article
数据结构
--
第六天...
树是由。
数据结构
--
第六天
--
树  ...
赞
踩
article
【
数据结构
】
详解
11
道
链表
OJ
题
(万字
详解
)
_
链表
例
题
...
万字
详解
11
道
链表
OJ
题
,图文并茂,一
题
多解。
_
链表
例
题
链表
例
题
...
赞
踩
article
【
数据结构
】
哈希
表
(
也称散列
表
)
—
—
入门这一篇就够了!_
哈希
表
应用
实例...
在讲散列
表
之前,我们先回顾总结下两种最基本
数据结构
—
—
数组和链
表
的基本特点。数组:寻址容易,插入和删除元素困难;链
表
:寻...
赞
踩
article
数据结构
-查找-
哈希
表
_
哈希
表
地址
范围除数...
hash;_
哈希
表
地址
范围除数
哈希
表
地址
范围除数 1.保留除数法  ...
赞
踩
article
数据结构
:
哈希
表
_
一个
简单的
哈希
表
...
你受的苦,吃的亏,担的责,扛的罪,忍的痛,到最后都会变成光,照亮你的路。什么是
哈希
表
?
哈希
表
(Hash table,散列...
赞
踩
article
数据结构
:
哈希
表讲解_
关键码
散列值
存储
位置
...
数据结构
:
哈希
表讲解_
关键码
散列值
存储
位置
关键码
散列值
存储
位置
...
赞
踩
article
数据结构
(
Java
版)
_
java
数据结构
...
数据结构
(
Java
版)是一门研究组织数据方式的学科,它和算法是程序的基础。
数据结构
分为线性结构和非线性结构。其中,线性结...
赞
踩
article
数据结构
JAVADS
—
—
部分
栈
题目
分享 (持续
更新版
)...
让我们看看这个代码(C++ 版本)
数据结构
JAVADS
—
—
部分
栈
题目
分享 (持续
更新版
) ...
赞
踩
article
数据结构
--双
指针
与
LeetCodeHOT100
...
在编程和算法设计中,双
指针
技术是一种常用且强大的工具。它涉及使用两个
指针
在
数据结构
上进行操作,以解决特定的问题。双
指针
技...
赞
踩
article
数据结构
(
C++
版)_
数据结构
c++
版...
本文详细介绍了单链表、双链表和双循环链表的
数据结构
、节点组成、操作方法
(
如插入、删除和遍历)以及它们各自的特点,以C语言...
赞
踩
article
【
数据结构
】
队列
实现
的
5种
方式
及
时间
复杂度
对比分析...
1. 使用数组
实现
一个简单
的
队列
/** * =========================== *
队列
首部 0...
赞
踩
相关标签
数据结构
链表
c++
算法
java
leetcode
python
pip
排序算法
c语言
快速排序
学习
linux
开发语言