单向链栈实现进制转换(十进制转换成N进制数【正数】)

来源:互联网 发布:淘宝开店有什么要求 编辑:程序博客网 时间:2024/05/22 14:29
#include <stdio.h>#include <stdlib.h>#include <malloc.h>//数据节点结构体定义typedef struct numNode{int data;struct numNode *next;}numNode;//栈结构定义typedef struct{int length;numNode *end;}numStack;numStack * initNumStack();//创建并初始化栈void push(numStack *stack, int num);//入栈操作numNode * pop(numStack *stack);//出栈操作void destroy(numStack *stack);//栈的销毁void display(numStack *stack);//栈的打印char num_to_char(const int num);//数字转换成字符numStack * convert(int num, const int radix);//十进制数num转换成radix进制数//创建并初始化空栈numStack * initNumStack(){numStack *stack = (numStack *)malloc(sizeof(numStack));if (NULL == stack)exit(-1);stack->length = 0;stack->end = NULL;return stack;}//压栈操作void push(numStack *stack, int num){if (NULL == stack)exit(-1);numNode *num_node = (numNode *)malloc(sizeof(numNode));num_node->data = num;if (NULL == num_node)exit(-1);num_node->next = stack->end;stack->end = num_node;++stack->length;}//出栈操作numNode * pop(numStack *stack){numNode *node_tmp = NULL;if (NULL == stack || 0 == stack->length)return NULL;node_tmp = stack->end;stack->end = node_tmp->next;--stack->length;return node_tmp;}//销毁栈void destroy(numStack *stack){numNode * tmp = NULL;while(NULL != (tmp = pop(stack)))free(tmp);if(stack)free(stack);}//打印栈数据void display(numStack *stack){numNode * tmp = NULL;if (stack){tmp = stack->end;while(tmp){printf("%c ", num_to_char(tmp->data));tmp = tmp->next;}printf("\n");}}//数字转换成字符char num_to_char(const int num){if(num < 10)return '0'+num;elsereturn 'A'+num-10;}//十进制转换成n进制的实现函数numStack * convert(int num, const int radix){numStack *stack = initNumStack();while (num){push(stack, num%radix);num /= radix;}return stack;}int main(){numStack * resoult = convert(128, 7);display(resoult);destroy(resoult);return 0;}

0 0