news 2026/4/27 9:20:14

基础数据结构——栈和队列

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基础数据结构——栈和队列

该篇内容来自作者观看b站青岛大学王卓老师的数据结构与算法基础课的个人笔记https://space.bilibili.com/40323036?spm_id_from=333.788.b_765f7570696e666f.2

栈和队列

特点:

栈:

具有“先进后出”,”后进先出的特性

队列:

具有“先进先出” “后进后出”的特性

只能限定在表的“端点”进行操作的线性表

栈的定义和特点:

栈 是 仅在表尾进行插入和删除的线性表

表尾称作栈顶;表头称作栈尾

插入到栈顶,称为入栈 压入 Push

从栈顶删除最后一个元素,称为出栈 弹出 Pop

栈和一般线性表的不同

仅在于运算规则不同

队列的定义和特点:

队列 是 在一端插入,在另一端删除的线性表,具有”先进先出“的特点

插入的操作称为”入队”,删除的操作称为“出队”

队列的相关概念

栈的表示和实现:

栈是一种线性表,所以有顺序存储和链式存储,即顺序栈链栈

顺序栈的表示和实现:

创建栈:

top指针表示栈顶的上一位

base指针表示栈底

stacksize表示栈可使用的最大容量

顺序栈的建立:

判断是否为空栈:

看top==base

栈满:

看top-base==stacsize

当栈已经满了,仍插入元素,导致溢出,称为上溢

当栈已经空了,仍删除元素,导致溢出,称为下溢

初始化栈:

入栈和出栈:

入栈:

1.将元素存入栈顶

2.栈顶指针后移一位

出栈:

1.栈顶指针前移一位

2.取出栈顶元素

栈的其他操作:

链栈的表示和实现:

创建:

这里指针的方向与一般的链表方向相反,后入栈的元素指向先入栈的元素,方便操作

入栈和出栈:

入栈:

1.生成新结点

2.将新结点数据域置e

3.新结点插入栈顶

4.修改栈顶指针

出栈:

1.将栈顶数据置e

2.临时保存栈顶结点

3.修改栈顶指针

4.释放临时指针,即原栈顶

取栈顶元素:

队列的表示和实现:

顺序队的表示和实现:

初始化:

队头队尾指针指向0

队空和队满的判断方法:

队空:出队时队头指针不断后移,最终两指针会相遇

q.front=q.rear;

队满:

因为队满和队空,一般情况下队尾指针都会和队头指针相遇,所以需要用别的表示方式表示队满情况。

1.另外设计一个变量,表示队列元素个数

2.少用一个元素空间

(rear+1)%MAXQSIZE==front;

预留一个空间,这时候如果执行入队操作,先进行(rear+1)%MAXQSIZE==front;

就能够得到队满的情况,如果执行出队操作,front指针后移,取模不为0,队不满

入队:

在执行过程,如果队列已经满了,队头的元素出队后,后面无法继续入队,而此时的队列却不为满,这将造成内存浪费,称为“假溢出”

假溢出解决办法:循环队列

利用模运算,当队尾指针+1对队列长度取模为0时,即队尾指针指向最大长度,赋值为0即可让尾指针回到队头

出队:

循环取模,队头到最大长度下标可以自动归0

取队头元素:

在初始化时,base指向new出来的数组空间的首地址,可以当成数组用

注:数组名,本质就是一个不能改变的指针;指针,本质就是一个能改变的数组名。

销毁队列:

链队的表示和实现:

指针变化情况

创建:

front指针为头结点

初始化:

入队和出队:

销毁链队:

取头结点元素:

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/27 9:12:47

别卷AI提示词了,把AI装进Skills工作流才是分水岭

最近很多人跟我吐槽: 学了半年提示词,收藏了上百条“万能指令”,但真到干活的时候——让AI写周报,格式跑偏; 让它分析数据,数据对不上; 让它回复客户,语气忽冷忽热。 每次都要重新…

作者头像 李华
网站建设 2026/4/27 9:11:53

6G网络中的大模型与多模态感知通信技术解析

1. 6G网络中的大模型与多模态感知通信技术概述在移动通信技术从5G向6G演进的过程中,网络智能化成为核心发展方向。传统通信系统主要解决数据传输问题,而6G网络需要实现通信、感知与计算的深度融合。这一转变的关键在于大语言模型(Large Langu…

作者头像 李华
网站建设 2026/4/27 9:11:23

代码随想录 第11天

150 逆波兰表达式求值class Solution { public:int evalRPN(vector<string>& tokens) {int a;int b;int result;stack<int> s;for(int i 0;i < tokens.size();i){if(tokens[i] ""){b s.top();s.pop();a s.top();s.pop();result a b;s.push(…

作者头像 李华
网站建设 2026/4/27 9:06:53

免费快速解锁VMware macOS虚拟机:终极完整使用指南

免费快速解锁VMware macOS虚拟机&#xff1a;终极完整使用指南 【免费下载链接】unlocker VMware Workstation macOS 项目地址: https://gitcode.com/gh_mirrors/unlo/unlocker 想在Windows或Linux电脑上体验macOS系统吗&#xff1f;VMware macOS Unlocker正是你需要的…

作者头像 李华
网站建设 2026/4/27 9:04:01

物联网项目避坑:TEA5767收音机模块I2C通信失败?5个常见问题排查指南

TEA5767收音机模块实战&#xff1a;5个I2C通信故障的深度排查手册 调试TEA5767收音机模块时&#xff0c;I2C通信失败是最令人头疼的问题之一。明明接线看起来没问题&#xff0c;代码也照着示例写了&#xff0c;但模块就是没反应。这种挫败感我太熟悉了——去年在一个智能家居项…

作者头像 李华
网站建设 2026/4/27 9:01:13

Keras多层感知机(MLP)实战指南与优化技巧

1. 从零构建Keras多层感知机模型指南在深度学习领域&#xff0c;多层感知机&#xff08;MLP&#xff09;是最基础的神经网络结构之一。作为TensorFlow的高级API&#xff0c;Keras让神经网络的搭建变得像搭积木一样简单。我在金融风控和医疗影像领域使用MLP模型五年多&#xff0…

作者头像 李华