数据结构:栈和队列

目录

1.栈和队列

2.栈(seqstack)

3.顺序栈的实现(以空增栈为例)

[4.链式栈的实现 【写法同单向链表】](#4.链式栈的实现 【写法同单向链表】)


1.栈和队列

1.概念:

栈:一种先进后出,后进先出的数据结构

队列:一种先进先出,后进后出的数据结构

2.栈、队烈和表的区别:

栈和队列是一种特殊的表状结构

栈和队列只能在指定的位置插入和删除

链表可以在任意位置插入和删除

3.应用:栈对应深度优先;队列对应广度优先

2.栈(seqstack)

1.基本概念

1.栈顶:允许入栈和出栈的一端称为栈顶

2.栈底:不允许入栈和出栈的一端称为栈底

3.栈针:指向栈顶位置的指针或下标

1.增栈:栈向高地址增长

2.减栈:栈向低地址增长

3.空栈:栈针指向入栈位置,称为空栈

4.满栈:栈针指向栈顶位置,称为满栈

4.栈的分类:

空增栈

满增栈

空减栈

满减栈

5.入栈:将数据插入栈顶元素的位置,也称压栈,push

6.出栈:将数据从栈顶元素位置取出,也称弹栈,pop

7.顺序栈【用得最多】:一段连续存储的栈空间

8.链式栈(Chain stack):一种基于单链表实现的栈结构,采用链式存储方式。

3.顺序栈的实现(以空增栈为例)

1.概念:利用顺序存储结构实现的栈,通过连续地址的数组存储数据元素,栈底固定在数组起始位置,栈顶位置由整型变量top动态记录。其结构包含数组dataMAXSIZE栈顶指针top,初始状态top值为0或-1,分别对应不同实现方案中空栈的判定条件。栈底元素对应数组下标较小端,栈顶元素为数组末端,入栈时指针后移,出栈时指针前移。

2.核心操作包括初始化、判空、判满、进栈、出栈和读取栈顶元素、销毁

①数据类型定义

示意图


②初始化


③判空


④判满


⑤进栈


⑥出栈

注意:不必清零,因为入栈会覆盖
⑦销毁

注意:销毁要先销毁pData指向的数组,再销毁SeqStack,顺序颠倒则找不到数组,会发生内存泄漏
练习

4.链式栈的实现(Chain stack) 【本质是头插法管理的单向链表】

1.概念:链式栈是一种基于单链表实现的栈结构,采用链式存储方式,通过动态内存分配实现元素的插入(入栈)和删除(出栈)操作。其元素以节点形式存储,每个节点包含数据域和指向下一节点的指针域,通过栈顶节点的指针实现操作管理,遵循后进先出的数据访问原则。

2.核心操作包括初始化、判空、判满、进栈、出栈和读取栈顶元素、销毁

①数据类型定义


②初始化


③判空

④进栈


⑤出栈


⑥销毁


练习

结果

相关推荐
库玛西1 小时前
现代 C++ 智能指针全景指南:从 RAII 思想到工业级实践
c语言·开发语言·c++·笔记·面试
AC赳赳老秦1 小时前
风控岗应用:OpenClaw 采集公开司法与经营异常数据,自动生成企业风险评估报告
大数据·c语言·数据库·人工智能·python·php·openclaw
liulilittle2 小时前
无锁并发容器的设计与实现原理
开发语言·c++·set·map·并发·无锁·lock-free
朋克洛德的码农2 小时前
Go并发-sync包四剑客:Mutex、RWMutex、WaitGroup、Once-从入门到原理
开发语言·后端·golang
qeen872 小时前
【数据结构】自平衡二叉搜索树各种旋转算法原理解析及AVL树的C++实现
数据结构·c++·算法
程序员与背包客_CoderZ3 小时前
Linux D-Bus通信协议详解:从入门到C/C++编码实战
linux·服务器·c语言·c++·嵌入式硬件·嵌入式软件·dbus
淼澄研学3 小时前
Kimi API黑产倒卖技术解析与Python合规接入指南
开发语言·网络·python
冻柠檬飞冰走茶3 小时前
PTA基础编程题目集 7-35有理数均值(C++语言实现)
开发语言·数据结构·c++·算法·均值算法
wangchen_03 小时前
C++正则表达式
开发语言·c++·正则表达式
何以解忧,唯有..3 小时前
Python 元组(tuple)详解:使用、遍历与排序
开发语言·python