C++ 中的字符栈实现有问题吗?

Issues with a char stack implementation in c++?

我想制作一个字符堆栈实现,但我认为它有问题,因为当我尝试将它用于我的其他功能时,它不工作,库堆栈工作。你能帮忙找个问题吗:

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

我想制作一个字符堆栈实现,但我认为它有问题,因为当我尝试将它用于我的其他功能时,它不工作,库堆栈工作。能不能帮忙找个问题: 提前致谢!

我认为您需要对 pushpop 函数进行一些更改才能使 Stack 正常工作

  • push 中,您应该将 arr[++t]=x; 放在 if 语句的外面而不是里面,因为如果当前大小小于其容量而不是等于

  • pop 中,您应该将 arr[--t]; 放在 if 语句之外,而不是放在里面,因为您要删除和 return 最后一个值如果堆栈不为空,则在数组中。当它为空时,您应该考虑 return 一个默认字符,例如空终止符 [=21=]。您还应该使用 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 '[=10=]';
    }
    return arr[t--];
}