java中一个数组实现两个栈_C语言在一个数组中实现两个栈

在一个数组中实现两个栈,并实现入栈,出栈操作

#include

#include

#define ERROR 1e8

typedef int ElementType;

typedef enum { push, pop, end } Operation;

typedef enum { false, true } bool;

typedef int Position;

struct SNode {

ElementType *Data;

Position Top1, Top2;

int MaxSize;

};

typedef struct SNode *Stack;

Stack CreateStack( int MaxSize );

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

ElementType Pop( Stack S, int Tag );

Operation GetOp(); /* details omitted */

void PrintStack( Stack S, int Tag ); /* details omitted */

int main()

{

int N, Tag, X;

Stack S;

int done = 0;

scanf("%d", &N);

S = CreateStack(N);

while ( !done ) {

switch( GetOp() ) {

case push:

scanf("%d %d", &Tag, &X);

if (!Push(S, X, Tag)) printf("Stack %d is Full!\n", Tag);

break;

case pop:

scanf("%d", &Tag);

X = Pop(S, Tag);

if ( X==ERROR ) printf("Stack %d is Empty!\n", Tag);

break;

case end:

PrintStack(S, 1);

PrintStack(S, 2);

done = 1;

break;

}

}

return 0;

}

Stack CreateStack( int MaxSize ){

Stack S = (Stack)malloc(sizeof(struct SNode));

S->MaxSize = MaxSize;

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

S->Top2 = MaxSize;

S->Top1 = -1;

return S;

}

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

if(S == NULL)

return false;

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

printf("Stack Full\n");

return false;

}

if(1 == Tag){

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

return true;

}

else if (2 == Tag){

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

return true;

}

return false;

}

ElementType Pop( Stack S, int Tag ){

if(S == NULL)

return ERROR;

if(1 == Tag){

if(-1 == S->Top1){

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

return ERROR;

}

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

}else if(2 == Tag){

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

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

return ERROR;

}

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

}

return ERROR;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值