数据结构实现-栈和队列

news/2024/4/12 18:40:06/文章来源:https://blog.csdn.net/qq_61249949/article/details/136440266

顺序栈

#include <iostream>
using namespace std;
#define MaxSize 50//顺序栈
template<typename ElemType>
struct SqStack{ElemType data[MaxSize];int top;
};//初始化
template<typename ElemType>
void InitStack(SqStack<ElemType>&s){s.top=-1;
}//判断栈空
template<typename ElemType>
bool StackEmpty(SqStack<ElemType>&s){return s.top==-1;
}//进栈
template<typename ElemType>
bool Push(SqStack<ElemType>&s,ElemType x){if (s.top==MaxSize-1){return false;}s.data[++s.top]=x;return true;
}//出栈
template<typename ElemType>
bool Pop(SqStack<ElemType>&s,ElemType&x){if (s.top==-1){return false;}x=s.data[s.top--];return true;
}//读栈顶元素
template<typename ElemType>
bool GetTop(SqStack<ElemType>&s,ElemType&x){if (s.top==-1)return false;x=s.data[s.top];return true;
}

链栈

#include <iostream>
using namespace std;
template<typename ElemType>
struct LinkNode{ElemType data;LinkNode<ElemType>*next;
};
template<typename ElemType>
struct LinkStack{LinkNode<ElemType>*front,*rear;
};//初始化
template<typename ElemType>
void InitStack(LinkStack<ElemType> &S){S.front = S.rear = new LinkNode<ElemType>;
}//判栈空
template<typename ElemType>
bool StackEmpty(LinkStack<ElemType>S){return S.front==S.rear;
}//进栈
template<typename ElemType>
void Push(LinkStack<ElemType>&s,ElemType x){LinkNode<ElemType>*newNode = new LinkNode<ElemType>;newNode->data=x;newNode->next=s.rear;s.rear=newNode;
}//出栈
template<typename ElemType>
bool Pop(LinkStack<ElemType>&s,ElemType&x){if (StackEmpty(s)){return false;}LinkNode<ElemType>*temp = s.rear;x = temp->data;s.rear = s.rear->next;delete temp;return true;
}//读栈顶元素
template<typename ElemType>
bool GetTop(LinkStack<ElemType>&s,ElemType&x){if (StackEmpty(s))return false;x = s.rear->data;return true;
}

顺序队列

#include <iostream>
using namespace std;
#define MaxSize 10
template<typename ElemType>
struct SqQueue{ElemType data[MaxSize];int front,rear;
};//初始化
template<typename ElemType>
void InitQueue(SqQueue<ElemType>&Q){Q.front=Q.rear=0;//默认队列的头指针指向对头,尾指针指向尾部元素的下一个。
}//判队空
template<typename ElemType>
bool isEmpty(SqQueue<ElemType>&Q){return Q.front==Q.rear;
}//入队
template<typename ElemType>
bool EnQueue(SqQueue<ElemType>&Q,ElemType x){if ((Q.rear+1)%MaxSize==Q.front){return false;}Q.data[Q.rear] = x;Q.rear = (Q.rear+1)%MaxSize;return true;
}//出队
template<typename ElemType>
bool DeQueue(SqQueue<ElemType>&Q,ElemType&x){if (Q.rear==Q.front)return false;x=Q.data[Q.front];Q.front = (Q.front+1)%MaxSize;return true;
}int main(){SqQueue<int>sq;InitQueue(sq);for (int i = 0; i < 8; ++i) {EnQueue(sq,i);}int x;for (int i = 0; i < 3; ++i) {DeQueue(sq,x);}for (int i = 8; i < 10; ++i) {EnQueue(sq,i);}cout<<endl;
}

链队列

#include <iostream>
using namespace std;
template<typename ElemType>
struct LinkNode{ElemType data;LinkNode<ElemType>* next;
};
template<typename ElemType>
struct LinkQueue{LinkNode<ElemType>*rear,*front;
};//初始化
template<typename ElemType>
void InitQueue(LinkQueue<ElemType>&Q){Q.front = Q.rear = new LinkNode<ElemType>;Q.front->next = nullptr;
}template<typename ElemType>
bool IsEmpty(LinkQueue<ElemType>&Q){return Q.front==Q.rear;
}template<typename ElemType>
void EnQueue(LinkQueue<ElemType>&Q,ElemType x){LinkNode<ElemType>*s = new LinkNode<ElemType>;s->data = x;s->next= nullptr;Q.rear->next=s;Q.rear = s;
}template<typename ElemType>
bool DeQueue(LinkQueue<ElemType>&Q,ElemType&x){if (Q.front==Q.rear)return false;LinkNode<ElemType>*p=Q.front->next;x=p->data;Q.front->next=p->next;if (Q.rear==p)Q.rear=Q.front;delete p;return true;
}

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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

