【问题标题】:Sorting a stack using recursion and without using extra space使用递归和不使用额外空间对堆栈进行排序
【发布时间】:2018-11-08 20:14:02
【问题描述】:

我正在尝试编写代码以在不使用额外空间的情况下对堆栈进行排序。这在逻辑上是正确的,但我的输出是完全随机的。有人能指出我的错误吗?

void insertatsortstack(int element, stack<int> s){

    if(s.empty()==1 || element > s.top())
    {
        s.push(element);
        return;
    }

    int temp=s.top();
    s.pop();
    insertatsortstack(element,s);
    s.push(temp);
}

void sortstack(stack<int> s){
    if(s.size()>0){
        int element=s.top();
        s.pop();
        sortstack(s);
        insertatsortstack(element,s);
    }
}

【问题讨论】:

  • 缩进似乎也是随机的,所以很难阅读……你试过Valgrind吗?如果结果是随机的,我怀疑有一些内存损坏。
  • it is logically correct but my output is completely random ...这不是完全矛盾吗?你真的有一个现实世界需要这样做,还是这是一个家庭作业问题?我的投票是使用堆栈进行排序。相反,弹出一个像数组这样的数据结构,它更容易用于排序。然后,之后重新加载堆栈。
  • 当我按照我的说法进行试运行时,它是正确的,是的,它不是作业问题。我正在解决来自 gfg 的问题,以详细了解并使其对我即将到来的安置有用
  • 在旁注中,你说你实现这个是为了不使用额外的空间,但我认为你失败了。因为,由于您使用递归,因此最终在运行时堆栈中消耗了大量空间......
  • 试着用英文写下你想让你的代码做什么。一步步。使用一副纸牌或一堆硬币,手动模拟这些步骤。 然后编写代码以在计算机上实现该解决方案。

标签: recursion data-structures stack


【解决方案1】:

我认为您来自 Java 背景。您在函数中传递值,这将复制您的堆栈并且您的原始堆栈不会被更改。您需要通过引用传递值。

void insertatsortstack(int element, stack<int> & s);
void sortstack(stack<int> &s);

Working Code Implementation

(假设你使用的是std::stack)

【讨论】:

    【解决方案2】:

    #include 使用命名空间标准;

    无效 insertatsortstack (int element, stack &s) {

    if (s.empty () == 1 || 元素 > s.top ())

    {
      
    

    s.push(元素);

    返回;

    }

    int temp = s.top ();

    s.pop();

    插入排序堆栈(元素,s);

    s.push (temp);

    }

    无效

    sortstack(栈&s) {

    if (s.size() > 0) {

    int element = s.top();

    s.pop();

    排序栈;

    插入排序堆栈(元素,s);

    }

    }

    int

    主() {

    s;

    s.push(5);

    s.push(1);

    s.push(4);

    s.push(3);

    s.push(6);

    s.push(9);

    s.push(2);

    s.push(3);

    s.push(8);

    排序栈;

    while (s.empty () == false) {

    cout

    s.pop();

    }

    }

    【讨论】:

    猜你喜欢
    • 2019-05-05
    • 2023-04-11
    • 2014-03-20
    • 2015-01-14
    • 2021-09-03
    • 2021-11-02
    • 1970-01-01
    • 2020-12-04
    • 2011-06-17
    相关资源
    最近更新 更多