这个是严蔚敏《数据结构》第三章的代码,写的是一个进制转换的函数,可以把默认十进制的数,转换为2、8、7等进制。唯一特殊的地方是栈是自己实现的。
1 #include <stdio.h> 2 #include <malloc.h> 3 4 #define STACK_INIT_SIZE 100 5 #define STACKINCREMENT 10 6 typedef int SElemType; 7 8 typedef struct { 9 SElemType *base; 10 SElemType *top; 11 int stacksize; 12 }SqStack; 13 14 //基本操作的函数原型说明 15 bool InitStack(SqStack &S); //构造一个空栈 16 void DestroyStack(SqStack &S);//销毁栈S,S不再存在 17 void ClearStack(SqStack &S); //把S置为空栈 18 bool StackEmpty(SqStack S); //若栈S为空,则返回TRUE,否则返回FALSE 19 int StackLength(SqStack S); //返回S的元素的个数,即栈的长度 20 bool GetTop(SqStack S,SElemType &e ); //若栈S不空,则用e返回栈顶元素,并返回1,否则返回0; 21 bool Pop(SqStack &S,SElemType &e); //若栈不空,则删除S的栈顶元素,用e返回其值,并返回1;否则返回0; 22 bool Push(SqStack &S,SElemType e); //插入元素e为新的栈顶元素 23 24 //基本操作的算法描述部分 25 bool InitStack(SqStack &S){ 26 //构造一个空栈 27 S.base = (SElemType * )malloc(STACK_INIT_SIZE * sizeof(SElemType)); 28 if(!S.base) return 0; 29 S.top = S.base; 30 S.stacksize = STACK_INIT_SIZE; 31 return 1; 32 } 33 34 bool GetTop(SqStack S,SElemType &e ){ 35 //若栈S不空,则用e返回栈顶元素,并返回1,否则返回0; 36 if(S.top==S.base ) return 0; 37 e = *(S.top-1); 38 return 1; 39 } 40 41 bool Pop(SqStack &S,SElemType &e){ 42 //若栈不空,则删除S的栈顶元素,用e返回其值,并返回1;否则返回0; 43 if(S.top==S.base) return 0; 44 e = *--S.top; 45 return 1; 46 } 47 48 bool Push(SqStack &S, SElemType e){ 49 //插入元素e为新的栈顶元素 50 if(S.top - S.base >= S.stacksize ){ 51 S.base = (SElemType * ) realloc(S.base,(S.stacksize + STACKINCREMENT)*sizeof(SElemType ) ); 52 if(!S.base) return 0; 53 S.top = S.base + S.stacksize; 54 S.stacksize += STACKINCREMENT; 55 } 56 *S.top++ = e; 57 return 1; 58 } 59 60 bool StackEmpty(SqStack S){ //若栈S为空,则返回TRUE,否则返回FALSE 61 if( S.top==S.base ) return 1; 62 else return 0; 63 } 64 65 int main(){ 66 //进制转换函数 67 SqStack S; 68 SElemType e; 69 int N; 70 int jinzhi = 8 ; //定义数制转化为几进制 ,例如可以为2进制、8进制、7进制等等 71 72 InitStack(S); 73 scanf("%d",&N ); 74 while(N){ 75 Push( S,N%jinzhi ); 76 N=N/jinzhi; 77 } 78 while(!StackEmpty(S)){ 79 Pop(S,e); 80 printf("%d",e); 81 } 82 83 }
原文:http://www.cnblogs.com/liugl7/p/5619991.html