#include
#include
int const maxsize=1024;
typedef struct{
int *top; //头指针
int *base; //尾指针
int stacksize; //作为量度
}Stack;
Stack *initstack()//创建栈(初始化)
{
Stack *stack;
stack->base=(int*)malloc(sizeof(int)*maxsize);//数组
stack->top=stack->base;
stack->stacksize=maxsize;
return stack;
}
int empty(Stack *s)//判断是否为空栈
{
if(s->top==s->base)
return 0;
else
return 1;
}
void push(Stack *s,int x)//压栈
{
if(s->top-s->base>s->stacksize)
{
*(s->top)=x;
s->top++;
}
}
void pop(Stack *s)//出栈
{
printf("%c",*(--s->top));
}
void change(int number,int cet)
{
Stack *s=initstack();
int k;
char ch,t;
if(number==0)
{
printf("转化后的%d进制数为:0\n",cet);
}
while(number)
{
k=number%cet;
if(k>=10&&k'a'+cet-11;//找出对应字母最大的
ch=t-(cet-k-1);//找出具体的字母
}
else
{switch(k)
{
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
case 8:
case 9:ch=k+48;break;
case 10:
case 11:
case 12:
case 13:
case 14:
case 15:ch=k+55;break;
}
}
push(s,ch);
number=number/cet;
}
printf("转换后的%d进制数为:",cet);
while(empty(s))
{
pop (s);
}
printf("压栈问题");
printf("\n");
}
int main(void)
{
int number,cet;
printf("请输入要转化的10进制数字,与需要转化的进制,中间用空格\n");
system("pause");
scanf("%d %d",&number,&cet);
system("pause");
change(number,cet);
}
题主的代码问题在初始化函数里Stack* initstack(),Stack stack; 定义栈指针 stack 以后,没有动态生成栈空间,还有void push(Stack s, int x)压栈函数里做了修改,修改如下,见注释,供参考:
#include <stdio.h>
#include <stdlib.h>
#include <crtdbg.h>
int const maxsize = 1024;
typedef struct {
int* top; //头指针
int* base; //尾指针
int stacksize; //作为量度
}Stack;
Stack* initstack()//创建栈(初始化)
{
Stack* stack;
stack = (Stack*)malloc(sizeof(Stack)); //修改
stack->base = (int*)malloc(sizeof(int) * maxsize);//数组
stack->top = stack->base;
stack->stacksize = maxsize;
return stack;
}
int empty(Stack* s)//判断是否为空栈
{
if (s->top == s->base)
return 0;
else
return 1;
}
void push(Stack* s, int x)//压栈
{
if (s->top - s->base > s->stacksize)//修改
{
return; //修改
}
*(s->top) = x;
s->top++;
}
void pop(Stack* s)//出栈
{
printf("%c", *(--s->top));
}
void change(int number, int cet)
{
Stack* s = initstack();
int k;
char ch, t;
if (number == 0)
{
printf("转化后的%d进制数为:0\n", cet);
}
while (number)
{
k = number % cet;
if (k >= 10 && k < cet)
{
t = 'a' + cet - 11;//找出对应字母最大的
ch = t - (cet - k - 1);//找出具体的字母
}
else
{
switch (k)
{
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
case 8:
case 9:ch = k + 48; break;
case 10:
case 11:
case 12:
case 13:
case 14:
case 15:ch = k + 55; break;
}
}
push(s, ch);
number = number / cet;
}
printf("转换后的%d进制数为:", cet);
while (empty(s))
{
pop(s);
}
//printf("压栈问题"); //修改
printf("\n");
}
int main(void)
{
int number, cet;
printf("请输入要转化的10进制数字,与需要转化的进制,中间用空格\n");
system("pause");
scanf("%d %d", &number, &cet);
system("pause");
change(number, cet);
return 0;
}
#include <iostream>
#include <malloc.h>
using namespace std;
/**** 结 构 体 声 明 ****/
typedef struct scStack{
struct scStack *next;
int elem;
}scStack;
/**** 函 数 声 明 ****/
//进制转换函数,num为10进制数,system为转换目标进制,sys为栈空间
scStack *sysConvert(int num,int system,scStack *sys);
scStack *push(scStack *stack,int elem); //入栈
void pop(scStack *stack); //出栈
/*
进制转换
*/
scStack *sysConvert(int num,int system,scStack *sys){
while(num > 0){
syS = push(syS,num % system);
num /= system;
}
return syS; //返回栈顶
}
/*
余数入栈
*/
scStack *push(scStack *stack,int elem){
scStack *newStack = (scStack *)malloc(sizeof(scStack));
newStack->elem = elem;
newStack->next = stack;
stack = newStack;
return stack;
}
/*
余数出栈
*/
void pop(scStack *stack){
while(stack){
scStack *top = stack;
top->elem >= 10 ? printf("%c",top->elem + 'a' - 10) : printf("%d",top->elem);
stack = stack->next;
free(top);
}
cout<<endl<<"转换完毕!"<<endl;
}
/*
主函数
*/
int main(){
scStack *stack = NULL; //初始化栈
int num,system;
cout<<"请输入一个10进制数:";
cin>>num;
cout<<"请输入想要转换为多少进制:";
cin>>system;
stack = sysConvert(num,system,stack);
pop(stack);
return 0;
}