[英]Linked list implementation of stack in C++
我正在尝试在堆栈中使用简单的 Push、Pop 和 Show 函数作为链表实现。 我认为 Push 功能工作正常,但我在 Show 和 Pop 上遇到了问题。 每当我使用 Pop 函数时,我只会得到一个结果,而下一次它会显示“堆栈为空!! ”。 我在做一个我认为的逻辑错误。 请帮我解决这个问题。 我正在使用 Turbo C++ 4.5。 我在下面发布代码。 提前致谢!
#include<iostream.h>
#include<conio.h>
#include<process.h>
struct node
{
int data;
node *link;
};
node *temp, *top;
void PUSH()
{
temp=new node;
cout<<"\nEnter data item:";
cin>>temp->data;
temp->link=NULL;
if(top==NULL)
{
temp->link=top;
top=temp;
}
}
void POP()
{
if(top==NULL)
{
cout<<"\nEmpty";
return;
}
temp=top;
top=top->link;
cout<<"\nDeleted value is : "<<temp->data;
temp->link=NULL;
delete(temp);
}
void SHOW()
{
if(top==NULL)
{
cout<<"\nEmpty!!";
return;
}
while(temp!=NULL)
{
cout<<temp->data<<endl;
temp=temp->link;
}
}
void main()
{ int ch;
do{
cout<<"\nEnter your choice";
cout<<"\n1.Push\n2.Pop\n3.Show\n4.Exit";
cin>>ch;
switch(ch)
{
case 1: PUSH();
break;
case 2: POP();
break;
case 3: SHOW();
break;
case 4: exit(0);
break;
}
}while(ch!=4);
getch();
}
在第二次推送之后,您不会将temp
节点链接到现有的“堆栈”。
if(top==NULL)
{
temp->link=top;
top=temp;
}
如果你为什么需要这个? 我猜您每次都必须在 Push 方法中更新top
节点。
在您的PUSH
函数中,如果top
为NULL
,您实际上只对新node
执行任何操作,因此所有推入非空堆栈都将被忽略(除非它们泄漏内存)。 试试这样吧。
void PUSH() {
temp = new node;
cout << "\nEnter data item:";
cin >> temp->data;
temp->link = top;
top = temp;
}
首先,你需要明确你关于通过链表实现堆栈的概念......
你的 PUSH 函数应该是这样的
void PUSH()
{
temp=new node;
cout<<"\nEnter data item:";
cin>>temp->data;
temp->link=NULL;
if(top==NULL)
top=temp;
else
{
temp->link=top;
top=temp;
}
}
POP 函数被声明为 void,所以它不能返回任何值……正确的声明应该是
void POP()
{
if(top==NULL)
{
cout<<"\nEmpty";
}
else
{
cout<<"\nDeleted value is : "<<top->data;
temp=top;
top=top->link;
delete(temp);
}
}
而在 SHOW 函数中,else 部分应该是
temp=top;
while(temp!=NULL)
{
cout<<temp->data<<endl;
temp=temp->link;
}
而且我建议你应该使用 Codeblocks,因为它比 Turbo C++ 有更清晰、更简单的用户界面。
您可以通过这篇文章Stack Using Linked List in C++清除您的概念
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.