在pop函数中,top
分配给temp
后,其top=top->link
已写入top=top->link
,但top=top->link
如何指向其后节点?
NULL
意味着前进并指向前面的节点,此处应为cout
。
编辑:cout<<top->data
添加了pop。现在更具体地提出问题,NULL
将如何打印32?它应该指向#include<iostream>
using namespace std;
class stack_ll{
private:
struct node{
int data;
node *link;
}*top;
public:
stack_ll()
{
top=NULL;
}
void push(int);
void pop();
void display();
~stack_ll()
{
if(top==NULL)
return;
node *temp;
while(top!=NULL)
{
temp=top;
top=top->link;
delete temp;
}
}
};
void stack_ll::push(int num)
{
node *temp;
temp=new node;
if(temp==NULL) {
cout<<"stack is full"<<endl;
return;
}
temp->data=num;
temp->link=top;
top=temp;
}
void stack_ll::pop(){
if(top==NULL)
{
cout<<"stack is empty"<<endl;
return;
}
node * temp;
int item;
temp=top;
item=temp->data;
top=top->link;
cout<<top->data<<endl;
delete temp;
}
int main()
{
stack_ll l1;
l1.push(5);
l1.push(56);
l1.push(32);
l1.push(34);
l1.pop();
l1.push(23);
l1.pop();
}
。
<span ng-class="{'glyphicon glyphicon-star' : stack.favorite, 'glyphicon glyphicon-star-empty' : !stack.favorite}" style="float:right;padding-right:10px;padding-top:6px;"ng-click="toggleFavoriteStack(stack,'User');">
</span>
答案 0 :(得分:3)
你是对的。弹出这里将删除第一个对象,现在将顶部作为NULL,即使堆栈中有一些对象。你应该怎么做才能解决这个问题,就是改变链接方向 - 意味着每个对象都指向下面的对象。在这种情况下,当移除顶部时,您将能够检索堆栈中较低的下一个对象
变化:
temp->data=num;
temp->link=top;
top=temp;
为:
temp->data=num;
top->link=temp;
top=temp;
并为空堆栈添加一个特殊情况,其中top->link=temp;
不合法,如:
if(top==NULL){
temp->data=num;
top=temp;
top->link=NULL;
}
修改强>:
你的逻辑应该是这样的:
空堆栈只有null_ptr(顶部)
push:如果stack为空 - top现在是新元素,它的链接是null_ptr,否则 - top的链接现在是新元素,top变成新元素,new元素的链接是null_ptr
pop:如果stack为空则不执行任何操作,否则 - 打印top的数据,将top保存为temp,top变为top的链接(stack中的下部元素),print temp的数据并删除temp
答案 1 :(得分:1)
此实施是正确的。你不需要改变任何东西。
当我们尝试添加元素是这个堆栈时,我们创建一个新节点并使其成为链接列表的头部。因此,添加的最后一个元素将始终是链接列表的头部。
当我们尝试弹出一个元素时,我们只需要做top- = top-&gt;链接。这意味着我们只是将头节点更改为堆栈中添加的前一个元素。