栈stack和队列

article/2025/9/17 6:03:38

栈和队列

  • 一· 栈和队列
    • 二· 栈
      • 三.队列

一· 栈和队列

栈和队列是两种重要的线性结构。从数据结构来看,栈和队列也是线性表,其特殊性在于栈和队列的基本操作是线性表操作的子集(也具有顺序结构和链式结构),它们是操作受限的线性表,因此,可称为限定性的数据结构

二· 栈

定义 :只能在表的一端(栈顶)进行插入和删除运算的线性表。

逻辑结构:与线性表相同,仍为一对一关系。

存储结构:用顺序栈或链栈存储均可,但以顺序栈更常见。
链栈:
在这里插入图片描述

运算规则:只能在栈顶运算,且访问结点时依照后进先出(LIFO)或先进后出(FILO)的原则

栈的示意图
在这里插入图片描述应用:如果需要按照保存数据时相反的顺序来使用数据,则可以利用栈来实现。(具体可参照课本《数据结构》)

  1. 递归
  2. 数值转换
  3. 四则运算表达式求值
  4. 括号匹配问题

栈的表示和操作的实现
在这里插入图片描述
base==top 是栈空的表现

top指示真正的栈顶元素之上的下标地址

#define MAXSIZE  100
typedef struct
{SElemType   *base;//用于栈底指针SElemType   *top;//用于栈顶指针int         stacksize;
}SqStack;

基本操作
1.头文件

#include<stack>

2 . 栈的初始化

stack<int> s1;      //创建一个空栈s1
stack<int> s2(s1);  //用s1初始化s2

3 .判断栈内是否为空empty()(为空返回true,非空返回false)

bool  empty();
while(!s1.empty())

4 .入栈push()

s1.push(10);
s1.push(20);
s1.push(30);   
s1.push(100);  //表s1中有四个元素,从栈顶到栈底依次为100,30,20,10

5 .删除堆栈中最顶层元素pop()。

s1.push(10);
s1.push(20);
s1.push(30);
s1.push(100);
s1.pop();    //此时s1中有三个元素,从栈顶到栈底依次为30,20,10

6 .获得栈顶元素top()

s1.push(10);
s1.push(20);
s1.push(30);
cout << s1.top() <<endl;   //输出元素30

7 .返回栈内元素的个数size()

cout << s1.size() <<endl;

操作实现

