双栈

利用栈底位置相对不变的特性,可以让两个顺序栈共享一个空间。

具体实现方法大概有两种:

一种是奇偶栈,就是所有下标为奇数的是一个栈,偶数是另一个栈。但是这样一个栈的最大存储就确定了,并没有起到互补空缺的作用,我们实现了也就没有太大意义。

还有一种就是,栈底分别设在数组的头和尾。进栈往中间进就可以了。这样,整个数组存满了才会真的栈满。

 

那我们直接开始代码实现

 

首先定义结构体:

typedef struct
{int top[2], bot[2];    //栈顶和栈底指针int *V;      //栈数组int m;     //栈最大可容纳元素个数
}DblStack;

 

初始化双栈s,长度为n:

void Init(DblStack &S,int n)
{S.m = n;S.V = new int [n+10];S.bot[0] = S.top[0] = -1;S.bot[1] = S.top[1] = S.m;  
}

判空:

int EmptyStack0(DblStack S)
{if(S.top[0]==-1)return 0;else return 1;
}
int EmptyStack1(DblStack S)
{if(S.top[1]==S.m)return 0;else return 1;
}

判满:(没有单独判断一个栈的,是判断整个储存空间还有没有地方)

int FullStack(DblStack S)
{if(S.top[1]-S.top[0]==1)return 1;else return 0;
}

进栈:

void Push0(DblStack &S,int e)
{if(S.top[1]-S.top[0]!=1){S.top[0]++;S.V[S.top[0]] = e;}
}
void Push1(DblStack &S,int e)
{if(S.top[1]-S.top[0] != 1){S.top[1]--;S.V[S.top[1]] = e;}
}

出栈:

void Pop0(DblStack &S,int &e)
{if(S.top[0]!=-1){e = S.V[S.top[0]];S.top[0]--;}
}
void Pop1(DblStack &S,int &e)
{if(S.top[1]!=S.m){e = S.V[S.top[1]];S.top[1]++;}
}

 

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

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

相关文章

Error when loading the SDK:解决方案

错误情况: 当打开eclipse时出现如下窗口(内容如下) Error when loading the SDK: Error: Error parsing \Android\adt-bundle-windows-x86_64-20140702\sdk\system-images\android-22\android-wear\armeabi-v7a\devices.xml cvc-complex-type…

单调队列优化的背包问题

对于背包问题,经典的背包九讲已经讲的很明白了,本来就不打算写这方面问题了。 但是吧。 我发现,那个最出名的九讲竟然没写队列优化的背包。。。。 那我必须写一下咯嘿嘿,这么好的思想。 我们回顾一下背包问题吧。 01背包问题 …

用Python去除扫描型PDF中的水印

内容概述 含水印扫描型PDF文件,其中某页如下图所示,用Python去除其页顶及页底的水印。 处理思路:PDF中的每一页的水印的相对位置基本相同,将PDF每一页输出成图片,然后进行图片编辑,用白色填充方形覆盖水印…

链表实现栈

栈&#xff0c;是操作受限的线性表&#xff0c;只能在一端进行插入删除。 其实就是带尾指针的链表&#xff0c;尾插 #include <stdio.h> #include <stdlib.h> #define OK 1 #define ERROR 0 #define Status int #define SElemType int //只在头部进行插入和删除(…

二阶有源滤波器

滤波器是一种使用信号通过而同时抑制无用频率信号的电子装置, 在信息处理、数据传送和抑制干扰等自动控制、通信及其它电子系统中应用广泛。滤波一般可分为有源滤波和无源滤波, 有源滤波可以使幅频特性比较陡峭, 而无源滤波设计简单易行, 但幅频特性不如滤波器, 而且体积较大。…

用JS写了一个30分钟倒计时器

效果图 额外功能 左键单击计时器数字区&#xff0c;不显示或显示秒钟区。左键双击计时器数字区&#xff0c;暂停或启动计时器。计时完毕&#xff0c;只能刷新页面启动计时器。输入框可输入备注信息&#xff0c;输入框失去焦点或计时完毕后&#xff0c;时间戳附带备注信息会存入…

为什么高手离不了Linux系统?我想这就是理由!

通过本文来记录下我在Linux系统的学习经历&#xff0c;聊聊我为什么离不了Linux系统&#xff0c;同时也为那些想要尝试Linux而又有所顾忌的用户答疑解惑&#xff0c;下面将为你介绍我所喜欢的Linux系统&#xff0c;这里有一些你应该知道并为之自豪的事实。 这里你应该首先抛开W…

python学习实例(1)

