我想做一个char堆栈实现,但是我认为它有问题,因为当我尝试将其用于其他功能时,它不起作用并且库堆栈无法工作。您能帮忙找到问题吗?
using namespace std;
Stack::Stack(int size)
{
arr = new char[size];
capacity = size;
t = -1;
}
int Stack::size()
{
return (t + 1);
}
Stack::~Stack()
{
delete[] arr;
}
bool Stack::empty()
{
return size()==0;
}
void Stack::push(char x)
{
if (size()==capacity) {
cout<<"Push to full stack";
arr[++t]=x;
}
}
char Stack::pop()
{
if (empty()) {
cout<<"Pop from empty stack";
--t;
}
return 0;
}
char Stack::top()
{
if (!empty())
return arr[t];
else
cout<<"Top of the stack is empty";
return 0;
}
我想做一个char堆栈实现,但是我认为它有问题,因为当我尝试将其用于其他功能时,它不起作用并且库堆栈无法工作。您能帮忙找到问题吗:先感谢您!
最佳答案
我认为您需要对push
和pop
函数进行一些更改才能使Stack
工作
push
中,应该将arr[++t]=x;
放在if
语句的外部,而不是放在内部,因为如果当前大小小于其容量而不是等于它的容量,则想向arr
添加值pop
中,您应该将arr[--t];
放在if
语句的外部,而不是放在内部,因为要删除并在堆栈不为空时返回数组中的最后一个值。如果为空,则应考虑返回默认字符,例如空终止符\0
。您还应该使用arr[t--]
而不是arr[--t]
,因为最后一个元素当前在t
上,因此您希望它在减小arr[t]
的值之前对其进行评估(t--
)void Stack::push(char x)
{
if (size()==capacity) {
cout<<"Push to full stack";
return;
}
arr[++t]=x;
}
char Stack::pop()
{
if (empty()) {
cout<<"Pop from empty stack";
return '\0';
}
return arr[t--];
}
关于c++ - C++中的char堆栈实现有问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64351637/