任何人都可以在此程序中发现错误(在 2 个通用堆栈中查找相同元素的数量)

Can anyone discover an error in this program( finding the number of same elements in 2 generic stacks)?

本文关键字:查找 堆栈 元素 程序 都可以 发现 错误 任何人      更新时间:2023-10-16

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

编写一个函数 (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:A C D F堆栈 2: B C D E F G所以它应该返回 3,但它返回 0。

想法?

首先,我将按以下方式重写函数循环

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();
    }
}

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