数据结构(共享栈

news2024/11/26 12:29:43

目录

  • 1. 讲解:
  • 2. C++代码实现:
  • 小结:

1. 讲解:

两个指针,一个将0作为栈底,一个将maxsize作为栈底,向里面填充。栈满的判断条件为:S.top0 == S.top1 - 1

在这里插入图片描述

2. C++代码实现:

#include <stdlib.h>
#include <iostream>

using namespace std;

#define MaxSize 10
#define ElemType int

typedef struct {
	ElemType data[MaxSize];
	int top0;
	int top1;
}ShStack;

// 初始化栈
void InitStack(ShStack &S) {
	S.top0 = -1;
	S.top1 = MaxSize;
}

// 判断栈空
bool StackEmpty(ShStack S) {
	if (S.top0 == -1 && S.top1 == MaxSize) return true;
	else return false;
}

// 入栈0
bool Push0(ShStack& S, ElemType e) {
	if (S.top0 == S.top1 - 1) return false;	// 如果栈满则失败

	S.data[++S.top0] = e;					// 栈顶指针加一
	return true;
}

// 入栈1
bool Push1(ShStack& S, ElemType e) {
	if (S.top0 == S.top1 - 1) return false;	// 如果栈满则失败

	S.data[--S.top1] = e;					// 栈顶指针加一
	return true;
}

// 出栈0
bool Pop0(ShStack& S, ElemType& e) {
	if (S.top0 == -1) return false;			// 如果栈空则失败

	e = S.data[S.top0--];					// 栈顶指针减一
	return true;
}

// 出栈1
bool Pop1(ShStack& S, ElemType& e) {
	if (S.top1 == MaxSize) return false;			// 如果栈空则失败

	e = S.data[S.top1++];					// 栈顶指针减一
	return true;
}

// 读栈0
bool GetTop0(ShStack& S, ElemType& e) {
	if (S.top0 == -1) return false;			// 如果栈空则失败

	e = S.data[S.top0];						// 栈顶指针减一
	return true;
}

// 读栈1
bool GetTop1(ShStack& S, ElemType& e) {
	if (S.top1 == MaxSize) return false;			// 如果栈空则失败

	e = S.data[S.top1];						// 栈顶指针减一
	return true;
}

int main() {
	ShStack S;
	InitStack(S);

	// 入栈操作
	for (int i = 0; i < 5; ++i) {
		Push0(S, i); // 向栈0中入栈
		Push1(S, i + 5); // 向栈1中入栈
	}

	// 出栈操作
	ElemType e;
	while (Pop0(S, e)) {
		cout << "Pop from Stack 0: " << e << endl;
	}
	while (Pop1(S, e)) {
		cout << "Pop from Stack 1: " << e << endl;
	}

	// 读栈操作
	if (GetTop0(S, e)) {
		cout << "Top element of Stack 0: " << e << endl;
	}
	else {
		cout << "Stack 0 is empty." << endl;
	}

	if (GetTop1(S, e)) {
		cout << "Top element of Stack 1: " << e << endl;
	}
	else {
		cout << "Stack 1 is empty." << endl;
	}

	return 0;
}

小结:

关注我给大家分享更多有趣的知识,以下是个人公众号,提供 ||代码兼职|| ||代码问题求解||
添加我的公众号即可:

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

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

相关文章

2、MATLAB入门常用命令

一、退出和中断 exit和quit&#xff1a;结束MATLAB会话。程序完成&#xff0c;如果没有明确保存&#xff0c;则变量中的数据丢失。 Ctrl c&#xff1a;中断一个MATLAB任务。例如&#xff0c;当MATLAB正在计算或打印时&#xff0c;中断一个任务&#xff0c;但会话并没有结束。…

【Unity】申请D-U-N-S邓氏编码流程

标题 在使用苹果开发者账号的时候&#xff0c;我们需要用到D-U-N-S邓氏编码&#xff0c;那如何申请呢&#xff1f;最近正好帮朋友申请了一个&#xff0c;接下来我来演示一下申请流程。 1.登录苹果开发者账号 登录连接&#xff1a;Apple Developer 没有账号的自己注册一个 2…

2024上海国际特种电子暨军民两用技术展览会

2024上海国际特种电子暨军民两用技术展览会 2024 Shanghai International Special Electronics and Military Civilian Dual Use Technology Exhibition 时间&#xff1a;2024年11月18日-20日 地点&#xff1a;上海新国际博览中心 详询主办方陆先生 I38&#xff08;前三位…

数据可视化-ECharts Html项目实战(12)

在之前的文章中&#xff0c;我们深入学习ECharts特殊图表中的矩形树图以及Echarts中高级功能的多图表联动。想了解的朋友可以查看这篇文章。同时&#xff0c;希望我的文章能帮助到你&#xff0c;如果觉得我的文章写的不错&#xff0c;请留下你宝贵的点赞&#xff0c;谢谢。 数…

Linux标准c库操作(4.15)

fopen函数“const char *mode”参数选项。 结果&#xff1a; 标准库c写入结构体到文件&#xff1a; #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <stdio.h> #include <unistd.h> #include <string.h> #in…

L2-2 病毒溯源 坑点

病毒容易发生变异。某种病毒可以通过突变产生若干变异的毒株&#xff0c;而这些变异的病毒又可能被诱发突变产生第二代变异&#xff0c;如此继续不断变化。 现给定一些病毒之间的变异关系&#xff0c;要求你找出其中最长的一条变异链。 在此假设给出的变异都是由突变引起的&a…

【Java框架】Spring框架(四)——Spring中的Bean的创建与生命周期

目录 SpringBean的创建步骤后置处理器(PostProcessor)BeanFactoryPostProcessorBeanPostProcessorInstantiationAwareBeanPostProcessorpostProcessBeforeInstantiationpostProcessAfterInstantiationpostProcessProperties SmartInstantiationAwareBeanPostProcessordetermine…

【Python_PySide6学习笔记(三十六)】基于QGroupBox和QScrollArea实现带有滚动条的QGroupBox(分组框)

基于QGroupBox和QScrollArea实现带有滚动条的QGroupBox分组框 基于QGroupBox和QScrollArea实现带有滚动条的QGroupBox(分组框)前言正文1、创建QGroupBox并创建其内部布局2、创建QScrollArea并将QGroupBox设置为其内容3、将QScrollArea添加到主窗口的中心部件的布局中4、完整代码…

HTML的超链接

前言&#xff1a; 如图&#xff0c;我们在浏览网页时经常可以看到这样的字体&#xff08;点击便跳转到了别的地方了&#xff09;&#xff0c;今日就和各位一起学习一下超链接的相关知识。 相关知识1&#xff1a; 超链接的标签为&#xff1a;a ~使用格式为&#xff1a; <a h…

智慧城市可视化,山海鲸引领未来

随着信息技术的迅猛发展&#xff0c;智慧城市已成为城市发展的必然趋势。在这一背景下&#xff0c;山海鲸智慧城市可视化解决方案应运而生&#xff0c;以其独特的可视化技术和智能化管理功能&#xff0c;为城市管理者提供了全新的决策支持手段。 山海鲸智慧城市可视化解决方案…

docker的安装以及docker中nginx配置

机器 test3 192.168.23.103 1机器初始化配置 1.1关闭防火墙&#xff0c;清空防火墙规则 systemctl stop firewalld iptables -F setenforce 01.2部署时间同步 yum install ntp ntpdate -y1.3安装基础软件包 yum install -y wget net-tools nfs-utils lrzsz gcc gcc-c make…

如何访问内网?

在互联网万维网上&#xff0c;我们可以轻松访问各种网站和资源。但是&#xff0c;有时我们需要访问局域网内的资源&#xff0c;例如公司内部的文件共享、打印机等。本文将介绍几种方法&#xff0c;帮助您实现访问内网的需求。 内网穿透技术 内网穿透技术是一种通过互联网将局域…

人工智能论文GPT-3(1):2020.5 Language Models are Few-Shot Learners;摘要;引言;scaling-law

摘要 近期的工作表明&#xff0c;在大量文本语料库上进行预训练&#xff0c;然后针对特定任务进行微调&#xff0c;可以在许多NLP任务和基准测试中取得实质性进展。虽然这种方法在架构上通常是与任务无关的&#xff0c;但仍然需要包含数千或数万示例的针对特定任务的微调数据集…

STM32G431RBT6移植FreeRTOS

引言&#xff1a; 本文专门为参加了蓝桥杯嵌入式赛道的同学准备&#xff0c; 大家可能会有这样一个问题&#xff0c; 比完赛之后&#xff0c; 对于像继续使用STM32G431RBT6学习FreeRTOS的&#xff0c; 发现网上的教程使用的板子基本上都是F1和F4的&#xff0c; 其实呢&#xff…

多系统源代码暴露在互联网,超四百万公民个人信息存在泄露的风险

#哈尔滨等保# 一 安全事件阐述 截至2024年3月&#xff0c;绿盟科技创新研究院监测到上万个互联网中暴露的DevOps资产存在未授权访问情况。其中&#xff0c;源代码仓库成为未授权访问的“重灾区”。这些允许未授权访问的源代码仓库暴露了境内多家机构的重要系统源代码&#x…

html公众号页面实现点击按钮跳转到导航

实现效果&#xff1a; 点击导航自动跳转到&#xff1a; html页面代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>跳转导航</title><meta name"keywords" conten…

【AR开发示例】实现AR管线巡检

写在前面的话 这是一篇旧文档&#xff0c;代码仓库见 https://gitee.com/tanyunxiu/AR-pipe 本文档是基于超图移动端SDK的AR模块开发的示例&#xff0c;仅供参考&#xff0c;SDK在持续迭代中&#xff0c;相关描述可能有变化。 示例介绍 这是一个使用AR查看墙内管线的基础示…

uniapp 如何区分目前运行环境(app、web、mp-weixin)

platform 区分 iOS、Android uniplatform 区分 app、web、mp-weixin ....

fatal error LNK1120: xxxx unresolved externals

场景&#xff1a; A项目Library&#xff0c;编译环境VS2008DDKWarizd, 编译平台WIN7XP; B项目驱动, 编译环境VS2008&#xff0c;编译平台Rlease32位&#xff0c;DDK版本相同,都是7.0 在B项目集成A项目的32位LIB库时&#xff0c;出现此错误&#xff0c;看错误很常见的找不到符号…

Linux【实战】—— LAMP环境搭建 部署网站

目录 一、介绍 1.1什么是LAMP&#xff1f; 1.2LAMP的作用 二、部署静态网站 2.1 虚拟主机&#xff1a;一台服务器上部署多个网站 2.1.1 安装Apache服务 2.1.2 防火墙配置 2.1.3 准备网站目录 2.1.4 创建网站的配置文件 2.1.5 检查配置文件是否正确 2.1.6 Linux客户端…