对于初学者来说,这是我目前的数据结构课程作业的一部分。我不是在寻求答案,我正在寻求帮助。
我有一个实现链接列表而不是数组的堆栈类。我目前正在尝试编写pop()
函数。我有一个节点用于我的堆栈部分。
我很困惑到达我的theBack节点的前身。
任何帮助都会很棒!谢谢!
答案 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)
你的意思是顶级的“前身”是什么意思?顶级节点是列表的头部,它没有任何前辈。