共享栈

共享栈(栈) 算法特点及适用场景特点:共享栈的最大特点是能够在同一个数组空间中实现两个栈的功能,提高了存储空间的利用率,尤其适合在内存空间有限且需要同时使用两个栈结构的场景下应用。并且其入栈和出栈操作的时间复杂度都是O(1),操作效率较高。适用场景:例如在编译器的语法分析中,可能需要同时处理不同类型的括号匹配(如括号、方括号、花括号等),可以利用共享栈分别存储不同类型的括号,方便进行匹配检查; 阅读详情

一 概述

利用栈底位置相对不变的特性,可让两个顺序栈共享一个一维数组空间,将两个栈的栈底分别设置在共享空间的两端,两个栈顶向共享空间的中间延伸。

二 共享栈

               

如图所示,两个栈的栈顶指针都指向栈顶元素,top0=-1的时候0号栈为空,top1=MaxSize时1号栈为空;仅当两个栈顶指针相邻(top1-top0=1)时,判断为栈满。当0号栈进栈时top0先加1再赋值,1号栈进栈时top1先减1再赋值;出栈时则刚好相反。

共享栈是为了更有效地利用存储空间,两个栈的空间相互调节,只有在整个存储空间被占满时才发生溢出。其存取数据的时间复杂度均为O(1),所以对存取效率没有什么影响。

三 共享栈的实现

#include<stdio.h>

typedef int ElemType;

/*定义共享栈*/
#define MaxSize 10
typedef struct{
	ElemType data[MaxSize];
	ElemType top0;
	ElemType top1;
}SharedStack;

/*初始化*/
void InitStack(SharedStack &S){
	S.top0 = -1;			//初始化栈顶指针
	S.top1 = MaxSize;
}

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

/*入0号栈*/
bool PushStack0(SharedStack &S,ElemType x){
	if(S.top0+1 == S.top1)
		return false;			//判断栈满
	else
		S.data[++S.top0] = x;	//指针加1,再入栈
	return true;
}

/*入1号栈*/
bool PushStack1(SharedStack &S,ElemType x){
	if(S.top0+1 == S.top1)
		return -1;			//判断栈满
	else
		S.data[--S.top1] = x;	//指针减1,再入栈
	return true;
}

int PopStack(ElemType x){
	
	return x;
} 

int main(){
	
	SharedStack S;
	InitStack(S);
	ElemType x;
	
	for(int i = 1; i <= MaxSize/2; i++){
		PushStack0(S,i);
		PushStack1(S,MaxSize-i+1);
	}
	
	printf("top_Stack0:");
	for(int i = 0; i < MaxSize/2; i++) {
		
		printf("%d ",PopStack(S.data[S.top0-i]));
	}
	printf("\ntop_Stack1:");
	for(int i = 0; i < MaxSize/2; i++) {
	
		printf("%d ",PopStack(S.data[S.top1+i]));
	}
	
	return 0;
}

代码结果:

 

Linux USB摄像头驱动开发:从USB枚举到V4L2视频流实战 在嵌入式Linux系统中,USB设备驱动开发是连接硬件与用户空间的关键技术。其核心原理是通过USB总线枚举设备、解析描述符,并利用URB(USB请求块)进行数据传输。对于USB摄像头,标准UVC协议与V4L2框架的结合,使得驱动开发能够标准化,从而让用户态程序通过ioctl接口轻松获取视频流。掌握这一技术,不仅能实现免驱摄像头的定制化处理,还能应用于视频监控、机器视觉等场景。本文深入探讨Linux下USB摄像头驱动的开发过程,涵盖从设备枚举、URB提交到V4L2缓冲区管理的完整链路,并分享常见问题排查与合规 阅读详情

相关推荐

Pytorch实现softmax多分类

PyTorch实现softmax多分类

天涯雨的博客 1388

太原理工大学2025数据结构-栈和队列

【代码】太原理工大学2025数据结构-栈和队列。

2401_87727424的博客 465

Matlab蒙特卡洛模拟二维伊辛模型相变过程

一、什么是伊辛模型 伊辛(Ising)模型是描述磁系统相变最简单的模型,但模型里自旋之间的相互作用赋予了它奇妙的特性,最有趣的就是对称性破缺。这一模型可以被推广用于研究连续的量子相变、基本粒子超弦理论、动力学临界行为等,甚至被认为可以描述深林火灾、交通拥堵、舆论传播等社会经济现象。 如图,每个格点的方向只有向上或向下两者状态,但临近的自旋之间有相互作用,而且点阵可以是一维、二维、三维、甚至更高维...

http://www.icfgblog.com/ 2万+

栈 Implemented with C++

文章目录栈 Stack 栈 Stack

