此例为十进制N转换为其它进制
1.顺序栈的存储结构
typedef struct{ ElemType data[MAXSIZE];//为顺序栈分配最大容量的内存 int top; //指向栈顶 }SqStack;
2.初始化栈
void Initstack(SqStack &S) { if(!S.data) exit(-1); S.top = 0; }
3.入栈
Status Push(SqStack &S,ElemType e) { if(S.top==MAXSIZE) return ERROR; S.data[S.top++] = e; return OK; }
4.出栈
Status Pop(SqStack &S) { if(S.top<=0) return ERROR; S.top--; return OK; }
5.获得栈顶元素
void getTop(SqStack S,ElemType &e) { if(S.top==0) printf("栈空了!!"); e = S.data[S.top-1]; }
6.进制转换
void Convertion(SqStack &S) { int n,r; printf("输入要转换进制的数: "); scanf("%d",&n); printf("输入要转换的进制: "); scanf("%d",&r); while(n) { Push(S,n%r); n/=r; } while(S.top) { ElemType e; getTop(S,e); Pop(S); printf("%d",e); } printf(" "); }
7.遍历
void traverse(SqStack S) { printf("进制转换结果: "); for(int i=S.top-1;i>=0;i--) { printf("%d",S.data[i]); } printf(" "); }
8.全部代码(这里就整合为一个了)
#include<stdio.h> #include<stdlib.h> #define MAXSIZE 100 #define ERROR 0 #define OK 1 typedef int Status; typedef int ElemType; typedef struct{ ElemType data[MAXSIZE];//为顺序栈分配最大容量的内存 int top; //指向栈顶 }SqStack; void Initstack(SqStack &S) { if(!S.data) exit(-1); S.top = 0; } Status Push(SqStack &S,ElemType e) { if(S.top==MAXSIZE) return ERROR; S.data[S.top++] = e; return OK; } Status Pop(SqStack &S) { if(S.top<=0) return ERROR; S.top--; return OK; } void getTop(SqStack S,ElemType &e) { if(S.top==0) printf("栈空了!!"); e = S.data[S.top-1]; } void Convertion(SqStack &S) { int n,r; printf("输入要转换进制的数: "); scanf("%d",&n); printf("输入要转换的进制: "); scanf("%d",&r); while(n) { Push(S,n%r); n/=r; } while(S.top) { ElemType e; getTop(S,e); Pop(S); printf("%d",e); } printf(" "); } void traverse(SqStack S) { printf("进制转换结果: "); for(int i=S.top-1;i>=0;i--) { printf("%d",S.data[i]); } printf(" "); } int main() { SqStack S; Initstack(S); Convertion(S); //我看了几个博客,都是用上面的方法,下面这个也可以 //traverse(S);//这两个函数只能用一个 return 0; }