利用栈实现进制转换

#include<stdio.h>
#include<malloc.h>

#define MAX_STACK_SIZE 10//静态栈向量大小

#define ERROR 0
#define OK 1

typedef int ElemType;
typedef int Status;
/
栈的应用:
进制转换
/
typedef struct sqstack{
ElemType stack_array[MAX_STACK_SIZE];
// int size;
int top;
int bottom;
}SqStack;

//初始化栈
void Init_Stack(SqStack *S){
S->bottom=S->top=0;
printf("\n初始化栈成功!\n");
}

//压栈(元素进栈)
Status push(SqStack *S , ElemType e){
if(S->top >= MAX_STACK_SIZE - 1){
printf("栈满!\n");
return ERROR;//栈满
}
printf("--------");
printf("当前入栈元素:%d\n",e);
// printf("入栈前S->top==%d\n",S->top);
S->top++;//位置自加
// S->size++;
// printf("size==%d",S->size);
printf("入栈后S->top==%d\n",S->top);
S->stack_array[S->top] = e;//元素入栈
return OK;
}

//弹栈(元素出栈)
Status pop(SqStack *S , ElemType e){
if(S->top == 0){
return ERROR;//栈空
}
e = S->stack_array[S->top];//先取
printf("当前应当出栈:%d\n",e);
S->top--;//自减
// S->size--;
// printf("size==%d",S->size);
return OK;
}

//遍历栈
Status StackTravel(SqStack *S){
int e;
int ptr;
ptr = S->top;

while(ptr > S->bottom){
    e = S->stack_array[ptr];
    ptr--;
    printf("%d",e);
}

}

void conversion(int n , int d){
SqStack S;//创建栈
ElemType k;//欲进栈的元素
int temp = n;//保存n
Init_Stack(&S);//初始化栈
// printf("--入栈初始:S->top==%d\n",S.top);
while(n>0){
k = n % d;//取余
push(&S,k);//余数进栈
n = n / d;//结果取整
}
printf("将%d转化成%d进制后为:",temp,d);
StackTravel(&S);//遍历栈
}

int main(){
conversion(511, 2);
conversion(512, 2);
}

原文地址:http://blog.51cto.com/12012875/2160421

时间: 2024-08-03 04:51:29

利用栈实现进制转换的相关文章

数据结构实验之栈:进制转换

            数据结构实验之栈:进制转换 输入一个十进制整数,将其转换成对应的R(2<=R<=9)进制数,并输出. 输入 第一行输入需要转换的十进制数:第二行输入R. 输出 输出转换所得的R进制数. 模板: while(n!=0) { mod = n%r; q[i++] = mod;//i初始化为0 n/=r; }  

用栈实现进制转换

“除基取余 + 顺序栈”  实现十进制数转换成其他进制数,代码如下: #include <stdio.h>#define MAX_L 100 //定义栈typedef struct {    int data[MAX_L];            int top;            }Stack; //进制转换//origin是待转数,right是要转的目的数的权void Convert(int origin, int right)  {    Stack s;        //初始化栈

顺序栈(进制转换 + 括号匹配 + 判断栈表 + 最长括号匹配长度)

#include <stdio.h> #include <stdlib.h> #include <iostream> using namespace std; #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define INFEASIBLE -1 #define OVERFLOW -2 #define STACK_INIT_SIZE 100 #define STACKLINCREMENT 10

浅谈栈&amp;&amp;进制转换

利用stack实现进制转换 Stack.h #ifndef _STACK_H_ #define _STACK_H_ #include<iostream> #include<assert.h> using namespace std; typedef int ElemType; #define STACK_MAX_SIZE 100 #define HEX 2 typedef struct Stack { ElemType *base;//栈底指针 int top; //栈顶标识 in

c语言之进制转换(栈实现)

从上两篇博客中我们可以知道,栈具有后进先出的特性,而进制转换的打印输出刚好与计算过程相反,满足栈这后进先出的特性, 所以可以用栈很快的实现进制转换,下面是用栈实现进制转换的c函数 void conversion (SqStack *pstack,unsigned int N, const unsigned int d){ if( pstack == NULL)//当传入参数为指针,必须判空 exit(-1); int mod ;//保存mod = N %d while( N != 0){ mod

java:数据结构(二)栈的应用(进制转换)

说到进制转换,java已经封装了基本的方法,在竞赛中使用封装的方法自然能节省大量时间 另一位仁兄介绍的封装好的方法: https://blog.csdn.net/m0_37961948/article/details/80438113 如果不想看上面的全部,我总结了两条基本方放,记下就可以随意转化: 掌握这两个方法就可以实现任意进制的随便转化 (这个是针对竞赛,如果是需要学习底层,大家还在看api研究吧) 再看一个水题: 题目描述 写出一个程序,接受一个十六进制的数值字符串,输出该数值的十进制字

数据结构实验之栈一:进制转换(栈的应用)

 数据结构实验之栈一:进制转换 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 输入一个十进制整数,将其转换成对应的R(2<=R<=9)进制数,并输出. 输入 第一行输入需要转换的十进制数: 第二行输入R. 输出 输出转换所得的R进制数. 示例输入 1279 8 示例输出 2377 提示 来源 示例程序 后台数据太水,按理说应该考虑零的情况,但是你不判断零也是对的. #include <stdio.h> #i

hdu 2031 进制转换(栈思想的使用)

进制转换 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 63039    Accepted Submission(s): 34261 Problem Description 输入一个十进制数N,将它转换成R进制数输出. Input 输入数据包含多个测试实例,每个测试实例包含两个整数N(32位整数)和R(2<=R<=16, R<&

利用java中的BigInteger实现进制转换

[原创] java中的进制BigInteger十分的强大,而且好用,他可以表示任意大的整数,同时还可以进行进制转换,十分的方便, 代码示例: 1 package com.jiajia.demo_1; 2 import java.math.BigInteger;//导入该包 3 public class Demo { 4 public static void main(String[] args) { 5 String str = new BigInteger("15", 10).toS