前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >挑战数据结构和算法——栈的push、pop序列

挑战数据结构和算法——栈的push、pop序列

作者头像
felixzhao
发布2018-03-15 13:39:16
1.3K0
发布2018-03-15 13:39:16
举报
文章被收录于专栏:null的专栏null的专栏

题目来源“数据结构与算法面试题80道”。在此给出我的解法,如你有更好的解法,欢迎留言。

这里写图片描述
这里写图片描述

问题分析:本题考查栈的基本操作,栈是一种“先进后出”的数据结构。判断一个序列是否是栈的pop序列是一种常见的问题,可以通过模拟push和pop的过程,push和pop总是成对出现的,如:

这里写图片描述
这里写图片描述

方法:

代码语言:javascript
复制
#define push 1
#define pop -1

bool judge_push_pop(int *a, int *b, int len_a, int len_b){
    if (NULL == a || NULL == b || len_a != len_b) return false;
    int *p_a = a;
    int *p_b = b;
    int *op = (int *)malloc(sizeof(int) * len_a * 2);
    int index = 0;
    int i = 0;
    while(i < len_a){
        op[index] = push;

        index ++;

        if (*p_a == *p_b){
            p_b ++;
            op[index] = pop;
            index ++;
        }

        p_a ++;
        i ++;
    }
    while(index < len_a * 2){
        op[index++] = pop;
    }

    // judge
    int start = 0;
    int end = len_a * 2 - 1;
    while(start < end){
        if (op[start] + op[end] == 0){
            start ++;
            end --;
        }else return false;
    }

    return true;
    free(op);
}

$(".MathJax").remove();

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018年03月14日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档