![](https://iknow-base.cdn.bcebos.com/lxb/notice.png)
十进制数转换为十六进制数(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);
}
} 展开
#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);
}
} 展开
2个回答
展开全部
函数原型是 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 改为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也不行
追答
你后面 不改当然不行了
展开全部
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");
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询