-1

这是我大学的算法和数据结构课程中的一个问题,具体如下:

编写一个函数(presjek),它接收 2 个通用堆栈并找到它们中相同的元素数量,并将其返回。

我已经知道微不足道的解决方案,所以这是不可能的。

这是我的代码:

int presjek(NizStek<T> s1, NizStek<T> s2){


    int br = 0;
    while(true){

        if( s1.vrh() < s2.vrh()) {s1.skini();  }
        else if(s1.vrh() > s2.vrh()) {s2.skini(); }
        else if( s1.vrh() == s2.vrh()){
            br++;
            s1.skini();
            s2.skini();

        }

        if((s1.brojElemenata() == 0) || (s2.brojElemenata() == 0)) break;
    }


    return br;
}

附加信息:函数 vrh 返回堆栈顶部的元素

函数 skini 移除顶部元素

函数 brojElemenata 返回堆栈中的元素数

堆栈被实现为动态数组

我已经在以下示例中对其进行了测试:堆栈 1:ACDF 堆栈 2:BCDEFG 所以它应该返回 3,但它返回 0。

想法?

4

1 回答 1

1

首先我会用以下方式重写函数循环

while ( ( s1.brojElemenata() != 0 ) && ( s2.brojElemenata() != 0 ) )
{

    if ( s1.vrh() < s2.vrh() ) 
    {
        s1.skini();  
    }
    else if ( s1.vrh() > s2.vrh() ) 
    {
        s2.skini(); 
    }
    else 
    {
        br++;
        s1.skini();
        s2.skini();
    }
}

至于你的问题,那么你应该检查类 NizStek 的复制构造函数。您确定函数内部 s1.brojElemenata() 和 s2.brojElemenata() 不等于零吗?

于 2013-11-04T19:50:42.010 回答