栈和队列总结

文章目录

  • 前言
  • 一、栈和队列的实现
    • 1.栈的具体实现
    • 2.循环顺序队列的具体实现
  • 二、栈和队列总结
  • 总结


前言

  T_T此专栏用于记录数据结构及算法的(痛苦)学习历程,便于日后复习(这种事情不要啊)。所用教材为《数据结构 C语言版 第2版》严蔚敏。


一、栈和队列的实现

  在栈和队列中我们学习了栈和队列的概念和定义(学废了),下面给出其具体实现。

1.栈的具体实现

#include <iostream>
#include <string.h>
using namespace std;#define maxsize 10#define ok 1
#define fail 0
#define true 1
#define false 0
#define Not_Exist -1
#define overflow -2typedef int Status;
typedef int Elemtype;typedef struct {Elemtype* bottom;Elemtype* top;int Stacksize;
}SqStack;//初始化,创建顺序栈
Status CreatStack(SqStack& s)
{s.bottom = new Elemtype[maxsize];if (!s.bottom)return fail;s.top = s.bottom;s.Stacksize = maxsize;return ok;
}
//入栈
Status Push(SqStack& s,Elemtype e)
{if (s.top - s.bottom == s.Stacksize)return overflow;*s.top = e;s.top++;return ok;
}
//出栈
Status Pop(SqStack& s, Elemtype& e)
{if (s.top == s.bottom)return overflow;s.top--;e = *s.top;return ok;
}
//得到栈顶元素
Status Gettop(SqStack s, Elemtype& e)
{if (s.top == s.bottom)return overflow;e = *(s.top-1);return ok;
}
//销毁顺序栈
Status Destorystack(SqStack& s)
{delete[] s.bottom;return ok;
}
//清空顺序栈,逻辑上,实际空间中仍然存储着之前的元素
Status Clearstack(SqStack& s)
{s.top = s.bottom;return ok;
}
//检测顺序栈是否空
Status Stackempty(SqStack s)
{if (s.bottom == s.top)return true;return	false;
}
//检测顺序栈是否满
Status Stackfull(SqStack s)
{if (s.top - s.bottom == s.Stacksize)return true;return	false;
}
//返回顺序栈已用长度,即入栈元素个数
Status Stacklength(SqStack s)
{return s.top-s.bottom;
}SqStack s;
Elemtype e;
int n;
int main()
{CreatStack(s);Push(s, 'A');Push(s, 'b');Push(s, 'C');Gettop(s, e); cout << e << endl;Pop(s, e); cout << e << endl;cout << Stacklength(s) << endl;cout << Stackfull(s) << endl;cout << Clearstack(s) << endl;cout << Stackempty(s) << endl;return 0;
}

  测试现象:
在这里插入图片描述

2.循环顺序队列的具体实现

#include <iostream>
#include <string.h>
using namespace std;#define maxsize 10#define ok 1
#define fail 0
#define true 1
#define false 0
#define Not_Exist -1
#define overflow -2typedef int Status;
typedef int Elemtype;typedef struct {Elemtype* base;int front;int rear;int Queuesize;
}SqQueue;//初始化,创建循环顺序队列
Status CreatQueue(SqQueue& q)
{q.base = new Elemtype[maxsize];if (!q.base)return fail;q.rear = q.front = 0;q.Queuesize = maxsize;return ok;
}
//入队
Status EntryQ(SqQueue& q, Elemtype e)
{if ((q.rear + 1) % q.Queuesize == q.front)return overflow;q.base[q.rear] = e;q.rear++;q.rear %= q.Queuesize;return ok;
}
//出队
Status OutQ(SqQueue& q, Elemtype& e)
{if (q.front == q.rear)return overflow;e = q.base[q.front];q.front++;q.front %= q.Queuesize;return ok;
}
//得到循环顺序队列队头元素
Status Getfront(SqQueue q, Elemtype& e)
{if (q.front == q.rear)return overflow;e = q.base[q.front];return ok;
}
//销毁循环顺序队列
Status DestoryQueue(SqQueue& q)
{delete[] q.base;return ok;
}
//清空循环顺序队列,逻辑上,实际空间中仍然存储着之前的元素
Status ClearQueue(SqQueue& q)
{q.front = q.rear = 0;return ok;
}
//检测循环顺序队列是否空
Status Queueempty(SqQueue q)
{if (q.front == q.rear)return true;return	false;
}
//检测循环顺序队列是否满
Status Queuefull(SqQueue q)
{if ((q.rear + 1) % q.Queuesize == q.front)return true;return	false;
}
//返回循环顺序队列已用长度,即入队元素个数
Status Queuelength(SqQueue q)
{return (q.rear - q.front + q.Queuesize) % q.Queuesize;
}SqQueue q;
Elemtype e;
int main()
{CreatQueue(q);EntryQ(q, 'A');EntryQ(q, 'b');EntryQ(q, 'C');Getfront(q, e); cout << e << endl;OutQ(q, e); cout << e << endl;cout << Queuelength(q) << endl;cout << Queuefull(q) << endl;cout << ClearQueue(q) << endl;cout << Queueempty(q) << endl;return 0;
}

  测试现象:
