栈和队列.

news2024/10/5 14:46:32

目录

1.栈

1.1栈的概念及结构

1.2栈的实现 

2.队列

2.1队列的概念及结构

2.2 队列的实现

1.栈

1.1栈的概念及结构

栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端 称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。

压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。

出栈:栈的删除操作叫做出栈。出数据也在栈顶。

1.2栈的实现 

栈的实现一般可以使用数组或者链表实现,相对而言数组的结构实现更优一些。因为数组在尾上插入数据的 代价比较小。 

 

// 下面是定长的静态栈的结构,实际中一般不实用,所以我们主要实现下面的支持动态增长的栈
typedef int STDataType;
#define N 10
typedef struct Stack
{
 STDataType _a[N];
 int _top; // 栈顶
}Stack;
// 支持动态增长的栈
typedef int STDataType;
typedef struct Stack
{
 STDataType* _a;
 int _top; // 栈顶
 int _capacity; // 容量
}Stack;
// 初始化栈
void StackInit(Stack* ps); 
// 入栈
void StackPush(Stack* ps, STDataType data); 
// 出栈
void StackPop(Stack* ps); 
// 获取栈顶元素
STDataType StackTop(Stack* ps); 
// 获取栈中有效元素个数
int StackSize(Stack* ps); 
// 检测栈是否为空,如果为空返回非零结果,如果不为空返回0 
int StackEmpty(Stack* ps); 
// 销毁栈
void StackDestroy(Stack* ps); 

2.队列

2.1队列的概念及结构

队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出 FIFO(First In First Out) 入队列:进行插入操作的一端称为队尾 出队列:进行删除操作的一端称为队头

2.2 队列的实现

队列也可以数组和链表的结构实现,使用链表的结构实现更优一些,因为如果使用数组的结构,出队列在数 组头上出数据,效率会比较低。

// 链式结构:表示队列
typedef struct QListNode
{ 
 struct QListNode* _pNext; 
 QDataType _data; 
}QNode; 
// 队列的结构
typedef struct Queue
{ 
 QNode* _front; 
 QNode* _rear; 
}Queue; 
// 初始化队列
void QueueInit(Queue* q); 
// 队尾入队列
void QueuePush(Queue* q, QDataType data); 
// 队头出队列
void QueuePop(Queue* q); 
// 获取队列头部元素
QDataType QueueFront(Queue* q); 
// 获取队列队尾元素
QDataType QueueBack(Queue* q); 
// 获取队列中有效元素个数
int QueueSize(Queue* q); 
// 检测队列是否为空,如果为空返回非零结果,如果非空返回0 
int QueueEmpty(Queue* q); 
// 销毁队列
void QueueDestroy(Queue* q);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1549547.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【数据库管理操作】Mysql 创建学生数据库及对数据表进行修改

