Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;-带有单链表的Stack Pop()函数_C++_Stack_Linked List - Fatal编程技术网

C++ C++;-带有单链表的Stack Pop()函数

C++ C++;-带有单链表的Stack Pop()函数,c++,stack,linked-list,C++,Stack,Linked List,首先,这是我当前数据结构课程家庭作业的一部分。我不是在寻求答案,我是在寻求帮助 我有一个堆栈类,它实现了一个链表而不是数组。我目前正在尝试编写我的pop()函数。我在堆栈的后面有一个节点 我只是对我的背淋巴结的前身感到困惑 这方面的任何帮助都会很棒!谢谢 如果要实现堆栈,则无论如何都要弹出顶部节点,因此将顶部设置为行中的下一个节点(应该是顶部节点中的指针)如果要实现堆栈,则无论如何都要弹出顶部节点,因此将顶部设置为行中的下一个节点(应该是顶部节点中的指针)单链表中的每个节点都链接到上一个节点。推

首先,这是我当前数据结构课程家庭作业的一部分。我不是在寻求答案,我是在寻求帮助

我有一个堆栈类,它实现了一个链表而不是数组。我目前正在尝试编写我的
pop()
函数。我在堆栈的后面有一个节点

我只是对我的背淋巴结的前身感到困惑


这方面的任何帮助都会很棒!谢谢

如果要实现堆栈,则无论如何都要弹出顶部节点,因此将顶部设置为行中的下一个节点(应该是顶部节点中的指针)

如果要实现堆栈,则无论如何都要弹出顶部节点,因此将顶部设置为行中的下一个节点(应该是顶部节点中的指针)

单链表中的每个节点都链接到上一个节点。推到堆栈上的第一个项目具有空值,所有其他项目都指向堆栈中“位于”它们下面的项目(前一个)

因此,在销毁top节点之前,请获取反向链接并将其保存为新的top。类似于以下伪代码,它假定一个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;

如果说“前置项”,你的意思是:“在此之前弹出的内容”:这已经过去很久了,不是吗?

单链表中的每个节点都链接到上一个节点。推到堆栈上的第一个项目都有一个空值,所有其他项目都指向堆栈中“在它们下面”的项目(前置项)

因此,在销毁top节点之前,请获取反向链接并将其保存为新的top。类似于以下伪代码,它假定一个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;

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

你说的top的“前置”是什么意思?top node是列表的开头,它没有任何前置。

你说的“前置”是什么意思top?top node是列表的开头,它没有任何前置项。

堆栈实际上很容易实现为单链接列表,因为它的推送和弹出操作受到限制。如果在列表的开头插入推送元素,实际上会容易得多。因为这是一个家庭作业,我将提供伪代码

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

top -> null
使用此代码:

def init (stk):
    stk->top = null                    # just initialise to empty.
推送项目实际上是将其插入列表的开头。因此,当推送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.

堆栈实际上很容易实现为单链表,因为它的push和pop操作受到限制。如果在列表的开头插入push元素,实际上会容易得多。因为这是家庭作业,我将提供伪代码

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

top -> null
使用此代码:

def init (stk):
    stk->top = null                    # just initialise to empty.
推送项目实际上是将其插入列表的开头。因此,当推送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.

您的堆栈实现使用单链接列表还是双链接列表?哪一端是“后端”?堆栈有顶部和底部,而不是背部和前部。您的堆栈实现使用单链接列表还是双链接列表?哪一端是“后端”?堆栈有顶部和底部,而不是后部和前部。我知道我想从堆栈中弹出顶部。我不知道如何获取顶部的前置器。@jchwhisman:您的节点中是否至少有一个“下一个”指针或类似的东西?没有前置器,顶部就是顶部。实际代码将取决于您的语言(是否必须删除节点等)。这是一个单独链接的列表,因此没有指向其前身的指针。只有下一步。我知道我想从堆栈中弹出顶部。我不知道如何获取顶部的前置项。@jchwhisman:你至少有一个“下一步”吗节点中的指针或类似的东西?没有前置节点,顶部是最顶部。实际代码将取决于您的语言(是否必须删除节点等)。这是一个单链接列表,因此没有指向它的前一个的指针。只有下一个。很抱歉,我没有澄清顶部实际上是什么。堆栈顶部是堆栈中最近推送的项。它实际上是列表的后部。为什么在堆栈实现中推送列表后部的项?无论如何,您可以ld需要做的是在列表中循环一个指针,直到它到达倒数第二个节点,或者你可以有一个指针,它的唯一任务是跟踪倒数第二个节点,并在每次你将一个元素推到堆栈上时更新它。很抱歉,我没有澄清堆栈的顶部到底是什么。堆栈的顶部是堆栈中最近推的项。它实际上是列表的后面。为什么要在堆栈实现中推列表后面的项?无论如何,您可以在列表中循环一个指针,直到它到达penulatimate节点,或者您可以有一个指针,其唯一任务是跟踪倒数第二个节点,并在每次推送元素时更新它堆栈