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节点,或者您可以有一个指针,其唯一任务是跟踪倒数第二个节点,并在每次推送元素时更新它堆栈