数据结构(四)——栈的应用—数制转换
利用栈进行数制转换:
十进制转换八进制:先将十进制数除以八得到余数,余数入栈,然后将得到的商继续除以八,直到商为零
#include <stdio.h>
#include <stdlib.h>#define MAXSIZE 100//数制转换//定义链表节点结构体
typedef struct{int data[MAXSIZE];int top;
}Stack;//初始化栈
void InitStack(Stack *S){S->top = -1; //栈为空
}//判断栈是否为空
int StackEmpty(Stack *S){return S->top == -1;
}//入栈
void Push(Stack *S,int value){if(S->top<MAXSIZE-1){S->data[++(S->top)] = value;}else{printf("Stack overflow!\n");}
}//出栈
void Pop(Stack *S,int *value){if(!StackEmpty(S)){*value = S->data[(S->top)--];}else{printf("Stack underflow!\n");}
}void conversation(){Stack S; //定义栈变量int N,e;//对于输入的任意一个非负十进制整数,打印输出与其等值的八进制数InitStack(&S); //构造空栈scanf("%d",&N);if(N == 0){printf("0\n");return;}//十进制转八进制while(N){Push(&S,N % 8); //余数入栈N = N / 8; }//输出八进制数while(!StackEmpty(&S)){Pop(&S,&e);printf("%d",e);}printf("\n");
} //conversationint main() {conversation();return 0;
}