在这里插入图片描述

二、栈和队列总结

(1)栈是限定仅在表尾进行插入或删除的线性表,又称为后进先出(LIFO)的线性表。栈有两种存储表示,顺序表示(顺序栈)和链式表示(链栈)。栈的主要操作是进栈和出栈,对于顺序栈的进栈和出栈操作要注意判断栈满或栈空。
(2) 队列是一种先进先出(FIFO)的线性表。它只允许在表的一端进行插入, 而在另一端删除元素。队列也有两种存储表示,顺序表示(循环队列)和链式表示(链队)。队列的主要操作是进队和出队,对于顺序的循环队列的进队和出队操作要注意判断队满或队空。凡是涉及队头或队尾指针的修改都要将其对队列最大容量求模。


总结

  路漫漫其修远兮,吾将上下而摆烂。
  有任何疑问和补充,欢迎交流。(但我显然不会)

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

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

相关文章

揭秘Linux文件系统

前言 在上一篇文件描述符详解中谈论的都是打开的文件&#xff0c;但是在我们的系统中不仅有打开的文件还有许多未打开的文件&#xff0c;那么这些未打开的文件又该如何理解呢?阅读完本篇文章相信你会得到答案。 如果觉得文章内容对你有所帮助的话&#xff0c;可以给博主一键三…

新装电脑Flutter环境部署坑汇总(持续更新)

1.本地安装&#xff0c;安装fvm的坑 本人电脑使用windows &#xff0c;安装fvm则一般使用choco安装&#xff0c;那么首先需要安装choco,打开powershell/或者cmd运行以下命令&#xff1a; Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager…

图像置乱加密-Arnold加密算法

置乱加密是另一种较常用的加密方法&#xff0c;现也被许多文献选用&#xff0c;置乱加密可以是以像素为单位进行全局置乱&#xff0c;该方式打乱了图像像素值的位置&#xff0c;使其图像内容失去相关性&#xff0c;达到保护的目的。也可以是以块为单位进行置乱&#xff0c;该方…

Kafka报错ERROR Exiting Kafka due to fatal exception during startup

报错&#xff1a; ERROR Exiting Kafka due to fatal exception during startup. (kafka.Kafka$) kafka.common.InconsistentClusterIdException: The Cluster ID FSzSO50oTLCRhRnRylihcg doesnt match stored clusterId Some(0oSLohwtQZWbIi73YUMs8g) in meta.properties. Th…

某宝因SSL证书过期无法正常访问,证书过期问题频发企业如何破局?

近日&#xff0c;有网友发现&#xff0c;某宝网站无法正常访问&#xff0c;出现“此连接非私人连接”提示&#xff0c;而导致此类提示的罪魁祸首是因为SSL证书过期&#xff01;其实&#xff0c;近年来&#xff0c;因SSL证书过期导致的网站无法正常访问的事件频频发生&#xff0…

vue2—— mixin 超级详细!!!

mixin Mixin是面向对象程序设计语言中的类&#xff0c;提供了方法的实现。其他类可以访问mixin类的方法而不必成为其子类 Mixin类通常作为功能模块使用&#xff0c;在需要该功能时“混入”&#xff0c;有利于代码复用又避免了多继承的复杂 vue中的mixin 先来看一下官方定义 mi…

YOLO-yolov5构建数据集

1.收集数据集 创建一个dataset文件夹用来存放图片数据集。 我这里使用的图片数据集&#xff0c;是对一段视频进行抽帧得到的200张狗狗图片。 在dataset文件夹下新建images和labels文件夹&#xff0c;并将200张狗狗图片放入images中。 2.标注数据集 2.1安装标注工具labelimg…

Jenkins邮件发送失败问题解决

如下提示为 Extended E-mail Notification开启Debug模式下显示的错误信息&#xff0c; (Debug模式设置方法&#xff1a;Dashboard-> manage Jenkins->configure System)DEBUG SMTP: Attempt to authenticate using mechanisms: LOGIN PLAIN DIGEST-MD5 NTLM XOAUTH2 DEB…

OpenCV——Bernsen局部阈值二值化方法

目录 一、Bernsen算法1、算法概述2、参考文献二、代码实现三、结果展示Bernsen局部阈值二值化方法由CSDN点云侠原创,爬虫自重。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫。 一、Bernsen算法 1、算法概述 Bernsen 算法是另一种流行的局部阈值二值化方…

