在一个数组中实现两个堆栈

6-1 在一个数组中实现两个堆栈

分数 40

作者 陈越

单位 浙江大学

本题要求在一个数组中实现两个堆栈。

 

函数接口定义:

Stack CreateStack( int MaxSize );

bool Push( Stack S, ElementType X, int Tag );

ElementType Pop( Stack S, int Tag );

其中Tag是堆栈编号,取1或2;MaxSize堆栈数组的规模;Stack结构定义如下:

 

typedef int Position;

struct SNode {

    ElementType *Data;

    Position Top1, Top2;

    int MaxSize;

};

typedef struct SNode *Stack;

注意:如果堆栈已满,Push函数必须输出“Stack Full”并且返回false;如果某堆栈是空的,则Pop函数必须输出“Stack Tag Empty”(其中Tag是该堆栈的编号),并且返回ERROR。

输入样例:

5

Push 1 1

Pop 2

Push 2 11

Push 1 2

Push 2 12

Pop 1

Push 2 13

Push 2 14

Push 1 3

Pop 2

End

输出样例:

Stack 2 Empty

Stack 2 is Empty!

Stack Full

Stack 1 is Full!

Pop from Stack 1: 1

Pop from Stack 2: 13 12 11

 

 

 

            

Stack CreateStack( int MaxSize )

{

 Stack s=(struct SNode*)malloc(sizeof(struct SNode));

 s->Data=(ElementType *)malloc(sizeof(ElementType)*MaxSize);

 s->Top1 =-1;

 s->Top2 =MaxSize;

 s->MaxSize =MaxSize;

 return s;

}

bool Push( Stack S, ElementType X, int Tag )

{

 if(!S)

 {

  return false;

 }

 if(S->Top1+1==S->Top2 )

 {

  printf("Stack Full\n");

  return false;

 }

 if(Tag==1)

 {

  S->Data[++S->Top1]=X;

 }else{

  S->Data[--S->Top2]=X;

 }

 return true;

}

ElementType Pop( Stack S, int Tag )

{

 if(!S)

 {

  return ERROR;

 }

 if(Tag==1)

 {

  if(S->Top1==-1)

  {

   printf("Stack %d Empty\n",Tag);

   return ERROR; 

  }

  return S->Data[S->Top1--];

  

 }

 if(S->Top2==S->MaxSize)

 {

  printf("Stack %d Empty\n",Tag);

  return ERROR;

 }

 return S->Data[S->Top2++];

}

 

        

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值