数据结构:共享栈

实现思想

        共享栈(Shared Stack)是一种内存管理技术,通常用于操作系统和编程语言的运行时环境中,以支持多线程或多进程的程序。共享栈允许多个执行线程或进程共享同一个内存区域,这个内存区域用于存储局部变量、函数调用的返回地址等信息,下面是单链表的一些基本特性和操作:

  1. 内存效率:共享栈可以减少内存的使用,因为它避免了每个线程或进程都需要自己的栈空间

  2. 简化管理:操作系统或运行时环境可以更简单地管理内存,因为它们只需要维护一个共享的栈结构

  3. 上下文切换:在多线程环境中,线程切换时可以更快速地保存和恢复执行状态,因为所有线程都使用同一个栈

  4. 同步和互斥:由于多个线程可能同时访问共享栈,因此需要适当的同步机制来避免竞争条件和数据不一致

  5. 安全性:共享栈的使用需要考虑到安全性问题,确保一个线程的操作不会破坏其他线程的数据


包含头文件

#include<stdio.h>
#include<stdlib.h>

结点设计

#define Initsize 20
typedef int Elemtype;typedef struct {Elemtype data[Initsize]; //定义数组data大小为Initsize,存储数据域int top1, top2;			 //定义整型变量top1存储头栈的指针,top2存储尾栈的指针
}DStack;

接口函数定义

bool InitDStack(DStack& A);				//定义函数InitDstack用于初始化共享栈
bool CheckDStack(DStack& A);			//定义函数CheckDStack用于判断共享栈是否为空
bool DStackInsert(DStack& A);			//定义函数DStackInsert用于向共享栈传入数据
bool PopDStack(DStack& A,int &X);		//定义函数PopDStack用于从共享栈中输出数据

接口函数实现

bool PopDStack(DStack& A,int &X) {	//定义函数PopDStack用于从共享栈中输出数据int Y;printf("请为想要在哪一个栈输出数据(A栈为1,B栈为2):");scanf_s("%d", &Y);while (Y == 1 || Y == 2) {			//判断用户调用哪一个栈输出数据if (Y == 1) {X=A.data[A.top1] ;			//头栈输出数据printf("数据为:%d", X);A.top1--;printf("是否要再输出数据(是为1,否为3):");scanf_s("%d", &Y);}else {X = A.data[A.top2];			//尾栈输出数据printf("数据为:%d", X);A.top2++;printf("是否要再输出数据(是为2,否为3):");scanf_s("%d", &Y);}}if (Y == 3) {return true;}printf("输入的对应指数错误");return false;
}bool DStackInsert(DStack& A) {	//定义函数DStackInsert用于向共享栈传入数据int X,Y;printf("请为想要在哪一个栈传入数据(A栈为1,B栈为2):");scanf_s("%d", &X);while (X == 1 || X == 2) {			//判断用户在哪一个栈存储数据printf("请输入数据:");scanf_s("%d", &Y);if (X == 1) {A.top1++;					//头栈存储数据A.data[A.top1] = Y;printf("是否要再输入数据(是为1,否为3):");scanf_s("%d", &X);}else {A.top2--;					//尾栈存储数据A.data[A.top2] = Y;printf("是否要再输入数据(是为2,否为3):");scanf_s("%d", &X);}}if (X == 3) {						return true;}printf("输入的对应指数错误");return false;
}bool CheckDStack(DStack& A) {	//定义函数CheckDStack用于判断共享栈是否为空if (A.top1 == -1 && A.top2 == Initsize) {		//判断传入的共享栈是否为空printf("该共享栈为空");return false;}else if (A.top1 == A.top2 - 1) {printf("该共享栈为满");return true;}else {printf("该共享栈不为空");return false;}
}bool InitDStack(DStack& A) {	//定义函数InitDstack用于初始化共享栈A.top1 = -1;				//将共享栈A中所含的top1定义为-1,意为头指针A.top2 = Initsize;			//将共享栈A中所含的top2定义为Initsize,意为尾指针printf("初始化共享栈成功");return true;
}

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

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

