该程序是关于使用ling list的堆栈中的插入和删除。推送工作正常,但删除pop()函数有一些问题 错误。每当我尝试删除某些东西时,它会给出下溢带来的无限错误。即。顶部指针始终为空。
#include<iostream>
#include<stdlib.h>
#include<process.h>
using namespace std;
struct node
{
int info;
node *next;
}*top,*save,*newptr,*ptr;
node *create_new_node(int);
void push(node*);
void pop();
void display(node*);
int main()
{
top=NULL;
int inf;
char ch='y';
while(ch=='y'||ch=='Y')
{
newptr=new node;
cout<<"\nEnter the info to be added in the beginning of the stack\n";
cin>>inf;
if(newptr==NULL)
cout<<"\nCannot create new node.ABORTING!!\n";
else
{
newptr=create_new_node(inf);
cout<<"\nPress enter to continue\n";
system("pause");
}
push(newptr);
cout<<"\nthe info has been inserted in the stack\n";
cout<<"\nThe stack now is\n";
display(newptr);
cout<<"\ndo you wish to add more elements to the stack.\nIf yes then
press y or else press n\n";
cin>>ch;
if(ch=='n'||ch=='N')
{
cout<<"\ndo you to delete elements from the stack\n";
cout<,"\nIf yes then press d else press n\n";
cin>>ch;
if(ch=='d'||ch=='D')
{
while(ch=='d'||ch=='D')
{
pop();
cout<<"\npress d to delete more elements y to add more
elements and n to exit\n";
cin>>ch;
}
}
}
}
delete(ptr);
delete(newptr);
delete(top);
delete(save);
return 0;
}
node* create_new_node(int n)
{
ptr=new node;
ptr->info=n;
ptr->next=NULL;
return ptr;
}
void push(node *np)
{
if(top==NULL)
top=np;
else
{
save=top;
top=np;
np->next=save;
}
}
void pop()
{
if(top==NULL)
cout<<"underflow";
else
{
ptr=top;
top=top->next;
delete ptr;
}
}
void display(node *np)
{
while(np!=NULL)
{
cout<<np->info<<"->";
np=np->next;
}
}
答案 0 :(得分:0)
显示的代码中存在多个错误。
你的主要错误:
while(ch=='d'||ch=='D')
{
pop();
cout<<"\npress d to delete more elements y to add more elements and n to exit\n";
}
此时,当ch
为'd'
或'D'
时,执行将进入while
循环。调用pop()
,从堆栈中删除最顶层的元素,打印消息,并重复while
循环。
此时,您的计划将发现ch
仍为'd'
或'D'
的重要发现。没有任何改变它的价值。不幸的是,计算机程序始终完全按照您的要求执行,而不是您认为您希望它执行的操作。无论你在这里看起来多么努力,你都不会在这里找到任何改变ch
值的代码。它将永远保持现在的价值。因此while
循环再次运行。然后再次。然后再次。在这一点上,没有任何东西可以改变ch
的值,所以你有一个无限循环。
此外,在main
:
newptr=new node;
此指针的值稍后与NULL
进行比较;如果不是......它会被
newptr=create_new_node(inf);
除了泄漏记忆外,这绝对没有任何结果。此代码似乎是剩余的垃圾,应该在修复错误的while
循环逻辑后进行清理。