十进制数转换为十六进制数(C语言 数据结构 链式栈 ) 帮忙改一个错误!

#include<stdio.h>#include<stdlib.h>typedefintElemType;typedefstructsnode//定义结构体SLN{El... #include<stdio.h>
#include <stdlib.h>
typedef int ElemType;

typedef struct snode //定义结构体SLN
{
ElemType data;
struct snode *next;
}SLN;

void StackInitiate(SLN **head) //初始化带头结点的链式栈
{
if((*head=(SLN *)malloc(sizeof(SLN)))==NULL) exit(1);
(*head)->next=NULL;
}

int StackNotEmpty(SLN *head) //判断链式栈是否为空
{
if(head->next==NULL)
return 0;
else
return 1;
}

int StackPush(SLN *head,ElemType x)//入栈
{
SLN *p;
if((p=(SLN *)malloc(sizeof(SLN)))==NULL)
{
printf("内存空间不足,无法插入!\n");
return 0;
}
p->data=x;
p->next=head->next;
head->next=p;
return 1;
}

int StackPop(SLN *head,ElemType *d)//出栈
{
SLN *p=head->next;

if(p==NULL)
{
printf("堆栈已空,出错!\n");
return 0;
}
head->next=p->next;
*d=p->data;
free(p);
return 1;
}

int StackTop(SLN *head,ElemType *d)//取栈元素
{
SLN *p=head->next;

if(p==NULL)
{
printf("堆栈已空,出错!\n");
return 0;
}
*d=p->data;
return 1;
}

void Destory(SLN *head) //撤销动态申请空间
{
SLN *p,*p1;
p=head;
while(p!=NULL)
{
p1=p;
p=p->next;
free(p1);
}
}

void main()
{
int decimal;
SLN myStack;
StackInitiate(&myStack); //提示说这里出错!!!!!!!
scanf("%d",&decimal);

while(decimal)
{
StackPush(&myStack,decimal%2);
decimal=decimal/2;
}

while(StackNotEmpty(&myStack))
{
StackPop(&myStack,&decimal);
printf("%d",decimal);
}

}
//可以了。。。。十进制数转换为十六进制数(C语言 数据结构 链式栈 )

void main()
{
int decimal;
SLN *myStack;
StackInitiate(&myStack);
scanf("%d",&decimal);

while(decimal)
{
StackPush(myStack,decimal%16);
decimal=decimal/16;
}

while(StackNotEmpty(myStack))
{
StackPop(myStack,&decimal);
printf("%x",decimal);
}

}
展开
 我来答
X_earth
2015-04-12 · TA获得超过248个赞
知道小有建树答主
回答量:204
采纳率:73%
帮助的人:68.5万
展开全部
函数原型是 void StackInitiate(SLN **head);、
参数需要的双指针类型, 而你传的是但指针,当然出错 ,将SLN myStack 改为SLN *myStack,改成SLN *myStack后 后面的代码为
void main()
{
int decimal;
SLN *myStack;
StackInitiate(&myStack);
scanf("%d",&decimal);

while(decimal)
{
StackPush(myStack,decimal%2);
decimal=decimal/2;
}

while(StackNotEmpty(myStack))
{
StackPop(myStack,&decimal);
printf("%d",decimal);
}

}
追问
改为SLN *myStack也不行
追答
你后面 不改当然不行了
jhanker
2015-04-12 · TA获得超过1479个赞
知道小有建树答主
回答量:675
采纳率:73%
帮助的人:509万
展开全部
SLN myStack;改成SLN *myStack;试试
追问
SLN *myStack也不行哒
追答

//前面的不变,贴不上了十进制数转换为十六进制数(C语言 数据结构 链式栈 ) 

void main()
{
int decimal;
SLN *myStack;
    StackInitiate(&myStack);
 printf("请输入一个十进制数:");
    scanf("%d",&decimal);
while(decimal)
{
 StackPush(myStack,decimal%16);//转化为十六进制压栈
 decimal=decimal/16;
}
int model=1;//判断奇偶位,方便连续或中间加一空格
printf("输出的十六进制数为:");
while(StackNotEmpty(myStack))
{
 StackPop(myStack,&decimal);
if(model%2==0)
 printf("%X ",decimal);
else
printf("%X",decimal);
model++;
}
printf("\n");
system("pause");
}

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式