相关文章

小白学Linux | Debian系系统与RedHat系系统日志区别

Debian系系统&#xff08;如Ubuntu&#xff09;的日志 包管理器相关日志: /var/log/apt/: 包含与APT包管理器相关的日志&#xff0c;如软件包安装和更新的详细信息。 /var/log/apt/history.log: 记录了通过APT命令安装、删除或升级的包的历史。/var/log/apt/term.log: 记录了AP…

VS2019 QT无法打开 源 文件 “QTcpSocket“

VS2019 QT无法打开 源 文件 "QTcpSocket" QT5.15.2_msvc2019_64 严重性 代码 说明 项目 文件 行 禁止显示状态 错误(活动) E1696 无法打开 源 文件 "QTcpSocket" auto_pack_line_demo D:\vs_qt_project\auto_pack_line_de…

【区块链】truffle测试

配置区块链网络 启动Ganache软件 使用VScode打开项目的wordspace 配置对外访问的RPC接口为7545&#xff0c;配置项目的truffle-config.js实现与新建Workspace的连接。 创建项目 创建一个新的目录 mkdir MetaCoin cd MetaCoin下载metacoin盒子 truffle unbox metacoincontra…

如何减少Apache Spark日志的数量

修改log4j配置文件&#xff0c;没有就创建&#xff1a; 内容&#xff1a; # 设置日志记录器 log4j.rootCategoryWARN, console log4j.appender.consoleorg.apache.log4j.ConsoleAppender log4j.appender.console.targetSystem.err log4j.appender.console.layoutorg.apache.lo…

【栈】1096. 花括号展开 II

本文涉及知识点 栈 LeetCode 1096. 花括号展开 II 如果你熟悉 Shell 编程&#xff0c;那么一定了解过花括号展开&#xff0c;它可以用来生成任意字符串。 花括号展开的表达式可以看作一个由 花括号、逗号 和 小写英文字母 组成的字符串&#xff0c;定义下面几条语法规则&…

laravel8使用中间件实现xss处理

