如何解决C ++中的char堆栈实现有问题吗?
我想创建一个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]
({{1} })
t--
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。