数据结构实验:将十进制数转成其它进制,C语言实现
2016-04-28 00:00
507 查看
摘要: 顺序栈数据结构将输入的十进制数转成想要转成的进制。
在Visual Studio调试通过 代码: #define _CRT_SECURE_NO_WARNINGS //十进制整数转化为R进制整数算法 #include <stdlib.h> #include<stdio.h> #define MAXSIZE 100 typedef struct { int data[MAXSIZE]; int top; }SeqStack, *PSeqStack; float X; int R; void NumConvert(int X, int R); PSeqStack Init_SeqStack(PSeqStack S); int Empty_SeqStack(PSeqStack S); int Push_SeqStack(PSeqStack S, int x); int Pop_SeqStack(PSeqStack S, int * x); int GetTop_SeqStack(PSeqStack S, int * x); void Destroy_SeqStack(PSeqStack *S); void Judge(PSeqStack S); void InputX(); void InputR(); void DisplayStack(PSeqStack S);//定义 int main() { //float X; //int R; InputX(); InputR(); NumConvert(X, R); system("pause"); return 0; } /***************************函数*******************************/ void NumConvert(int X, int R)//X为十进制整数 R是要转换成的进制 { int Nega_X, t;//x可能为负数,需要转换成正数 PSeqStack S; S = (PSeqStack)malloc(sizeof(SeqStack)); //SeqStack &S; Init_SeqStack(S); if (R <= 10) { if (X < 0) { Nega_X = -X; while (Nega_X != 0) { t = Nega_X%R; Push_SeqStack(S, t); Nega_X = Nega_X / R; } Push_SeqStack(S, 1);//-数符号位为1 } else if (X >= 0) { while (X != 0) { t = X%R; Push_SeqStack(S, t); X = X / R; } Push_SeqStack(S, 0); } DisplayStack(S); Destroy_SeqStack(&S); } else if (R = 16) { if (X < 0) { Nega_X = X; while (Nega_X) { t = Nega_X%R; Push_SeqStack(S, t); Nega_X = Nega_X / R; } Push_SeqStack(S, 1); } else if (X >= 0) { while (X) { t = X%R; Push_SeqStack(S, t); X = X / R; } Push_SeqStack(S, 0); } Judge(S); Destroy_SeqStack(&S); } //else { // printf("请输入正确的进制数!!\n"); // InputR(); //} } //初始化栈 #pragma region 初始化 PSeqStack Init_SeqStack(PSeqStack S) { //PSeqStack S;//指向顺序栈的指针 if (S) { S->top = NULL; } return S; } #pragma endregion //判空 int Empty_SeqStack(PSeqStack S) { if (-1 == S->top) { return 1; } else { return 0; } } //入栈 int Push_SeqStack(PSeqStack S, int x) { if (S->top == MAXSIZE - 1) return 0; else { S->top++; S->data[S->top] = x; return 1; } } //出栈 int Pop_SeqStack(PSeqStack S, int * x) {/*删除栈顶元素并保存在*x */ if (Empty_SeqStack(S)) { return 0; } else { *x = S->data[S->top]; S->top--; return 1; } } //取栈顶元素 int GetTop_SeqStack(PSeqStack S, int * x) { if (Empty_SeqStack(S))//!=0 即为空 { return 0; } else { *x = S->data[S->top]; return 1; } } //销毁栈 void Destroy_SeqStack(PSeqStack *S) { if (*S) free(*S); *S = NULL; return; } //判断16进制 void Judge(PSeqStack S) { int i; printf("输出为(左边第一位为符号位)\n"); for (i = S->top; i > 0; i--) { switch (S->data[i]) { case 10:printf("A"); break; case 11:printf("B"); break; case 12:printf("C"); break; case 13:printf("D"); break; case 14:printf("E"); break; case 15:printf("F"); break; default:printf("%d", S->data[i]); break; } } } //输入 void InputX() { printf("请输入一个十进制整数:\n"); scanf("%f", &X); while (X != (int)X) { printf("你输入的不是整数!!\n"); InputX(); } //X = (int)X; } void InputR() { printf("\n请输入希望转成的进制数:\n"); scanf("%d", &R); while (R > 10 && R>16) { printf("关于大于10的进制中只支持小于等于16进制!请重新输入:\n"); scanf("%d", &R); } } //输出 void DisplayStack(PSeqStack S) { int i; printf("%d 进制输出为(左边第一位为符号位,0为正):\n",R); for (i = S->top; i > 0; i--) { printf("%d", S->data[i]); } }
相关文章推荐
- C#数据结构之顺序表(SeqList)实例详解
- Lua教程(七):数据结构详解
- 解析从源码分析常见的基于Array的数据结构动态扩容机制的详解
- C#数据结构之队列(Quene)实例详解
- C#数据结构揭秘一
- C#数据结构之单链表(LinkList)实例详解
- C++基于栈实现铁轨问题
- 数据结构之Treap详解
- C语言进制转换代码分享
- C语言栈的表示与实现实例详解
- C语言实现颠倒栈的方法
- 算法系列15天速成 第十天 栈
- PHP中实现中文字符进制转换原理分析
- php 实现进制相互转换
- 用C语言举例讲解数据结构中的算法复杂度结与顺序表
- 一看就懂:图解C#中的值类型、引用类型、栈、堆、ref、out
- C#数据结构之堆栈(Stack)实例详解
- C#数据结构之双向链表(DbLinkList)实例详解
- JavaScript数据结构和算法之图和图算法
- Array栈方法和队列方法的特点说明