两个栈共用一个顺序存储空间的代码

 #include<iostream.h>
#define STACK_INIT_SIZE 10//存储的初始分配

struct Dblstack{
 int *base1;
 int *base2;
 int *top1;
 int *top2;
 int stacksize;//当前分配的存储空间,以元素为单位
};

int Initstack(Dblstack &s)
{//构造一个空的顺序栈s
 s.base1=new int[STACK_INIT_SIZE];
 if(!s.base1){cout<<"申请内存失败!n";return 0;}
 s.top1=s.base1+1;
 s.stacksize=STACK_INIT_SIZE;
 s.base2=s.base1+s.stacksize;
 s.top2=s.base2-1;
 return 1;
}

int emptystack(Dblstack &s,int i)
{//判断栈是否为空,是返回1,否则返回0
 if(i==1&&s.top1==s.base1+1||i==2&&s.top2==s.base2-1)
  return 1;
 else return 0;
}

int fullstack(Dblstack &s)
{//判断栈是否已经满,若栈满则返回1否则返回0
 if(s.top1==s.top2) return 1;
 else return 0;
}

int push(Dblstack &s,int i,int x)
{//插入元素x作为新的栈顶元素
 if(fullstack(s)){ cout<<"栈满n"; return 0;}
 else{
    if(i==1) {cout<<"插入操作成功!nn"; *s.top1++=x; }
 if(i==2) {cout<<"插入操作成功!nn"; *s.top2--=x; }
 }return 1;
}

int pop(Dblstack &s,int i,int &x)
{//若栈不为空则删除i栈中的栈顶元素用x返回,否则返回0
 if(emptystack(s,i)) return 0;
 else{
 if(i==1) {cout<<"出栈成功!出栈元素为:"; x=*--s.top1; }
 if(i==2) {cout<<"出栈成功!出栈元素为:"; x=*++s.top2; }
 }return 1;
}

int gettop(Dblstack &s,int i,int &x)
{//若栈不为空,则用x返回栈顶元素,并返回真,否则返回0
 if(emptystack(s,i)) return 0;
 else{
 if(i==1) { x=*(s.top1-1); cout<<"n出栈成功!栈顶为:"; }
 if(i==2) { x=*(s.top2+1); cout<<"n出栈成功!栈顶为:"; }
 }return 1;
}

int clearstack( Dblstack &s)
{//若栈为空返回1,否则将栈置为空后返回1
 if(emptystack(s,1)&&emptystack(s,

时间: 2024-10-16 01:31:12

两个栈共用一个顺序存储空间的代码的相关文章

包含min函数的栈和两个栈实现一个队列

题目:定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素.要求函数min.push以及pop的时间复杂度都是O(1). 分析:这是google的一道面试题. 看到这道题目时,第一反应就是每次push一个新元素时,将栈里所有逆序元素排序.这样栈顶元素将是最小元素.但由于不能保证最后push进栈的元素最先出栈,这种思路设计的数据结构已经不是一个栈了.在栈里添加一个成员变量存放最小元素(或最小元素的位置).每次push一个新元素进栈的时候,如果该元素比当前的最小元素还要小,则更新最小元素.

c#窗体-C#窗体程序,两台电脑共用一个数据库,如何连接

问题描述 C#窗体程序,两台电脑共用一个数据库,如何连接 C#窗体程序,在SQLHelper中连接数据库为我本机的ip地址,封装成安装包后,我自己的电脑可以正常运行,但是对方在程序运行时,1433端口已开启,防火墙已关闭,提示MS Sql server数据库连接不上,求大神指教 解决方案 看看数据库的远程连接是否开启了~

如何用两个栈实现一个队列,以及用两个队列实现一个栈

开始 再开始开始实现之前,首先将定读者已经理解了栈和队列的区别. 如果不理解的话,可以先看看这一篇,传送门:[算法]7 分不清栈和队列?一张图给你完整体会 用两个栈实现一个队列 这本来就是一道面试题,所以如果你感兴趣的话可以先自己实现一遍.这是队列的声明: template <typename T> class CQueue{ public: CQueue(void); ~CQueue(void); void appendTail(const T& node); T deleteHea

探讨:用两个栈实现一个队列(我作为面试官的小结)_C 语言

两年前从网上看到一道面试题:用两个栈(Stack)实现一个队列(Queue).觉得不错,就经常拿来面试,几年下来,做此题的应该有几十人了.通过对面试者的表现和反应,有一些统计和感受,在此做个小结. 用C++描述,题目大致是这样的: 已知下面Stack类及其3个方法Push.Pop和 Count,请用2个Stack实现Queue类的入队(Enqueue)出队(Dequeue)方法. 复制代码 代码如下: class Stack{-public:         void Push(int x);

两个栈实现一个队列

一.题目 用C++描述,题目大致是这样的: 已知下面Stack类及其3个方法Push.Pop和 Count,请用2个Stack实现Queue类的入队(Enqueue)出队(Dequeue)方法. class Stack { - public: void Push(int x); // Push an element in stack; int Pop(); // Pop an element out of stack; int Count() const; // Return the numbe

两个版本共用一个环信IM环境

问题描述 我们的APP有两个版本,老师版和学生版,那么问题是,推送证书要分别上传么?用户体系可以共用么?是不是要在环信后台要创建两个应用啊? 解决方案 可以共用体系.如果要两个APP实现通信的话,只要appkey一致就可以了.

交换问题-两个数交换,但不加入第三个数,对于这样的做法具体栈中是怎么一个顺序?

问题描述 两个数交换,但不加入第三个数,对于这样的做法具体栈中是怎么一个顺序? 两个数交换,但不加入第三个数,对于 int num1 =1; int num2 =2; System.out.println("交换前---num1="+num1+" num2="+num2); num2 = num1 +(num1 = num2)*0; System.out.println("交换后---num1="+num1+" num2="+

int-迷宫问题求用一个更好的办法代替两个栈

问题描述 迷宫问题求用一个更好的办法代替两个栈 #include #include #define M 20 //最大行数 #define N 20 //最大列数 struct mark //定义迷宫内点的坐标类型 { int x; //行值 int y; //列值 }; struct Element //链栈元素结点 { int x,y; //x行,y列 int d; //d下一步的方向 }; struct LStack //链栈 { Element elem; struct LStack *

两个工程共用代码-不同JSP工程共用一个类文件夹

问题描述 不同JSP工程共用一个类文件夹 我有一些代码段,或者说代码库 放在一个类文件夹下面的.然后我别的工程要调用这些代该怎么去设置? 不想打包,因为这些代码随时可能要改的. 可以理解为两个Eclipse共用一段代码,而且两个工程里都可以随时改代码,并且跟新 解决方案 试试设置CLASSPATH包含你的代码目录 解决方案二: Eclipse里面可以设置,让一个项目的buildpath里包含工作空间中的另一个项目. 解决方案三: 可以使用挂载点共享文件夹. 解决方案四: 步骤:右击工程名,选bu