两栈共享

首先为两个栈申请一个共享的一维数组空间S[M],将两个栈分别放在在一维数组的两端,分别是0和M-1: 

#include <iostream>

using namespace std;

#define TRUE 1

#define FALSE 0

#define M 100

struct Stack

{

       int elem[M];

       int top[2];  /*用来存放栈顶元素的下标*/

};

void InitStack(Stack *s) /* 构建一个空栈S */

{

       s->top[0]=-1;

       s->top[1]=M;

}

 

int Push(Stack *s,int x,int i) /*把数据元素X压入i号堆栈 */

{

       if(s->top[0]+1==s->top[1]) return FALSE; /*栈已满*/

       switch(i)

       {

       case 0:

              s->top[0]++;

              s->elem[s->top[0]]=x;

              break;

       case 1:

              s->top[1]--;

              s->elem[s->top[1]]=x;

              break;

       default: /*参数错误*/

              return FALSE;

       }

       return TRUE;

}

 

 

 

int Pop(Stack *s,int * x,int i)/*将i号栈顶元素弹出,放到X所指的存贮空间中*/

{

       switch(i)

       {

       case 0:

              if(s->top[0]==-1)  return FALSE;

              *x=s->elem[s->top[0]];

              s->top[0]--;

              break;

       case 1:

              if(s->top[1]==M)  return FALSE;

              *x=s->elem[s->top[1]];

              s->top[1]++;

              break;

       default:

              return FALSE;

       }

       return TRUE;

 

}

 

int Get_Top(Stack *s,int *x,int i)

{

       switch(i)

       {

       case 0:

              if(s->top[0]==-1)  return FALSE;

              *x=s->elem[s->top[0]];

              break;

       case 1:

              if(s->top[1]==M)  return FALSE;

              *x=s->elem[s->top[1]];

              break;

       default:

              return FALSE;

       }

       return TRUE;

}

 

int main()

{

       Stack s,*S;

       int x;

       S=&s;

       InitStack(S);

       Push(S,3,0);

       Push(S,4,1);

       Pop(S,&x,0);

       Get_Top(S,&x,0);

       cout<<x<<endl;

 

       return 0;

}

转载于:https://www.cnblogs.com/ZHX-Amy/archive/2012/07/24/2607050.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 1)顺序栈的初始化:创建一个数组作为栈的存储空间,设置栈顶指针为-1,表示栈为空。 2)置空栈:将栈顶指针设置为-1,表示栈中没有元素。 3)元素入栈:将元素压入栈顶,栈顶指针加1。 4)元素出栈:将栈顶元素弹出,栈顶指针减1。 5)打印栈中元素:从栈顶开始遍历栈中元素,依次输出。 6)实现两栈共享一连续存储空间的基本运算:将数组分为两部分,分别作为两个栈的存储空间。设置两个栈顶指针,分别指向两个栈的栈顶。元素入栈时,根据栈的编号选择对应的栈顶指针进行操作;元素出栈时同理。 ### 回答2: 顺序栈是基于数组实现的一种栈结构,其基本运算包括:1)顺序栈的初始化;2)置空栈;3)元素入栈;4)元素出栈;5)打印栈中元素;6)实现两栈共享一连续存储空间的基本运算。以下详细介绍每个运算的实现方法。 1.顺序栈的初始化 顺序栈的初始化包括定义数组并初始化栈顶指针。一般情况下,栈顶指针会初始化为-1。例如,定义大小为10的数组作为顺序栈: int stack[10]; int top = -1; 2.置空栈 置空栈就是将栈顶指针重置为-1,表示栈中没有任何元素。通常会在初始化后调用此操作。例如: top = -1; 3.元素入栈 元素入栈操作会将待入栈元素放在栈顶位置,并将栈顶指针加1。入栈操作需要先进行判断,确保栈未满。例如: if (top == 9) { printf("Stack is full!"); } else { top++; stack[top] = element; } 4.元素出栈 元素出栈操作会将栈顶元素弹出,并将栈顶指针减1。出栈操作也需要先进行判断,确保栈不为空。例如: if (top == -1) { printf("Stack is empty!"); } else { element = stack[top]; top--; } 5.打印栈中元素 打印栈中元素操作会遍历整个栈,并输出每个元素。这可以通过一个for循环来实现。例如: for (int i = top; i >= 0; i--) { printf("%d\n", stack[i]); } 6.实现两栈共享一连续存储空间的基本运算 两栈共享一连续存储空间需要注意的是,两个栈的栈底分别位于数组的两端,而栈顶指针向中间移动。实现两栈共享一个存储空间,首先需要定义两个栈顶指针,分别指向两个栈的栈顶元素。例如: int stack[10]; int top1 = -1; int top2 = 10; 接下来,就可以按照前面的方法实现入栈、出栈和打印栈中元素操作。需要注意的是,入栈和出栈操作需要根据栈的编号分别判断栈满和栈空的情况,如: if (stack == 1) { if (top1 == 9) { printf("Stack 1 is full!"); } else { top1++; stack[top1] = element; } } else if (stack == 2) { if (top2 == 0) { printf("Stack 2 is full!"); } else { top2--; stack[top2] = element; } } ### 回答3: 1、顺序栈的初始化:首先需要给栈分配一块连续的存储区域,然后将指向栈顶的指针top初始化为-1,表示当前栈为空。 2、置空栈:将栈顶指针top的值置为-1即可,表示栈中没有任何元素。 3、元素入栈:将需要入栈的元素放入栈顶位置,将top指针加1。 4、元素出栈:将栈顶元素弹出,将top指针减1。 5、打印栈中元素:遍历整个栈,从栈底到栈顶,将每个元素依次输出。 6、实现两栈共享一连续存储空间的基本运算:共享两个栈的存储空间需要分配给每个栈一定的存储空间,所以需要定义两个指针top1和top2来分别指向两个栈顶。在进行入栈操作时,需要判断两个栈是否已满,如果其中一个栈满了,则不能再进行入栈操作;在进行出栈操作时,需要判断两个栈是否已空,如果其中一个栈为空,则不能再进行出栈操作。同时需要注意的是,两个栈的存储空间需要合理分配,避免出现栈空间的交叉覆盖问题。实现两个共享一段存储空间的基本思路是将两个栈的栈底分别设置在存储空间两端两个指针向中间移动,直到两个指针相遇。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值