c++ - C++中的char堆栈实现有问题吗?

标签 c++ stack implementation

我想做一个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堆栈实现,但是我认为它有问题,因为当我尝试将其用于其他功能时,它不起作用并且库堆栈无法工作。您能帮忙找到问题吗:
先感谢您!

最佳答案

我认为您需要对pushpop函数进行一些更改才能使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/

    相关文章:

    c++ - 检测类型

    c++ - 为什么 range::unique_copy 不能与 std::ostream_iterator 一起使用?

    c - C中的内联字符串数组是否分配在堆栈上?

    java - java中的数组到堆栈,并删除运算符

    c++ - 如何正确删除 std::stack 中的指针?

    algorithm - 将二元决策图转换为真值表

    c++ - 重新分配新分配的内存是否安全?

    c# - 如何在不使用WMI的情况下获取拥有进程的用户名?

    xcode - 如何在 swift 中使用performSelector 的默认协议(protocol)实现?

    python父类 'wrapping'子类方法