判定字符串是否按照出栈顺序

本文介绍了一个使用栈来判断输入序列是否能通过特定顺序输出的算法。该算法通过一系列的测试用例验证了其正确性,例如,对于输入序列{'a','b','c','d','e'}

所用栈相关知识请参照:>数据结构之栈的基本操作<

基本原理:

描述

实现代码:

#include <stdio.h>
#include "seqstack.h"

int IsStackOrder(char input[], size_t input_size, char output[], size_t output_size){
    SeqStack stack;
    SeqStackInit(&stack);
    size_t output_index = 0;
    size_t input_index = 0;
    for(; input_index < input_size; ++input_index){
        SeqStackPush(&stack,input[input_index]);
        SeqStackType top;
        while(SeqStackTop(&stack, &top)){
            if(output_index >= output_size){
                break;
            }
            if(top == output[output_index]){
                ++output_index;
                SeqStackPop(&stack);
            }
            else{
                break;
            }
        }
    }
    if(output_index == output_size && SeqStackSize(&stack) == 0){
        return 1;
    }
    return 0;
}

void Test1(){
    char input[] = {'a','b','c','d','e'};
    size_t input_size = sizeof(input)/sizeof(input[0]);
    char output[] = {'a','b','e','d','c'};
    size_t output_size = sizeof(output)/sizeof(output[0]);
    int ret = IsStackOrder(input, input_size, output, output_size);
    printf("ret expect 1, actual %d\n",ret);
}

void Test2(){
    char input[] = {'a','b','c','d','e'};
    size_t input_size = sizeof(input)/sizeof(input[0]);
    char output[] = {'a','b','e','c','d'};
    size_t output_size = sizeof(output)/sizeof(output[0]);
    int ret = IsStackOrder(input, input_size, output, output_size);
    printf("ret expect 0, actual %d\n",ret);
}
int main(){
    Test1();
    Test2();
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值