判断出栈顺序是否合法

自己的代码

#include<stdio.h>  
#include <stdlib.h>
 
#define StackSize 1000  
typedef struct{  
    int data[StackSize];  
    // 用于指向栈顶元素  
    int top;  
}SeqStack,*Stack;  
  
void Push(Stack Ptr,int item)
{
	Ptr->data[++(Ptr->top)] = item;
} 

int Pop(Stack Ptr)
{
	if(Ptr->top == -1)
	{
		printf("栈空");
		return 0;
	}
	else
	{
		return	Ptr->data[(Ptr->top)--];
	}

} 
  
int main()  
{  
    int n,i,input,count=0,tag=1,out;  
    Stack S =  (Stack)malloc(sizeof(SeqStack));  
    scanf("%d",&n);  
    S->top = -1;
    for(i=0;i<n;i++)  
    {  
        if(S->top >  n)
		{
			break;
		}
	
		if(tag == 1)
		{
			Push(S,++count);
		}

		scanf("%d",&input);  

		while(S->data[S->top] != input)
		{
			if(S->top >  n)
			{
			
				break;
			}

			tag =1;
			Push(S,++count);
		}
        if(S->data[S->top] == input)
		{
			out = Pop(S);
			tag = 0;
			continue;
		}
		
    }  

	if(S->top == -1)
	{
		printf("Yes");
		
	}else
		printf("No");
}  


同学的

#include<stdio.h>
int train1[1000], train2[1000];
int main()
{
    int i, n, p=0, top = 0;
    scanf("%d",&n);
    for (i = 0; i < n; i++)
	{
        scanf("%d",&train2[i]);
		train1[top++] = i+1;
        while (train2[p] == train1[top-1])
		{
			p++;
            top--;
            if (top == 0){
                break;
            }
        }
    }
    if (top == 0)
        printf("Yes\n");
    else
        printf("No\n");
    return 0;
}

明天再理理思路,太开心了,画会儿

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值