#include<iostream>
#include<stack>//栈的头文件
using namespace std;int main()
{stack<int> s1;s1.push(10);//10入栈s1.push(20);//20入栈s1.push(30);//30入栈s1.push(40);//40入栈cout<<s1.top()<<endl;//输出栈顶元素cout<<s1.size()<<endl;//输出栈内元素的个数s1.pop();//删除栈顶元素cout << "输出栈内现在元素:" << endl;  while(!s1.empty())    //s1非空,此循环是将栈内元素全部输出{cout << s1.top() << " ";  // 输出栈顶元素s1.pop(); //删除栈顶元素                 } return 0;} 

结果

40
4
输出栈内现在元素:
30 20 10

三.队列

1 .定义:队列是只允许在一端进行插入操作,另一端进行删除操作的线性表,遵循 先进先出 原则。

在这里插入图片描述
2.队列的顺序表示和实现
队列的顺序存储结构

#define MAXQSIZE 100
typedef struct
{QElemType *base;      //存储空间的基地址int  front;      //头指针int  rear;      //尾指针
}SqStack;

设两个整形变量front和rear分别指示队列头元素和队列尾元素(即头指针和尾指针)
约定:初始化创建空队列时,令front=rear=0,每当插入新的队列尾元素时,尾指针 rear增1;每当删除队列头元素时,头指针front增1;。因此,在非空队列中,头指针始终指向队列头元素,而尾指针始终指向队列尾元素的下一个位置,如图所示。
在这里插入图片描述
3.应用(参照课本内容)

  1. 舞伴问题
  2. 银行排队模拟

4 .基本操作
1 . 头文件

#include<queue>

2 .队列初始化

queue<int> q;        //定义空队列q
queue<double> q[20]; //规定元素个数为20

3 .入队push()

q.push(10);
q.push(20);
q.push(30);
q.push(40);  //从队头到队尾元素依次为10,20,30,40

4 .删除队头元素pop()

q.push(10);
q.push(20);
q.push(30);
q.push(40); 
q.pop(); //从队头到队尾元素依次为20,30,40

5 .返回队头元素front()

q.push(10);
q.push(20);
q.push(30);
q.push(100);
cout << q.front() <<endl;  //输出结果为10

6 .返回队尾元素back()

q.push(10);
q.push(20);
q.push(30);
q.push(100);
cout << q.back() <<endl;  //输出结果为100

7 .返回队列中元素的个数size()

q.push(10);
q.push(20);
q.push(30);
q.push(100);
cout << q.size() <<endl;//输出结果为4

8.判断队列是否为空empty() (队列为空返回真,非空返回假)

while(!q.empty())

操作实现

#include<iostream>
#include<queue>
using namespace std;
int main()
{queue<int> q;     //q为空队列 q.push(10);q.push(20);q.push(30);q.push(40);      //将10,20,30,40入队,从队头到队尾依次为10,20,30,40 cout << q.size() << endl; //输出队列中元素的个数cout << q.front() << endl ;//返回队头元素cout  << q.back() << endl ;//返回队尾元素q.pop();    //删除队头元素 cout << "输出队列内现在元素:" << endl; while(!q.empty())    //q非空,此循环是将队列内元素全部输出{cout << q.front() << " ";   //输出队头元素q.pop();                    //删除队头元素} return 0;
}

结果

4
10
40
输出队列内现在的元素
20 30 40

http://chatgpt.dhexx.cn/article/dXTWldLb.shtml

相关文章

链表,队列和栈的区别

链表&#xff0c;队列和栈都是数据结构的一种。Sartaj Sahni 在他的《数据结构、算法与应用》一书中称&#xff1a;“数据结构是数据对象&#xff0c;以及存在于该对象的实例和组成实例的数据元素之间的各种联系。这些联系可以通过定义相关的函数来给出。”他将数据对象&#x…

栈与队列的定义与区别

1、栈 首先&#xff0c;普通的线性表实现是有两个端口可以访问的&#xff0c;但是如果作为栈就要封闭一端&#xff0c;只能访问另一端。这当然不是自讨苦吃&#xff0c;栈是一种抽象数据结构&#xff0c;是对现实世界对象的模拟。比如&#xff0c;自助餐厅中的一叠盘子&#x…

java 队列和栈的区别

栈和队列的区别 &#xff08;1&#xff09;数据插入删除 栈是一种特殊的线性表&#xff0c;他只能在一段进行插入和删除操作&#xff0c;就好像是一个井一样。进行数据插入和删除就类似于井口&#xff0c;称为栈定。而井也是有底部的&#xff0c;栈无法进行插入删除操作的这一…

监督学习和无监督学习的区别(机器学习)

机器学习主要分为两类 监督学习无监督学习 两者的区别主要是是否需要人工参与数据结果的标注 监督学习&#xff1a;教计算机如何去完成预测任务&#xff08;有反馈&#xff09;&#xff0c;预先给一定数据量的输入和对应的结果即训练集&#xff0c;建模拟合&#xff0c;最后让…

简单说下有监督学习和无监督学习的区别

简单说下有监督学习和无监督学习的区别 解析&#xff1a; 有监督学习&#xff1a;对具有标记的训练样本进行学习&#xff0c;以尽可能对训练样本集外的数据进行分类预测。&#xff08;LR,SVM,BP,RF,GBDT&#xff09; 无监督学习&#xff1a;对未标记的样本进行训练学习&#xf…

一个简单的例子来理解监督学习和非监督学习及其区别

首先&#xff0c;必须理解两个基本概念&#xff1a;特征值和目标值&#xff0c;先看图例 1、特征值&#xff1a; 特征值是指数据的特征&#xff0c;对于每个样本&#xff0c;通常具有一些 "属性"&#xff08;Attribute&#xff09;或者说 ”特征“&#xff08;Featu…

监督学习、无监督学习和半监督学习区别

1、概念 1.1监督学习&#xff08;数据集有输入和输出数据&#xff09;&#xff1a;通过已有的一部分输入数据与输出数据之间的相应关系。生成一个函数&#xff0c;将输入映射到合适的输出&#xff0c;比如分类。 1.2无监督学习&#xff08;数据集中只有输入&#xff09;&…

监督、自监督、半监督、无监督学习的区别

目录 一、简易版区别 二、详细版区别 一、简易版区别 A Survey on Semi-, Self-and Unsupervised Learning for Image Classification 文中的解释&#xff1a; 监督学习&#xff08;a&#xff09;&#xff1a;给出全部样本红蓝两类的标签 半监督学习&#xff08;b&#xf…

有监督学习与无监督学习

机器学习的常用方法&#xff0c;主要分为有监督学习(supervised learning)和无监督学习(unsupervised learning)。简单的归纳就是&#xff0c;是否有监督&#xff08;supervised&#xff09;&#xff0c;就看输入数据是否有标签&#xff08;label&#xff09;。输入数据有标签&…

有监督和无监督

来自有监督vs.无监督&#xff0c;傻傻分不清楚&#xff1f; - 搜狐网 网上对于有监督和无监督差异性的文章非常多&#xff0c;本文将重点从应用的角度来阐述如何选择有监督和无监督。 对比一&#xff1a;有标签 vs. 无标签 有监督又被称为“有老师的学习”&#xff0c;无监督被…

机器学习:有监督和无监督之间有什么区别

机器学习是人工智能的一个子集&#xff0c;它通过示例和经验教会计算机执行任务&#xff0c;是研究和开发的热门领域。我们每天使用的许多应用程序都使用机器学习算法&#xff0c;包括AI助手&#xff0c;Web搜索和机器翻译。 您的社交媒体新闻提要由机器学习算法提供支持。您、…

有监督学习与无监督学习的几大区别

当下无监督作为一种热门的机器学习技术&#xff0c;网上有不少关于无监督与有监督差异讨论的文章。DataVisor作为率先将无监督技术运用在反欺诈行业的娇娇领先者&#xff0c;我们在本文中&#xff0c;将深入浅出的讲解无监督机器学习技术与有监督技术在不同方面的区别&#xff…

监督学习和无监督学习区别

前言 机器学习分为&#xff1a;监督学习&#xff0c;无监督学习&#xff0c;半监督学习&#xff08;也可以用hinton所说的强化学习&#xff09;等。 在这里&#xff0c;主要理解一下监督学习和无监督学习。 监督学习&#xff08;supervised learning&#xff09; 从给定的训…

关于使用burpsuite时,“安全连接失败,使用了无效的证书”问题【已解决】

安装好burpsuite&#xff0c;配置好网络连接代理后&#xff0c;导入了证书&#xff0c;访问某一网站还是会出现如下现象&#xff1a; 解决方案&#xff1a; 打开浏览器设置-高级-证书-证书机构&#xff0c;删除刚才导入的证书。 再次访问http:\burp下载证书。 再次在设置-高级…

火狐浏览器出现“建立安全连接失败”PR_CONNECT_RESET_ERROR解决方法

访问一个网站出现这样的问题&#xff0c;可能是因为自己设置一些东西导致DNS解析出错。 我找了网上几个比较主流的方法都不能解决&#xff0c;最后就是一招刷新DNS解决了。&#xff08;哭笑不得&#xff09; 解决方法&#xff1a; 按“win R”键&#xff0c;启动运行窗口&a…

Horizon client连接错面报错:无法建立安全加密链路连接

一、问题描述 前方人员反馈在Horizon环境中交付桌面前&#xff0c;验证过程中&#xff0c;使用Horizon client登录错误报&#xff1a;无法建立安全加密链路连接&#xff0c;如下图所示&#xff1a; UAG软件版本&#xff1a;3.9 二、分析处理 1、检查客户端SSL配置选项&…

华为设备web登录,安全连接失败问题解决办法

web登录华为交换机、路由器失败 详细错误信息如下&#xff1a; 解决办法 1、可以更换浏览器解决 2、火狐浏览器可以通过加载插件解决&#xff0c;插件链接点击打开链接 3、如果上面链接有问题按如下方法安装插件&#xff1a;1&#xff09;附件组件-扩展-搜索Disable DHE 安…

selenium自动化学习--解决firefox无法建立安全连接的问题(TLS1.0/TLS1.1)

解决Firefoxselenium无法建立安全连接的问题SSL_ERROR_UNSUPPORTED_VERSION 问题&#xff1a;解决方案&#xff1a; 问题&#xff1a; 在使用pythonselenium做firefox浏览器自动化测试的时候&#xff0c;遇到了如下问题&#xff1a; 代码如下&#xff1a; profile webdriver.…

Win11此站点的连接不安全解决教程

Win11此站点的连接不安全怎么解决&#xff1f;导致出现这一情况的原因很有可能是是因为网络证书不匹配引起的&#xff0c;对此今天小编就为大家带来Win11此站点的连接不安全解决方法介绍&#xff0c;步骤简单&#xff0c;安全有效&#xff0c;我们一起来看看吧。 解决方法&…