千家信息网

c#如何实现栈的压入、弹出序列

发表于:2025-01-23 作者:千家信息网编辑
千家信息网最后更新 2025年01月23日,这篇文章将为大家详细讲解有关c#如何实现栈的压入、弹出序列,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序
千家信息网最后更新 2025年01月23日c#如何实现栈的压入、弹出序列

这篇文章将为大家详细讲解有关c#如何实现栈的压入、弹出序列,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1、2、3、4、5是某栈的压栈顺序,序列4、5、3、2、1是该压栈序列对应的一个弹出序列,但4、3、5、1、2就不可能是该压栈序列的弹出序列。

首先,可以在第一个序列也就是压栈顺序中找第二个序列中第一个元素,是4,因为第二个序列中第一个元素是第一个被弹出的,那么在压入顺序中,被弹出数据之前的所有数据都被压入了栈中且还没有被弹出,也就是连续压进去了1、2、3、4,然后弹出第一个数据4;之后在第二个序列中往后的元素,是5,如果不是栈顶元素就在第一个序列中从4开始往后找继续压入再弹出,再次往后取第二个序列中的元素,如果是栈顶元素就弹出,直到栈空且两个序列都遍历一遍为止,否则,如果栈不为空且两个序列都遍历过了,则说明第二个序列不是压栈序列的弹出序列。

程序设计如下:

#include #include #include using namespace std;bool IsPopSeq(int *push_arr, int *pop_arr, size_t size){    assert(push_arr && pop_arr && size);//判断参数的有效性    stack s;    size_t push_index = 0;    size_t pop_index = 0;    while(pop_index < size)    {    //将输入队列中处于输出队列第一个元素之前的所有元素都压入栈内           while(push_index < size)        {            s.push(push_arr[push_index]);            ++push_index;            if(s.top() == pop_arr[pop_index])                break;        }        //判断,如果输入队列全部压完了但仍然没有找到输出队列的的第一个元素,就返回false        if((!s.empty()) && (s.top() != pop_arr[pop_index]))             return false;        //当栈中的元素恰好就是输出队列的弹出顺序时就不断的弹出        while((!s.empty()) && (pop_arr[pop_index] == s.top()))        {            s.pop();            ++pop_index;        }    }       //正确返回的条件就是当输入队列和输出队列都遍历完毕且栈为空时判断完成    if((push_index == size) && (pop_index == size) && s.empty())        return true;    else        return false;}int main(){    int push_arr[] = {1, 2, 3, 4, 5};    int pop_arr1[] = {4, 5, 3, 2, 1};    int pop_arr2[] = {4, 3, 5, 1, 2};    int pop_arr3[] = {2, 5, 3, 4, 1};    size_t size = sizeof(push_arr)/sizeof(push_arr[0]);    bool ret = IsPopSeq(push_arr, pop_arr1, size);    cout<

运行程序:

从上面的数组可以判断结果分别为true,false,false。

《完》

关于"c#如何实现栈的压入、弹出序列"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

序列 元素 队列 顺序 输入 输出 两个 数据 篇文章 c# 也就是 就是 更多 程序 不错 实用 有效 不断 内容 再次 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 软件开发 申请专利 海关网络安全等级保护工作 阿克苏塔式服务器维保费用 广州快律网络技术有限公司 邢台网络安全公司 大华视频存储服务器有什么用 企业网络安全架构开题报告 西门子300与第三方数据库 软件开发源文件可以给客户吗 阅读网络安全法读后感 广东安卓软件开发怎么样 网络安全知识小问答 精力软件开发 普陀区互联网络技术服务流程 oracle 容器数据库配置 东莞软件开发联系方式 全国网络安全技术与应用 无锡网络技术支持包括什么 笔记本网线dns服务器未响应 浙江企业软件开发咨询热线 数据库中in和=的区别 龚子馨互联网科技有限公司 ICT大赛网络安全试题 软件开发项目工作分解结构图 软件开发源文件可以给客户吗 abap下载内表到服务器 怎么让多台电脑访问同一个数据库 苏州网络技术推荐咨询 留学生软件开发 北京电视墙服务器设备
0