栈的压入弹出序列 (C语言)

#include <stdio.h>
#include <stdlib.h>
/*弹出序列算法的思路:
依次将压入数组的元素压入栈中,每压一个元素,和弹出数组进行比较
top–
while循环判断,如果相同,弹出
如果不想同,top++,继续压入
*/
/栈的结构体/
typedef struct Stack{
int len;
int top;
int
*space;
}Stack;
/栈的初始化/
void initStack(Stack *s,int len)
{
s->len = len;
s->top = 0;
s->space = (int *)malloc(sizeof(int)*len);
}
/入栈/
void pushStack(Stack *s,int data)
{
s->space[s->top++]= data;
}
/出栈/
int popStack(Stack *s)
{
return s->space[–s->top];
}
/判空/
/判断栈是否为空/
int isStatckEmpty(Stack *s)
{
return s->top == 0;
}
int main(void)
{
Stack stack;
int instack[5]={0};
int output[5]={0};
int data;
int i,j=0,num;/num:序列个数 data:数据/

while(scanf("%d",&num) != EOF)
{
/*键盘输入,得到压入序列*/
    printf("stack \n");
    for(i=0;i<num;i++)
    {
        scanf("%d",&data);
        instack[i] = data;
    }
    /*键盘输入,得到弹出序列*/
    printf("output \n");
    for(i=0;i<num;i++)
    {
        scanf("%d",&data);
        output[i] = data;
    }
    /*栈的初始化*/
   initStack(&stack,num);
  for(i=0;i<num;i++)
  {
     /*入栈*/
     pushStack(&stack,instack[i]);
    stack.top--;   /*最关键的步骤*/
     while(stack.space[stack.top] == output[j])
     {
         /*出栈*/
         popStack(&stack);
         j++;
     }
    stack.top++;  /*最关键的步骤*/
 }

 if(isStatckEmpty(&stack)==1)
     printf("YES \n");
 else
     printf("NO  \n");
}
return 0;

}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

One Piece&

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值