# #1.2 计算机编程的基本概念 ## #1.2.2 从Python语言进入计算机语言的世界 ##<程序&#xff1a;例子1> def F(x,y):return(x*xy*y) print("F(2,2)",F(2,2)) print("F(3,2)",F(3,2))#<程序&#xff1a;例子2> def Pr():for i in range(0,10)…

用JS写一个电影《黑客帝国》显示屏黑底绿字雨风格的唐诗欣赏器

效果图 放码过来 <!DOCTYPE HTML> <html><head><meta http-equiv"Content-Type" content"text/html;charsetutf-8"/><title>Black Screen And Green Characters</title><style type"text/css">table…

python学习实例(2)

# #2.2 不同进制间的转换 ## #2.2.1. 二进制数转换为十进制数 ##<程序&#xff1a;2-to-10进制转换> binput("Please enter a binary number:") d0; for i in range(0,len(b)):if b[i] 1:weight 2**(len(b)-i-1)d dweight; print(d)#<程序&#xff1a;改…

元器件封装大全:图解+文字详述

先图解如下&#xff1a; 元器件封装类型&#xff1a; A.Axial  轴状的封装&#xff08;电阻的封装&#xff09;AGP &#xff08;Accelerate raphical Port&#xff09; 加速图形接口 AMR(Audio/MODEM Riser) 声音/调制解调器插卡BBGA&#xff08;Ball Grid Array&#xff09;…

python学习实例(3)

# #3.4 关于Python的函数调用 ## #3.4.2 Python函数入门 ##<程序&#xff1a;计算43*22> #函数f def f(x, y):return x*y*y#主函数部分 c4f(3, 2) print (c)# #3.4.3 局部变量(Local variables)与全局变量(Global variables) ##<程序&#xff1a;打印局部变量a和全局…

用JS写一个丐版《2048》小游戏

效果图 放马过来 <!DOCTYPE HTML> <html><head><meta http-equiv"Content-Type" content"text/html;charsetutf-8"/><title>2048</title><style type"text/css">.basic{height:80px;width:80px;back…

如何有效申请TI的免费样片

转自如何有效申请TI的免费样片 TI公司愿意为支持中国大学的师生们的教学、实验、创新实践、竞赛和科研项目&#xff0c;提供有限数量的免费样片。首先需要指出的是&#xff1a;所有的样片申请应该是诚实正当的&#xff0c;所有不恰当的申请&#xff08;包括不必要或多余的&…

python学习实例(4)

# #第四章的python程序 ## #4.1 简洁的Python ##<程序&#xff1a;Python数组各元素加1> arr [0,1,2,3,4] for e in arr:tmpe1print (tmp)## #4.2 Python内置数据结构 ## #4.2.1 Python基本数据类型 ##<程序&#xff1a;产生10-20的随机浮点数> import random f …

用Python批量生成字幕图片用于视频剪辑

说明 视频剪辑时需要为视频添加字幕&#xff0c;添加字幕方法之一&#xff1a;根据字幕文本文件批量生成透明底只有字幕内容的图片文件&#xff0c;如下图&#xff0c;然后将这些图片文件添加到视频剪辑软件轨道中。 于是用pillow这Python图片工具库执行本次批量生成工作。 …

关于接地:数字地、模拟地、信号地、交流地、直流地、屏蔽地、浮

除了正确进行接地设计、安装,还要正确进行各种不同信号的接地处理。控制系统中&#xff0c;大致有以下几种地线&#xff1a; &#xff08;1&#xff09;数字地&#xff1a;也叫逻辑地&#xff0c;是各种开关量&#xff08;数字量&#xff09;信号的零电位。 &#xff08;2&…

python学习实例(5)

# #5.1 计算思维是什么 ##<程序: 找假币的第一种方法> by Edwin Sha def findcoin_1(L):if len(L) <1:print("Error: coins are too few"); quit()i0while i<len(L):if L[i] < L[i1]: return (i)elif L[i] > L[i1]: return (i1)ii1print("All…

一个用LaTeX写长除法计算过程的示例

源码 \begin{array}{lr} & x1 \\ x1 \!\!\!\!\!\! & \overline{)x^2 2x 1} \\ & \underline{x^2\ \ x\ \ \ \ \ \ \ } \\ & x 1 \\ & \underline{x1} \\ & 0 \end{array}效果 x1x1⁣ ⁣ ⁣ ⁣ ⁣ ⁣)x22x1‾x2x‾x1x1‾0\begin{array}…

AltiumDesigner中PCB如何添加 Logo

AltiumDesigner中PCB如何添加 Logo 转载2015-10-29 00:07:55标签&#xff1a;it文化教育首先用到的画图软件&#xff0c;当然是大家熟悉的Altium Designer了&#xff0c;呵呵&#xff0c;相信很多人都用过这款画图软件吧&#xff08;现在电路设计一直在用&#xff09;&#xff…