1、创建中间件 php artisan make:middleware XSSClean 2、编辑app/Http/Middleware/XSSClean.php文件 <?phpnamespace App\Http\Middleware;use Closure; use Illuminate\Http\Request;class XSSClean {/*** Handle an incoming request.** param \Illuminate\Http\Requ…

WM_PAINT 是如何触发的

WM_PAINT消息在Windows操作系统中是一个非常重要的消息&#xff0c;它用于通知窗口需要重绘其客户区。以下是WM_PAINT消息触发的一些主要场景和详细解释&#xff1a; 程序启动时&#xff1a; 当我们启动一个窗口应用程序时&#xff0c;由于需要绘制窗口的客户区&#xff0c;系统…

Python | Leetcode Python题解之第135题分发糖果

题目&#xff1a; 题解&#xff1a; class Solution:def candy(self, ratings: List[int]) -> int:n len(ratings)ret 1inc, dec, pre 1, 0, 1for i in range(1, n):if ratings[i] > ratings[i - 1]:dec 0pre (1 if ratings[i] ratings[i - 1] else pre 1)ret p…

通过 AI Edge Torch 生成式 API 在设备上使用自定义大语言模型

作者 / 首席工程师 Cormac Brick&#xff0c;软件工程师 Haoliang Zhang 我们很高兴地发布 AI Edge Torch 生成式 API&#xff0c;它能将开发者用 PyTorch 编写的高性能大语言模型 (LLM) 部署至 TensorFlow Lite (TFLite) 运行时&#xff0c;从而无缝地将新的设备端生成式 AI 模…

[每日一练]银行账户概要(分组聚合与重命名)

该题目来源于力扣&#xff1a; 1587. 银行账户概要 II - 力扣&#xff08;LeetCode&#xff09; 题目要求&#xff1a; 表: Users ----------------------- | Column Name | Type | ----------------------- | account | int | | name | varchar | --…

嵌入式系统日志的存储与检索策略

在嵌入式系统中&#xff0c;日志的存储与检索策略对于系统的稳定性、可维护性以及问题诊断至关重要。本文将探讨嵌入式系统中日志存储与检索的有效策略&#xff0c;并提供相应的代码示例。 一、日志存储的重要性 问题诊断&#xff1a;日志是诊断系统问题的关键工具。性能监控…

JavaSE中的if语句、switch语句:如何控制程序流程?

哈喽&#xff0c;各位小伙伴们&#xff0c;你们好呀&#xff0c;我是喵手。运营社区&#xff1a;C站/掘金/腾讯云&#xff1b;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互相学习&#xff0c;一…

向GitHub远程仓库同步文件使用经验【2】

新手流畅一顿操作 由于没搞懂CSDN的更新文档策略&#xff0c;只能把新写的内容作为新文章发布了。 前一篇文章在这 将本地仓库与远程仓库同步 当本地仓库没修改&#xff0c;但远程仓库修改了&#xff0c;这时可以吧远程仓库同步到本地仓库 方法一 git fetch //将本地仓库中的远…

MySQL与PostgreSQL关键对比一(整体篇)

目录 1 快速参考表&#xff1a;MySQL 与 PostgreSQL 功能表 2 快速参考表&#xff1a;MySQL 与 PostgreSQL 功能表 MySQL 和 PostgreSQL 提供许多相同的特性和功能 - 但是这两个关系数据库管理系统 (RDBMS) 之间存在不容忽视的关键差异。 如果您不熟悉这些差异&#xff0c;这…

RabbitMQ(五)集群配置、Management UI

文章目录 一、安装RabbitMQ1、前置要求2、安装docker版复制第一个节点的.erlang.cookie进入各节点命令行配置集群检查集群状态 3、三台组合集群安装版rabbitmq节点rabbitmq-node2节点rabbitmq-node3节点 二、负载均衡&#xff1a;Management UI1、说明2、安装HAProxy3、修改配置…

深度学习中无监督学习

深度学习中的无监督学习 无监督学习&#xff08;Unsupervised Learning&#xff09;是一种机器学习方法&#xff0c;在没有标签数据的情况下&#xff0c;从数据中提取有意义的模式和特征。无监督学习广泛应用于深度学习中&#xff0c;以解决数据标注困难和大量无标签数据存在的…

Windows安装运行elasticsearch服务

官方下载地址&#xff1a;Download Elasticsearch | Elastic 我在linux上执行的下载命令&#xff1a;wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.5.3-linux-x86_64.tar.gz Elasticsearch&#xff08;简称ES&#xff09;是一款基于Apache Lu…

hutool工具实践-缓存

简介 依赖引入 <dependency><groupId>cn.hutool</groupId><artifactId>hutool-cache</artifactId><version>5.8.17</version></dependency> hutool工具既可以像上一章hutool工具实践-验证码-CSDN博客所说直接全部引入&#x…

短剧小程序剧场短剧APP定制开发付费短剧之为什么自建?

在当今数字时代&#xff0c;拥有一个属于自己的小剧场短剧影视小程序不仅是追求创作梦想的新途径&#xff0c;也是与观众建立紧密联系的有效方式。这种新兴的平台为创作者提供了前所未有的自由和机会&#xff0c;使他们能够直接与广大观众交流和分享作品。 1、源码分享的重要性…

搭贝请假审批应用

在现代企业管理中&#xff0c;高效的请假审批系统至关重要。搭贝的请假审批应用通过简化员工的请假流程、提升管理层的工作效率&#xff0c;确保企业运作的连贯性和透明度。本文将介绍搭贝请假审批应用的主要功能模块&#xff1a;请假分析看板、请假申请审批流、请假类型维护和…