声明空堆栈的最有效方法是什么

What is the most efficient way to declare an empty stack?

本文关键字:有效 方法 是什么 堆栈 声明      更新时间:2023-10-16

2个类(不使用库中的堆栈)

堆栈和节点

int Stack::pop(void)
{
  int ret = 0;
  if (top == nullptr)
  {
      cout<<"Empty";
  }
else
  {
  ret = top->getValue(); //show value
  }
return ret;
}

同时在主中

cout<< myAlreadyDeclaredStack.pop();
output:  Empty0

我的问题是字符串后面会有一个0(因为该方法需要返回一个int)

朋友们,有什么想法吗?

如果你绝对想避免异常(尽管我不认为它们像你想象的那样效率低下),你可以做几件事。

  1. 如果堆栈总是存储int(或数字)变量,则可以使用预定义的"错误"返回,如numeric_limits<int>::min()

  2. 您可以有一个pop()版本,它采用变量引用IE bool pop(int& val),将val更改为弹出值,如果堆栈为空,则返回false。

我相信还有其他解决方案,但我想到了这两个。我真的不明白你为什么对使用异常如此犹豫,但它们基本上适用于这种情况。

 if(top!= NULL)      
 {
    ret = top->getVal();      
 }       
 else     
 {            
 throw "Stack Empty";        
 }
 int main(void)
 try
 {
 cout<< myAlreadyDeclaredStack.pop();
 }
 catch (const char* msg)
 {
  cout<< msg <<endl;
 }

对我来说似乎很难看,每次在方法中都必须处理异常,总的来说似乎效率很低。

这是唯一的方法/最有效的方法吗?(毕竟,堆栈是关于速度的)

这是个好主意,但很难实现

void Stack::isEmpty(void)
{
 if (top == nullptr)
     cout<<" Empty"
 else
     top.pop();
}
 main
 declaredStack.isEmpty();  //wouldn't return a value (to maybe use/manipulate it)
  //, just display it  --if I set it to display in pop()
 //and if I put isEmpty in pop I'm back to having to return a value