鸿蒙4.0-DevEco Studio界面工程

DevEco Studio界面工程 DevEco Studio 下载与第一个工程新建的第一个工程界面回到Project工程结构来看 DevEco Studio 下载与第一个工程 DevEco Studio 下载地址&#xff1a;点击跳转 https://developer.harmonyos.com/cn/develop/deveco-studio#download 学习课堂以及文档地址…

AGM AG32 MCU系列(含AGRV2K)的内部PLL使用入门(一)

AG32 MCU(或AGRV2K)的整个器件只有一个 PLL 倍频模块&#xff08;mcu 和 cpld 共用&#xff09; 。倍频分频操作是封装在系统内部的&#xff08;用户无须也不能控制这个时钟树&#xff09; 。 实现原理&#xff1a; A. 系统会根据所有用到的频率项&#xff08;mcu 和 cpld 要用…

unity学习(45)——选择角色菜单——客户端处理服务器的数据

1.已知客户端ReceiveCallBack中已经收到来自服务器返回的数据包。 2.问题是客户端MessageManager中的Update并没有拆解该数据包 &#xff0c;因该是因为脚本没有挂载。 挂在SelectMenu场景中的Camera上即可。 挂载后成功达到目地 其中Update中的List是一个起到全局效果的static…

K8s存储

目录 1.emptyDir存储卷 2.hostPath存储卷 3.nfs共享存储卷 4.PVC 和 PV NFS使用PV和PVC 1.配置nfs存储 2.定义PV 3.定义PVC 4.测试访问 5.搭建 StorageClass nfs-client-provisioner &#xff0c;实现 NFS 的动态 PV 创建 1、在stor01节点上安装nfs&#xff0c;并配…

【unity实战】3D水系统,游泳,潜水,钓鱼功能实现

文章目录 素材将项目升级为URP画一个水潭地形材质升级为URP创建水调节水第一人称人物移动控制游泳水面停留添加水下后处理水下呼吸钓鱼参考完结 素材 https://assetstore.unity.com/packages/vfx/shaders/urp-stylized-water-shader-proto-series-187485 将项目升级为URP 这…

HarmonyOS NEXT应用开发案例——滑动页面信息隐藏与组件位移效果

介绍 在很多应用中&#xff0c;向上滑动"我的"页面&#xff0c;页面顶部会有如下变化效果&#xff1a;一部分信息逐渐隐藏&#xff0c;另一部分信息逐渐显示&#xff0c;同时一些组件会进行缩放或者位置移动。向下滑动时则相反。 效果图预览 使用说明 向上滑动页面…

【nodejs】“__dirname is not defined”错误修复

▒ 目录 ▒ &#x1f6eb; 问题描述环境 1️⃣ 原理CommonJS vs ESM错误原因 2️⃣ 禁用 ESM 模式并改用 CommonJS方案一&#xff1a;项目方案二&#xff1a;单文件 3️⃣ 在 ESM 模式下自实现__dirname&#x1f4d6; 参考资料 &#x1f6eb; 问题 描述 从网上找了一份代码&am…

Vmware Workstation 不可恢复错误:0xc0000005 has occured

上周打开虚拟机的时候报错&#xff1a;Vmware Workstation 不可恢复错误&#xff1a;0xc0000005 has occured&#xff0c;查看网上资料说是vmware版本太低&#xff0c;需要手动更新本地版本。 由于本地网络不是很好&#xff0c;没能正常更新&#xff0c;无意中出现问题前更改了…

嵌入式面试

1.关键字static的作用是什么&#xff1f;为什么static变量只初始化一次&#xff1f; 1&#xff09;修饰局部变量&#xff1a;使得变量变成静态变量&#xff0c;存储在静态区&#xff0c;存储在静态区的数据周期和程序相同&#xff0c; 在main函数开始前初始化&#xff0c;在退…

打家劫舍(java版)

