C ++ - 使用单链接列表的Stack Pop()函数

时间:2010-10-31 22:59:42

标签: c++ stack linked-list

对于初学者来说,这是我目前的数据结构课程作业的一部分。我不是在寻求答案,我正在寻求帮助。

我有一个实现链接列表而不是数组的堆栈类。我目前正在尝试编写pop()函数。我有一个节点用于我的堆栈部分。

我很困惑到达我的theBack节点的前身。

任何帮助都会很棒!谢谢!

4 个答案:

答案 0 :(得分:5)

由于限制推送和弹出操作,堆栈实际上作为单链表实现起来相当简单。如果在列表的 head 处插入推送元素,实际上要容易得多。由于它是家庭作业,我将提供伪代码。

要初始化堆栈,只需创建:

top -> null

使用此代码:

def init (stk):
    stk->top = null                    # just initialise to empty.

推送项目实际上是将其插入列表的 start 。所以,当你按3,4和5时,你得到:

       +---+
top -> | 3 | -> null
       +---+
       +---+    +---+
top -> | 4 | -> | 3 | -> null
       +---+    +---+
       +---+    +---+    +---+
top -> | 5 | -> | 4 | -> | 3 | -> null
       +---+    +---+    +---+

使用以下代码:

def push (stk, val):
    item = new node                     # Create the node.
    item->value = val                   # Insert value.
    item->next = stk->top               # Point it at current top.
    stk->top = item                     # Change top pointer to point to it.

然后弹出就是删除第一个节点。

def pop (stk):
    if stk->top == null:                # Catch stack empty error.
        abort with "stack empty"
    first = stk->top                    # Save it for freeing.
    val = first->value                  # Get the value from the top.
    stk->top = first->next              # Set top to the top's next.
    free first                          # Release the memory.
    return val                          # Return the value.

答案 1 :(得分:3)

单链表中的每个节点都链接到前一个节点。推入堆栈的第一个项目为NULL,所有其他项目都指向堆栈中的“下方”项(前一个)。

因此,在销毁顶级节点之前,您将获取反向链接并将其另存为新的顶部。类似于这个伪代码的东西,假设有一堆int值:

pop()
    ALink *poppedLink = myTop;
    myTop = poppedLink.nextNode; // point to next node

    int returnValue = poppedLink.value; // save the value
    delete poppedLink; // destroy the instance

    return returnValue;

如果用“前任”,你的意思是:“在此之前弹出的东西”:那已经很久了,不是吗?

答案 2 :(得分:0)

如果你正在实现一个堆栈,那么你会想要弹出顶级节点,所以你要将theTop设置为行中的下一个节点(它应该是toTop节点中的指针)

答案 3 :(得分:0)

你的意思是顶级的“前身”是什么意思?顶级节点是列表的头部,它没有任何前辈。