求大侠帮帮忙忙 ,链式栈的存储空间分配是不是出了问题,,,
这是一个链式栈,实现十进制数到八进制数的转换,,,,用的是链式栈,数据输入跟结果输出都能实现,就是在结果输出之后的判断栈是否为空这儿有问题。本人小白一个,想麻烦大侠帮看看,是不是出栈时结点删除这儿出了问题,先谢过了!
#include<iostream>
#include<malloc.h>
using namespace std;
typedef int Elem;
typedef struct node
{
Elem data;
struct node *top;
}NodeStack,*Stack;
int main()
{
bool InitStack(Stack &S);
bool Push(Stack &S);
bool OutStack(Stack &S);
bool EmptyStack(Stack &S);
Stack s;
InitStack(s);
Push(s);
OutStack(s);
EmptyStack(s);
return 0;
}
bool InitStack(Stack &S)
{
S=(node *)malloc(sizeof(NodeStack));
S->top=NULL;
return true;
}
bool Push(Stack &S)
{
Stack p,q;
Elem a;
cout<<"请输入一个您要进行转换的十进制整数:"<<endl;
cin>>a;
q=(NodeStack *)malloc(sizeof(NodeStack));
q->data=a%8;
S->top=q;
q->top=NULL;
q=p;
while(a)
{
p=(NodeStack *)malloc(sizeof(NodeStack));
p->data=a%8;
a=a/8;
S->top=p;
p->top=q;
q=p;
}
cout<<"由您输入的整数的相关数据已成功进栈!"<<endl;
return true;
}
bool OutStack(Stack &S)
{
Stack head;
Elem a;
head=S->top;
cout<<"该10进制数转换成的8进制数是:"<<endl;
if(S!=NULL)
do
{
cout<<head->data;
head=head->top;//这儿需要做的一个处理是要删除结点吧,可是在这段里加FREE 还是DELETE都不对,,以删除就全给删除完了、、?所以我认为这儿的一个问题就是结点删除不成功。。
}while(head!=NULL);
/* while(S->top!=NULL)
{
a=head->data;
head=head->top;
free(head);
cout<<a;
}*/
cout<<endl;
return true;
}
bool EmptyStack(Stack &S)
{
if(S->top==NULL)
{
cout<<"进链栈的各数据已成功出栈!"<<endl;
return true;
}
else
{
cout<<"链栈的各数据出栈操作失败!"<<endl;
return false;
}
}