栈——数制转换
2013-10-15 17:33
134 查看
//题目描述:(数制转换)将十进制数n转换为k进制数并输出(2<=k<=10),输入为两个整数n、k。 //顺序栈 #include <stdio.h> #include <stdlib.h> #define STACK_INT_SIZE 20 //存储空间初始分配量 #define STACKINCREMENT 5 //存储空间分配增量 typedef int SElemType; typedef struct node { SElemType *base; SElemType *top; int stacksize;//当前分配的存储容量 }SqStack; void InitStack(SqStack &S) //建栈初始化 { S.base=(SElemType *)malloc(STACK_INT_SIZE*sizeof(SElemType));//开辟空间,初始化操作 if(!S.base) exit(0); S.top=S.base; S.stacksize=STACK_INT_SIZE; } void push(SqStack &S,SElemType e) //进栈 { if(S.top-S.base>=STACK_INT_SIZE) { S.base=(SElemType *)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType)); if(!S.base) exit(0); S.top=S.base+STACK_INT_SIZE; S.stacksize+=STACKINCREMENT; } *S.top++=e; } void pop(SqStack &S,SElemType &e) //出栈 { if(S.top==S.base) exit(0); e=*--S.top; } int StackEmpty(SqStack &S) //判断栈是否为空栈 { if(S.base==S.top) return 1; else return 0; } void ClearStack(SqStack &S) //销毁栈 { S.base=S.top=NULL; S.stacksize=0; } int main() { int n,k,e; SqStack S; while(1) { InitStack(S); printf("十进制整数:"); scanf("%d",&n); printf("需要转换成的进制:"); scanf("%d",&k); while(n) { push(S,n%k); n/=k; } while(!StackEmpty(S)) { pop(S,e); printf("%d",e); } printf("\n"); ClearStack(S); system("pause"); system("cls"); } return 0; }