网络相关知识总结

1、网口设置 网口设置IP&#xff0c;即操作/etc/sysconfig/network-scripts路径下的ifcfg-xx文件 主要参数详解&#xff1a; DEVICE:网口名 ONBOOT&#xff1a;表示启动系统时是否激活网卡&#xff0c;yes为激活&#xff0c;no不激活 HWADDR:mac值 DEFROUTE://默认路由设置…

Docker容器:docker基础

目录 一.docker前言 云计算服务模式 关于 docker 产品 虚拟化产品有哪些&#xff1f; ① 寄居架构 ② 源生架构 虚拟化技术概述 主流虚拟化产品对比 1. VMware系列 2. KVM/OpenStack 3. Xen 4. 其他半/全虚拟化产品 二. docker 的相关知识 1. docker 的概念 doc…

[linux网络编程]UDP协议和TCP协议的使用

目录 看以下内容前&#xff0c;你要先了解main函数带参数有什么用、 了解socket的相关函数接口 如果不了解socket的相关函数接口请先看我这篇文章 main函数带参数有什么用 UDP udp_server 1.生成socket文件描述符 2.填充sockaddr_in信息 3.bind 4.发&#xff08;收&…

学习100个Unity Shader (14) ---透明效果

文章目录 渲染队列透明度测试&#xff08;Alpha Test&#xff09;效果Shader 透明度混合&#xff08;Alpha Blending&#xff09;效果Shader 参考 渲染队列 由”Queue“ 标签决定&#xff0c;索引号越小越早被渲染&#xff1a; 名称队列索引号Background1000Geometry2000Alph…

从虚拟化走向云原生,红帽OpenShift“一手托两家”

汽车行业已经迈入“软件定义汽车”的新时代。吉利汽车很清醒地意识到&#xff0c;只有通过云原生技术和数字化转型&#xff0c;才能巩固其作为中国领先汽车制造商的地位。 和很多传统企业一样&#xff0c;吉利汽车在走向云原生的过程中也经历了稳态业务与敏态业务并存带来的前所…

牛客NC98 判断t1树中是否有与t2树完全相同的子树【simple 深度优先dfs C++/Java/Go/PHP】

题目 题目链接&#xff1a; https://www.nowcoder.com/practice/4eaccec5ee8f4fe8a4309463b807a542 思路 深度优先搜索暴力匹配 思路和算法这是一种最朴素的方法——深度优先搜索枚举 s 中的每一个节点&#xff0c;判断这个点的子树是否和 t 相等。如何判断一个节点的子树是否…

JSP在页面用<%=调用声明函数时出现HTTP 500错误

JSP在页面用<%调用声明函数时出现HTTP 500错误 错误描述&#xff1a; Eclipse在编写JSP页面时&#xff0c;在其中采用<%&#xff01;%>方式声明了函数&#xff0c;然后在页面中用<%函数名%>方式调用时&#xff0c;出现HTTP状态500错误&#xff0c;提示为&#…

【吊打面试官系列】Java高并发篇 - Java 中 notify 和 notifyAll 有什么区别?

大家好&#xff0c;我是锋哥。今天分享关于 【Java 中 notify 和 notifyAll 有什么区别&#xff1f;】面试题&#xff0c;希望对大家有帮助&#xff1b; Java 中 notify 和 notifyAll 有什么区别&#xff1f; notify() 方法不能唤醒某个具体的线程&#xff0c;所以只有一个线程…

maya blendshape

目录 shape编辑器 maya创建blendshape python 脚本 添加形变动画 查看顶点个数 shape编辑器 打开方式&#xff1a; 窗口-动画编辑器-形变编辑器 maya创建blendshape python 脚本 import maya.cmds as cmds# 创建基础网格 - 球体 baseMesh cmds.polySphere(name"bas…

路透社:美国SEC将拒绝以太坊ETF

4月25日&#xff0c;据路透社报道&#xff0c;美国SEC在下个月将拒绝以太坊现货ETF申请。根据4位知情人士表示&#xff0c;在最近几周与美国证券交易委员会&#xff08;SEC&#xff09;进行了会议之后&#xff0c;美国发行商和其他公司预计SEC将拒绝他们推出与以太坊价格挂钩的…

15(第十四章,大数据和数据科学)

目录 概述 基本概念 数据仓库/传统商务智能与数据科学的比较 数据科学的过程 大数据 大数据来源 数据湖 机器学习 监督学习 无监督学习 强化学习 扩展 1、数据仓库&#xff08;Data Warehouse&#xff09; 2、数据湖(Data Lake) 3、大数据平台1.0 4、数据中台 …