<span style="font-size:24px;">/*
进制转换
链式栈实现
*/
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#define OK 1
#define ERROR 0
#define OVERFLOW -1
typedef int ElemType;
typedef int statue;
typedef struct NODE{
ElemType elem;
struct NODE *pNext;
}NODE,*pNODE;
typedef struct{
NODE *sTop;
NODE *sBottom;
}STACK;
statue CreateStack(STACK *stack){
stack->sTop=(pNODE)malloc(sizeof(NODE));
if(stack->sTop==NULL){
printf("内存分配失败\n");
exit(OVERFLOW);
}
stack->sBottom=stack->sTop;
stack->sTop->pNext=NULL;
return OK;
}
statue push(STACK *stack,int val){//压栈
pNODE newNode=(pNODE)malloc(sizeof(NODE));
if(newNode==NULL){
printf("内存分配失败\n");
exit(OVERFLOW);
}
newNode->elem=val;
newNode->pNext=stack->sTop;
stack->sTop=newNode;
return OK;
}
void showStack(STACK stack){
pNODE p=stack.sTop;
printf("\n");
while(p!=stack.sBottom){
printf("%d",p->elem);
p=p->pNext;
}
printf("\n");
}
statue isEmpty(STACK stack){
if(stack.sBottom==stack.sTop){
return OK;
}
return ERROR;
}
statue popStack(STACK *stack){
if(isEmpty(*stack)){
return ERROR;
}
pNODE p=stack->sTop;
stack->sTop=stack->sTop->pNext;
printf("%d出栈\n",p->elem);
free(p);
return OK;
}
statue ClearStack(STACK *stack){
if(isEmpty(*stack)){
return ERROR;
}
while(!isEmpty(*stack)){
popStack(stack);
}
return OK;
}
void ChangeSystem(STACK *stack,int type,int val){
int i=0,j=0;
i=val%type;
push(stack,i);
do{
val=val/type;
i=val%type;
push(stack,i);
}while(val/type>0);
}
int main(){
STACK stack;
int val,type;
CreateStack(&stack);
printf("实现十进制以下的转换\n");
printf("输入十进制数\n");
scanf("%d",&val);
printf("输入要转换的进制\n");
scanf("%d",&type);
ChangeSystem(&stack,type,val);
showStack(stack);
return 0;
}
</span>
数制转换
最新推荐文章于 2022-09-30 08:04:03 发布