还是应该要努力的(12点前睡觉!!!!! 276

MATLAB 论文复现——基于虚拟储能的电动汽车充放电调度策略及激励评价

文章基于虚拟储能聚合体仿真模型优化电动汽车充放电调度,并采用复合权重评价电动汽车的充电激励。根据电动汽车灵活性和系统稳定性衡量其贡献大小,并通过模糊推理系统模拟用户的充电意愿,实现对电动汽车充电的引导和优化。[1]陈朔,胡昊,方慧敏,等.基于虚拟储能的电动汽车充放电调度策略及激励评价[J/OL].系统仿真学报,1-12[2024-07-24].https://doi.org/10.16182/j.issn1004731x.joss.23-1316.基于虚拟储能的电动汽车充放电调度策略及激励评价。

sjr1478的博客 364

51、基于深度卷积神经网络的自闭症分类研究

本研究提出了一种基于深度卷积神经网络的自闭症分类方法,通过融合VGGNet-19和ResNet-52模型的特征,并在决策层采用SVM分类器,实现了对自闭症谱系障碍(ASD)和典型发育(TD)个体的准确区分。研究使用ABIDE数据集,结合数据增强和特征拼接技术,取得了88.12%的分类准确率和0.88的ROC曲线下面积。结果表明,该方法在自闭症自动诊断中具有良好的性能,同时研究也探讨了其局限性,并展望了未来改进方向,如多模态数据融合、迁移学习和模型可解释性的提升。

grpc6streamer的博客 131

共享栈(C/C++)

文章目录1.共享栈的定义2.初始化共享栈全部代码 1.共享栈的定义 typedef struct { ElemType data[Maxsize]; //静态数组存放栈中元素 int ltop; //栈顶指针(指向栈的底部) int htop; //栈顶指针(指向栈的顶部) }ShStack; 2.初始化共享栈 /*初始化共享栈*/ void InitStack(ShStack& S) { for (int i = 0; i < Maxsize; i++) S.data[i] =

沉默安的博客 807

同步调相机启动与并网控制技术方案

同步调相机起动与并网控制技术方案采用背靠背变流器系统,通过静止变频器(SFC)策略实现无原动机驱动的同步电机从静止到同步转速的平稳起动。方案详细阐述了硬件自检、模块初始化、转子位置检测等关键环节,重点解决启动转矩为零、冲击电流大等挑战。系统基于STM32或C2000系列控制器,包含网侧/机侧变流器、检测保护单元及通信接口,通过励磁脉冲和电压响应分析实现高精度转子初始定位,为后续并网提供必要条件。代码级实现涵盖了ADC自检、数字IO验证及通信端口测试等核心功能。

huanghm88的专栏 308

对数据结构中共享栈减少上溢的理解

目录共享栈的定义为何使用共享栈栈满后记 共享栈的定义 简单说就是两栈共用一片连续内存空间。 (王道书定义:)共享栈就是让两个顺序栈(一片连续内存,栈就是顺序栈)共享一个一维数组空间,将两个栈的栈底设置在共享空间的两端, 两个栈顶向共享空间的中间延伸。 如图所示(再嫖张王道书的图): 为何使用共享栈 首先介绍一下上溢和下溢,对栈而言:栈满还存为上溢,栈空再取即下溢。上溢和下溢都修改了栈之外的内存,因此有可能导致程序崩溃。 那有人就会说,那我给每个栈都分配足够大的空间就能解决上溢了吧? 这么说确实有道

喜欢企鹅的博客 7840

手把手教你学Simulink——基于Simulink的前馈解耦SVPWM整流器仿真

本文详细介绍了基于Simulink的前馈解耦SVPWM整流器仿真方法。针对三相PWM整流器存在的dq轴交叉耦合问题,提出前馈解耦控制方案,通过在电流环中引入耦合电压补偿项,显著提升系统性能。文章包含完整的系统架构、核心算法、Simulink建模步骤及参数设置,仿真结果显示:电流跟踪误差<2%、动态响应时间<0.05s、THD<3%、功率因数>0.999。同时提供了可直接复用的MATLAB代码和工程优化建议,为电力电子工程师实现高精度AC/DC转换提供了实用解决方案。

MHD0815的博客 108

超分辨率重建:ESPCN与SRGAN技术对比

超分辨率重建:ESPCN与SRGAN技术对比​ 人工智能,计算机视觉,大模型,AI,超分辨率重建是一种通过技术手段,将低分辨率图像转换为高分辨率图像的过程。它的目的是恢复低分辨率图像中丢失的细节信息,使图像具有更高的清晰度和视觉质量。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 7万+

栈文档之共享栈

共享栈是顺序栈的变种。利用栈底位置相对不变的特性,可以让两个顺序栈共享一个一维数组空间,将两个栈的栈底分别设置在共享空间的两端,两个栈顶向共享空间的中间延申。

二木成林 7801

实战:RK3568 Android14 调试 ES8388 音频驱动 (MIC 篇)

这个板子的MIC设计使用了硬件自动切换方案,极大简化了软件层面的逻辑。我们不需要根据耳机插拔事件去编写复杂的路由切换代码,只需要守住 LIN1/RIN1 这一个入口,配置好增益,剩下的交给那颗 SGM3157 芯片即可。祝您的录音功能调试顺利!

qq_33427070的博客 1681

一文搞懂共享栈

文章目录共享栈的概念共享栈的实现用两个栈模拟队列 共享栈的概念 共享栈:两个栈共享同一片存储空间,这片存储空间不单独属于任何一个栈,某个栈需要的多一点,它就可能得到更多的存储空间; 两个栈的栈底在这片存储空间的两端,当元素入栈时,两个栈的栈顶指针相向而行。 忘记栈的概念的朋友可以回顾一下: 栈是一种特殊的线性表,是一种只允许在表的一端进行插入或删除操作的线性表。表中允许进行插入、删除操作的一...

zag666的博客 1万+

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

多栈共享技术——————共享栈

#define _CRT_SECURE_NO_WARNINGS 1 #include "stdio.h" #include "windows.h" #define M 20 typedef struct { int a[M];//共享栈的长度 int top[2];//栈顶两个 }Stack; void InitStack(Stack *aa)//共享栈的初始化 { aa->top...

快乐星球 720

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

数据结构——共享栈的栈满条件判断

共享栈判断栈满的条件,即判断两个栈顶的位置的状态,其根本是由两个栈顶指针的操作方式决定的。 用入栈操作来说有以下两种操作方式:(1)栈顶指针先加1,再赋值,那么栈顶指针所指的地方是最后入栈的元素(2)若先赋值,栈顶指针再加1,则指针指向的位置是在最后入栈元素的后面1位,指向的地方为空值。 由此导致下面可能发生的四种情况: (1)初始值:top0=-1,top1=maxsize ,栈顶指针先加1(top1为减一),再赋值 (2)初始值:top0=-1,top1=maxsize-1,top0先加1再赋值,to

Super star的博客 1万+

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

【数据结构】-共享栈

共享栈共享栈示意图1.头文件及类型定义2.共享栈类型定义3.函数声明4.基本操作4.1 初始化共享栈4.2 1号栈判空4.3 2号栈判空4.4 1号栈入栈4.5 2号栈入栈4.6 1号栈出栈4.7 2号栈出栈4.8 1号栈读取栈顶元素4.9 2号栈读取栈顶元素4.10 main函数5.小结 共享栈示意图 1.头文件及类型定义 #include<stdio.h> #define MaxSize 10 #define ElemType int //定义共享栈中元素的最大个数 using nam

RunningSnail的博客 8403

C语言 栈(顺序栈、链栈、共享栈)

栈初始化、进栈、出栈等基本操作算法实现。以上就是顺序栈、链式栈和共享栈,本文仅仅简单介绍了栈的基本操作,而栈的运用十分灵活。

m0_73070900的博客 2766

共享栈的定义以及基本操作

1、共享栈:利用栈底位置相对不变的特性,让两个顺序栈共享一个一维数组空间。 2、共享栈的存储结构: #define stacklen 100 typedef struct{ char ch[stacklen]; int top1; //左边栈的栈顶 int top2; //右边栈的栈顶 }sharestack; 3、共享栈的初始化 Status I...

qq_45577911的博客 4161

栈的应用-两个栈共享空间

*--------------2)S1分别入栈1,2,3,4,5共5个元素;---------------*//*---------------1、新建栈1)顺序存储空间大小为:5 ----------------*/---------------*//*--------------3)S2入栈元素6,会有栈满提示;/*--------------5)打印顺序存储空间中所有元素---------------*//*---------------6)S2连续出栈两次,会有栈空提示---------*/

weixin_55082670的博客 1066

【数据结构】C语言实现共享栈

【数据结构】第三章——栈、队列与数组 详细介绍通过C语言实现共享栈

蒙奇D索大的博客 3933

共享栈的实现

#include<stdio.h> /*定义共享栈*/ #define MaxSize 50 typedef struct{ int data[MaxSize]; int top0; int top1; }SharedStack; /*初始化*/ void InitStack(SharedStack &S){ S.top0 = -1; //初始化栈顶指针 S.top1 = MaxSize; } /*判空*/ bool StackEmpty(SharedStack &a

qq_39768922的博客 449

共享栈:两栈共享空间

上一篇文章我们学到了栈的顺序存储,这种方法只允许在栈顶针对元素进行操作,所以他并不存在像线性表一样在插入或删除操作时考虑移动元素的问题。但是他的缺陷也很明显,就是在开始我们就需要确定数组的空间的大小,万一不够用了,我们就需要使用编程手段来进行扩容(栈的链式存储),相当麻烦。但是相对的,如果有两个相同类型的栈,我们的操作空间就会更大一些。打个比方说,两个大学室友毕业同时去武汉工作。刚开始时,他们觉得住了这么就得集体宿舍,现在工作了,应该有一点属于自己的空间。

shouyeren153的博客 1577
上一篇: 进程
下一篇: TCP/IP总结
至学者
博客等级 码龄9年 180粉丝 773原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值