&#x1f4d1;前言 本文主要是【动态规划】——打家劫舍(java版)的文章&#xff0c;如果有什么需要改进的地方还请大佬指出⛺️ &#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是听风与他&#x1f947; ☁️博客首页&#xff1a;CSDN主页听风与他 &#x1f304;每日一…

chrome插件chrome.storage数据写入失败QUOTA_BYTES_PER_ITEM quota exceeded

Unchecked runtime.lastError while running storage.set: QUOTA_BYTES_PER_ITEM quota exceeded at Object.callback 在开发浏览器插件的时候&#xff0c;报错提示&#xff1a;超出存储限制&#xff0c;浏览器插件存储官方文档&#xff1a;https://developer.chrome.com/docs…

springcloud和基础服务的搭建以及封装

代码仓库地址&#xff1a;https://github.com/zhaoyiwen-wuxian/springcloud-common page分页也进行了封装&#xff0c;只需要添加到pom中&#xff0c;将会自动进行分页&#xff0c;并且后端不需要写任何的分页数据。只需要前端自己传分页参数即可&#xff0c;并且里面封装了很…

基于单片机的轴承售卖系统设计

目 录 摘 要 I Abstract II 引 言 3 1总体方案设计及选择 5 1.1设计方案与选择 5 1.2总体方案设计 5 1.2.1系统总体设计 5 2 硬件电路的设计 8 2.1电源电路 8 2.2 控制核心STC89C52单片机 8 2.3 时钟电路 8 2.4 复位电路 8 2.5 按键模块 9 2.6 NFR24L01无线传输模块 10 2.7 LC…

three.js如何实现简易3D机房?(三)显示信息弹框/标签

接上一篇&#xff1a; three.js如何实现简易3D机房&#xff1f;(二&#xff09;模型加载的过渡动画&#xff1a;http://t.csdnimg.cn/onbWY 目录 七、创建信息展示弹框 1.整体思路 &#xff08;1&#xff09;需求&#xff1a; &#xff08;2&#xff09;思路&#xff1a;…

新书速览|PyTorch语音识别实战(人工智能技术丛书)

实战语音唤醒、音频特征抽取、语音情绪分类、Whisper语音转换、鸟叫多标签分类、多模态语音文字转换 01 本书内容 《PyTorch语音识别实战》使用PyTorch 2.0作为语音识别的基本框架&#xff0c;循序渐进地引导读者从搭建环境开始&#xff0c;逐步深入到语音识别基本理论、算法以…

论文学习—Model-based Adversarial Meta-Reinforcement Learning

Model-based Adversarial Meta-Reinforcement Learning Abstract1. Introduction2. Related work3 Preliminaries基于模型的强化学习&#xff08;MBRL&#xff09;:区别和联系&#xff1a; 4 Model-based Adversarial Meta-Reinforcement Learning4.1 Formulation 4.2 Computin…

【C语言】还有柔性数组?

前言 也许你从来没有听说过柔性数组&#xff08;flexible array&#xff09;这个概念&#xff0c;但是它确实是存在的。C99中&#xff0c;结构中的最后⼀个元素允许是未知⼤⼩的数组&#xff0c;这就叫做『柔性数组』成员。 欢迎关注个人主页&#xff1a;逸狼 创造不易&#xf…

vue+Nodejs+Koa搭建前后端系统(九)-- 上传图片

web2.0的到来使网页世界正式进入了寒武纪&#xff0c;各式各样的多媒体资源屡见不鲜&#xff0c;上传资源变得刻不容缓&#xff01; 前言 本文是在该系列的基础上&#xff0c;针对前后端代码的修改。 准备 HTTP上传图片时Content-Type值常见的有2种&#xff1a;application…

Python之Web开发初学者教程—ubuntu下vi的使用

Python之Web开发初学者教程—ubuntu下vi的使用 vi\vim 文本编辑器 i 切换到输入模式&#xff0c;以输入字符。 x 删除当前光标所在处的字符。 : 切换到底线命令模式&#xff0c;以在最底一行输入命令。 vi 保存并退出&#xff1a;esc键退出编辑-…

NotePad++下载

notepad官网地址是https://notepad-plus-plus.org/。提供了许多强大的功能和工具&#xff0c;使其成为许多程序员和开发人员的首选工具。 Notepad 是一款广受欢迎的开源文本编辑器&#xff0c;它提供了许多强大的功能和工具&#xff0c;使其成为许多程序员和开发人员的首选工具…