您的位置:首页 > 编程语言 > C语言/C++

C++程序中关于堆栈程序的简单理解

2018-01-10 17:26 316 查看
#include "stack.h"

Stack::Stack()    // create an empty stack

{

    top = 0;

}

bool Stack::isempty() const

{

    return top == 0;

}

bool Stack::isfull() const

{

    return top == MAX;

}

bool Stack::push(const Item & item)

{

    if (top < MAX)

    {

        items[top++] = item;

        return true;

    }

    else

        return false;

}

bool Stack::pop(Item & item)

{

    if (top > 0)

    {

        item = items[--top];

        return true;

    }

    else

        return false;

}
首先想说的是push程序,push程序主函数中的s.pop(a)调用push函数,通过引用将a传递给引用变量item,这个如果看了原版的普拉达的书应该知道item 就是声明的无符号长整型变量,所以是可以划等号的,items[top++] = item;入栈存数据相信大家都能看懂吧,就是将进来的数据传递给存储的数组,然后top变量加1,也就相当于指针,指向下一个数组元素,所以对大部分1人来说,入栈是很好理解的,但是出栈很多人包括我,迷惑了好久。我硬是把pop函数作用理解偏了。item = items[--top];我先来解释一下这个时候,为什么选择top是先减一,然后再执行数组元素。因为此时,因为入栈以后,我们已经把top处理为指向为将要存储下一个数组元素的地址了,也就是它现在此时是待存状态,还没有存。但是我们已经处理了top++了,所以,当我们出栈的时候,首先必须将top先减1,然后我们再作赋值。item
= items[--top];,将其以前存储的元素赋值给引用变量item。然后将数据出栈,返回到主函数中,通过调用就完成了数据的出栈工作。

  可能理解的有偏差的地方,写给自己以后翻阅的。不喜勿喷,
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: