gpt4 book ai didi

c++ - pop如何使用链表在堆栈中工作?

转载 作者:行者123 更新时间:2023-11-30 01:43:27 28 4
gpt4 key购买 nike

在 pop 函数中,top 之后分配给 temp , 它写成 top=top->link ,但是 top=top->link 怎么样?让它指向它的后节点?

top=top->link意味着向前移动并指向它前面的节点,这里应该是NULL .

编辑:cout添加到流行音乐中。现在让问题更具体,如何cout<<top->data会打印 32 吗?它应该指向NULL .

#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();
}

最佳答案

你是对的。 Pop here 将删除第一个对象,并且现在将 top 设置为 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(顶部)

推送:如果堆栈为空 - 顶部现在是新元素并且它的链接是 null_ptr,否则 - 顶部的链接现在是新元素,顶部成为新元素并且新元素的链接是 null_ptr

pop:如果栈为空什么都不做,否则 - 打印 top 的数据,将 top 保存为 temp,top 成为 top 的链接(栈中的较低元素),打印 temp 的数据并删除 temp

关于c++ - pop如何使用链表在堆栈中工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37815759/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com