判断字符串是否是栈的输出

炸的一看,好像看不懂这个是什么意思。
但是只要嘻嘻想一下就明白了:
a,b,c,d,e按顺序入栈,出栈顺序随意,并且在进栈的过程中可以出栈,列出所有可能情况
比如a,b,c,d,e就是该字符串的栈的输出,再比如c,a,b,e,d就不是该字符串栈的输出。

分析如下:
这里写图片描述

代码实现:
strstack.c:

#include "seqstack.h"
//arr为入栈字符串,cur为测试字符串,len为arr和cur的长度
int str_judge(char* arr,char* cur,int len)
{
    if(arr == NULL || cur == NULL)
    {
        return -1;
    }

    seqstack stack;
    seqstackInit(&stack);

    int i = 0;
    int j = 0;
    while(1)
    {
        //入栈
        if(i < len)
        {
            seqstackPush(&stack,arr[i++]);
        }
        //比较栈顶元素和测试字符串
        if(seqstackGetTop(&stack) == cur[j])
        {
            seqstackPop(&stack);//相等,出栈
            j++;//测试字符串移位
            if(stack.size != 0)//判断当前栈是否为空
            {
                if(seqstackGetTop(&stack) == cur[j])//不为空继续比较栈顶和测试字符串
                {
                    seqstackPop(&stack);
                    j++;
                }
            }
        }    
        if(i == len)//入栈字符串已全部入栈
        {
            if(stack.size != 0)
            {
                if(seqstackGetTop(&stack) != cur[j])
                {
                    break;
                }
            }
        }
        if(j == len)//测试字符串已遍历完(其实在这儿已经确定了YES)
        {
            break;
        }
    }
    if(stack.size == 0)//查看当前栈是否为空
    {
        return 1;//YES
    }
    else
    {
        return 0;//NO
    }
}

int main()
{
    char arr[] = {'a','b','c','d','e'};
    char cur1[] = {'a','b','c','d','e'};
    char cur2[] = {'e','d','c','b','a'};
    char cur3[] = {'d','e','c','b','a'};
    char cur4[] = {'d','c','e','a','b'};
    char cur5[] = {'e','d','c','b','a'};
    int len = sizeof(arr)/sizeof(arr[0]);

    printf("入栈字符串:%s\n",arr);
    printf("测试字符串:%s ,正确值为:1,测试值:%d\n",cur1,str_judge(arr,cur1,len));
    printf("测试字符串:%s ,正确值为:1,测试值:%d\n",cur2,str_judge(arr,cur2,len));
    printf("测试字符串:%s ,正确值为:1,测试值:%d\n",cur3,str_judge(arr,cur3,len));
    printf("测试字符串:%s ,正确值为:0,测试值:%d\n",cur4,str_judge(arr,cur4,len));
    printf("测试字符串:%s ,正确值为:1,测试值:%d\n",cur5,str_judge(arr,cur5,len));
    return 0;
}

效果实例:
这里写图片描述

猜你喜欢

转载自blog.csdn.net/q496958148/article/details/80217865