MySQL 创建学生成绩数据库 1.创建数据库 create database studentscore;创建完成之后,如果需要使用该数据,使用use命令 use studentscore;创建表前查看当前数据库中包含的表 show tables; 2.创建bclass表 create table bclass( class_id char(8) …

python 客户管理系统 增删改查 以及 用户带权限的功能。

# readme1、csss.py文件 ,他是一个初始化程序,只运行一次即可 2、有一个目录是data,他是保存客户信息和用户信息 3、customer.py保存了一个客户类 4、user.py保存了一个用户类 5、main.py是客户信息管理程序,可以添加客户信息,删除…

7.JDK下载和安装

文章目录 一、下载二、安装三、JDK的安装目录介绍 写JAVA代码不是随随便便能写的,我们得先做一点准备工作。例如,我们平时想要玩一把游戏,就需要先下载、安装才能玩游戏。JAVA也是一样的,也是需要下载并安装相关的软件&#xff0c…

win10休眠功能误删了

背景: 今天用某电脑管家清理C盘,不小心把休眠文件给删了,结果电脑失去了休眠功能。这玩意对我太重要了,我合上盖子就是要电脑休眠带走的。于是开始找办法,终于在官网找到了。并且恢复成功。 话不多说直接上技能&#…

浏览器如何渲染页面

浏览器渲染页面的过程是一个多步骤的复杂流程,下面我将通过一个简单的例子来逐步说明这一过程: 以下是浏览器渲染该页面的主要步骤: 请求HTML文档: 用户在浏览器中输入URL并回车,浏览器向服务器发送HTTP请求。 服务器…

Spring面试题整理(持续更新)

Spring框架中的单例Bean是线程安全的吗? Spring中的Bean默认是单例模式的,框架并没有对bean进行多线程的封装处理。如果Bean是有状态的 那就需要开发人员自己来进行线程安全的保证,最简单的办法就是改变bean的作用域 把 "singleton"…

【YOLOv5改进系列(5)】高效涨点----添加密集小目标检测NWD方法

文章目录 🚀🚀🚀前言一、1️⃣ 修改loss.py文件1.1 🎓 修改11.2 ✨ 修改21.3 ⭐️相关代码的解释 二、2️⃣NWD实验2.1 🎓 实验一:基准模型2.2 ✨实验二:NWD权重设置0.52.3 ⭐️实验三&#xf…

安捷伦Agilent E5071B网络分析仪

181/2461/8938产品概述: Agilent E5071B 网络分析仪可为射频组件提供快速、准确的测量。与同类网络分析仪相比,其宽动态范围和低迹线噪声可实现更高的测试质量和吞吐量。内置 2、3 和 4 个测试端口可同时测量具有最多四个端口的组件的所有信号路径。Agi…

大促销活动时期如何做好DDoS防护?

每一次活动大促带来的迅猛流量,对技术人而言都是一次严峻考验。如果在活动期间遭受黑产恶意DDoS攻击,无疑是雪上加霜。电商的特性是业务常态下通常不会遭受大流量DDoS攻击,且对延迟敏感,因此只需要在活动期间按需使用DDoS防护。本…

设置asp.net core WebApi函数输入和返回类型中的属性名称开头大小写格式

以下列类型定义为例创建简单的ASP.NET Core的WebApi函数,此时输入参数和返回结果的属性名称开头默认为小写,如下图所示。 public class UserInfo { public string UserName { get; set; }public string UserSex { get; set; }public string UserP…

腾讯云免费云服务器申请流程详解

随着云计算的普及,越来越多的企业和个人开始选择使用云服务器。腾讯云作为国内领先的云计算服务提供商,为用户提供了丰富的云产品和服务。本文将为大家详细介绍腾讯云免费云服务器的申请流程。 一、注册腾讯云账号 首先,需要注册一个腾讯云账…

Qt 压缩/解压文件

前面讲了很多Qt的文件操作,文件操作自然就包括压缩与解压缩文件了,正好最近项目里要用到压缩以及解压缩文件,所以就研究了一下Qt如何压缩与解压缩文件。 QZipReader/QZipWriter QZipReader 和 QZipWriter 类提供了用于读取和写入 ZIP 格式文…

Healix Protocol 的 HLX 通证预售:医疗领域的未来展望

Healix Protocol推出 HLX 通证预售,将带来医疗领域的重要变革。通过其区块链技术,Healix Protocol致力于重新定义医疗服务的可及性与负担性,成为医疗行业的希望之光。该项目旨在增强透明度、可及性和效率,推动医疗体系向更加公平和…

Shut down, sleep, or hibernate your PC 关闭、睡眠或休眠

最近一段时间没有整服务器了~自己开始捉摸18年买的笔记本-x280,除了发现usb type c和thunderbolt 3接口的不一样外,也开始研究这个待机的功能了~找了官方文档,做个简易的翻译,给大家一起看看学习把。 关于Windows的 “睡眠” 和 …

【网络】:数据链路层

数据链路层 一.以太网帧格式二.认识MTU三.ARP协议1.ARP协议的工作流程2.ARP数据报的格式3.ARP欺骗 四.其他重要协议或技术1.DNS2.ICMP协议3.NAT技术(重点)4.代理服务器 五.一些问题 认识以太网 “以太网” 不是一种具体的网络, 而是一种技术标准; 既包含…

mysql 索引 B+tree

B树(BTree): 结构: B树是一种自平衡的多路查找树,每个节点可以拥有M个子节点(M通常是一个较大的常数,比如几百),每个节点最多含有M-1个键和M个指向子节点的指针。叶子节点…

C++类模板详解

在学习类模板之前可以了解一下函数模板,可以参考我的另一篇文章C函数模板详解(结合代码)-CSDN博客 讲解的比较详细,有助于理解类模板。 目录 1、什么是类模板? 2、类模板与函数模板区别 3、类模板对象做函数参数 …

《早起的奇迹》要么躺在床上等待生活的暴击,要么早起创造奇迹 - 三余书屋 3ysw.net

精读文稿 今天我们讲述的是关于《早起的奇迹》。通过神奇的早起,我们可以获得改变人生的力量。首先我要给你讲一个故事,这个故事的主人公是一个年轻人,他在少年时就取得了巨大的成就,在15岁时他已经拥有了自己的电台节目&#xff…

Failed to load plugin because libnvinfer.so.8: 无法打开共享目标文件: 没有那个文件或目录

首先查看自己是否安装了tensorrt(如果没有,就先执行下面安装) pip install tensorrt控制台输入如下代码,查看tensorrt包的路径 python3 -c "import tensorrt; print(tensorrt.__path__)"找到自己安装包的对应路径 3.…