如何使用STACK查找最大值 [英] How To Find Maximum Value Using STACK

查看:157
本文介绍了如何使用STACK查找最大值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是我的代码..

我被困在这里..请帮助..

它有时会给出真正的价值而不是每个场景.. :(



  #include   <   iostream  >  
使用 命名空间标准;



模板< class T>
class 堆栈
{
private
int MaxSize;
int stkptr;
T * stackArray;
Stack( const Stack& other); < span class =code-comment> // disallow copy
Stack& operator =( const Stack&其他); // 禁止分配
public
Stack( int size);
~Stack();
void push( const T&);
T pop();
bool isFull();
bool isEmpty();
T top();
};
模板< class T>
T Stack< T> :: top()
{
if (stkptr!= - 1
return stackArray [stkptr];
// stkptr ++;
}
template < class T>
Stack< T> :: Stack( int size)
{
if (size> 0
{
MaxSize = size;
stackArray = new T [MaxSize];
stkptr = 0 ;
}
else
cout<< 大小应为+ _VE。<< ENDL;
}
模板< class T>
Stack< T> :: ~Stack()
{
delete [] stackArray;
}
模板< class T>
void Stack< T> :: push( const T& elem)
{
if (!isFull())
{
stackArray [stkptr] = elem;
stkptr ++;
}
其他
cout<< 堆栈已满。<< ENDL;
}
模板< class T>
T Stack< T> :: pop()
{
if (!isEmpty())
{
stkptr--;
return stackArray [stkptr];
}
else
cout<< 堆栈为空。<< ENDL;
}
模板< class T>
bool Stack< T> :: isEmpty()
{
return stkptr == 0 ;
}
模板< class T>
bool Stack< T> :: isFull()
{
return stkptr == MaxSize;
}

int main()
{
const int n = 5 ;
Stack< int> STK(N);
stk.push( 1 );
stk.push( 31 );
stk.push( 14 );
stk.push( 11 );
stk.push( 9 );


cout<< endl<< 搜索最大!!!<< ENDL;

int Max = stk.pop();
cout<<最大;
while (!stk.isEmpty())
{
if (stk.pop()> Max)
{
Max = stk.pop(); // 此声明看起来很奇怪..
}
}
cout<<最大<< \ n \ n;

return 0 ;
}



任何建议都会受到赞赏..

我刚刚找到了最老练的老师.. :(

解决方案

您可以在此处跳过一个值并将下一个值分配给 Max

<前一个=c ++> 如果(stk.pop()> Max)
{
Max = stk.pop (); // 此语句看起来很奇怪..
}



而是将弹出值赋给变量并检查最大值:

  int  cur = stk.pop(); 
if (cur> Max)
{
Max = cur;
}


Here Is My Code ..
I'm trapped in here .. Please Help .. .
It Some Times Gives The True Value But Not For Every Scenario .. :(

#include <iostream>
using namespace std;



template <class T>
class Stack
{
private:
    int MaxSize;
    int stkptr;
    T *stackArray;
    Stack(const Stack &other); // disallow copy
    Stack& operator =(const Stack& other); // disallow assignment
public:
    Stack(int size);
    ~Stack();
    void push (const T &);
    T pop( );
    bool isFull();
    bool isEmpty();
    T top();
};
template<class T>
T Stack<T>::top()
{
    if(stkptr != -1)
        return stackArray[stkptr];
//	stkptr++;
}
template <class T>
Stack<T>::Stack(int size)
{
    if(size > 0)
    {
    MaxSize = size;
    stackArray = new T[MaxSize];
    stkptr = 0;
    }
    else
        cout<<"Size Should Be +_VE. " << endl;
}
template <class T>
Stack<T>::~Stack()
{
    delete []stackArray;
}
template <class T>
void Stack<T>::push(const T &elem)
{
    if (!isFull())
    {
    stackArray[stkptr] = elem;
    stkptr++;
    }
    else
    cout <<"Stack Is Full. " << endl;
}
template <class T>
T Stack<T>::pop()
{
    if (!isEmpty())
    {
    stkptr--;
    return stackArray[stkptr];
    }
    else
    cout<<"Stack Is Empty. "<< endl;
}
template <class T>
bool Stack<T>::isEmpty()
{
    return stkptr == 0;
}
template <class T>
bool Stack<T>::isFull()
{
    return stkptr == MaxSize;
}

int main()
{
    const int n = 5;
    Stack<int> stk(n);
    stk.push(1);
    stk.push(31);
    stk.push(14);
    stk.push(11);
    stk.push(9);


    cout << endl << "Search Max .!!! " << endl;

    int Max = stk.pop();
	cout << Max;
    while(!stk.isEmpty())
    {
		if(stk.pop() > Max)
        {
			Max = stk.pop(); // This statement looks Wierd.. 
        }
    }
    cout << Max << "\n\n";

    return 0;
}


Any Suggestions Would Be Appreciated ..
I just Got The DUMBEST Teacher Ever .. . :(

解决方案

You may skip one value here and assign the next to Max:

if(stk.pop() > Max)
{
    Max = stk.pop(); // This statement looks Wierd..
}


Instead assign the popped value to a variable and check that for maximum:

int cur = stk.pop();
if (cur > Max)
{
    Max = cur;
}


这篇关于如何使用STACK查找最大值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