网创优客建站品牌官网
为成都网站建设公司企业提供高品质网站建设
热线:028-86922220
成都专业网站建设公司

定制建站费用3500元

符合中小企业对网站设计、功能常规化式的企业展示型网站建设

成都品牌网站建设

品牌网站建设费用6000元

本套餐主要针对企业品牌型网站、中高端设计、前端互动体验...

成都商城网站建设

商城网站建设费用8000元

商城网站建设因基本功能的需求不同费用上面也有很大的差别...

成都微信网站建设

手机微信网站建站3000元

手机微信网站开发、微信官网、微信商城网站...

建站知识

当前位置:首页 > 建站知识

c#如何实现栈的压入、弹出序列-创新互联

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

成都创新互联于2013年开始,是专业互联网技术服务公司,拥有项目成都网站建设、网站设计网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元宜黄做网站,已为上家服务,为宜黄各地企业和个人服务,联系电话:13518219792

  输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列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<

运行程序:

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

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

《完》

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

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


文章名称:c#如何实现栈的压入、弹出序列-创新互联
网址分享:http://bjjierui.cn/article/cdscoi.html

其他资讯