ex5.“栈”+进制转换算法

#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
#include<stdio.h>
#include<stdlib.h>
typedef int SElemType;
typedef struct{
    SElemType *base,*top;
    int stacksize;
}SqStack;
int InitStack(SqStack &S)
{
    S.base = (SElemType*)malloc(sizeof(SElemType) * STACK_INIT_SIZE);
    if(!S.base) exit(-2);
    S.base = S.top;
    S.stacksize = STACK_INIT_SIZE;
    return 1;
}//
int GetTop(SqStack S,SElemType &e)
{
    if(S.base == S.top) return -1;
    e = *(S.top-1);
    return 1;
}
int Push(SqStack &S,SElemType e)
{
    if(S.top - S.base >= S.stacksize)
    {
        S.base = (SElemType*)realloc(S.base,sizeof(SElemType) * (STACKINCREMENT + S.stacksize));
        if(!S.base) exit(-2);
        S.top = S.base + S.stacksize;
        S.stacksize += STACKINCREMENT;
    }
    *S.top++ = e;
    return 1;
}
int Pop(SqStack &S,SElemType &e)
{
    if(S.top <= S.base) return -1;
    e = *(--S.top);
    return 1;
}
void conversion(int e,int i)
{
    SqStack s;
    InitStack(s);
    printf("十进制%d的%d进制数为:",e,i);
    while(e)
    {
        Push(s,e % i);
        e = e / i;
    }

    while(s.top != s.base)
    {
        int temp;
        Pop(s,temp);
        printf("%d",temp);
    }
    printf("\n");
}
int main()
{
    SqStack s1;
    InitStack(s1);
    Push(s1,4);
    Push(s1,10);int i;
    GetTop(s1,i);
    printf("%d",i);
    printf("-------------------\n");
    conversion(1348,8);
    return 1;
}
    
时间: 2024-10-13 15:42:57

ex5.“栈”+进制转换算法的相关文章

任意进制转换算法

任意进制转换算法 N年没有写博客,发个进制转换的玩下,支持负数:功能属于简化版的 Convert.ToInt32 ,特点是: 1.任意位,如:0,1(二进制),0...7(八进制),0...9,A...F(16进制),0...N(N进制),或者是:[email protected]#$%^&*(8进制,字符符号),也可以是中文. 2.8 byte 最大长度. 3.C#源码. 最近写markdown格式习惯啦,cnblogs啥时候全改掉算了,别用这个htmleditor算了. 先说明下进制转换的基

lua之m进制转换为n进制-任意进制转换算法

够无聊的写这个,为防止需要的人也无聊一遍,写个吧 算法有n种,但是,咱们一种就够用了 1 --数组倒序排列 2 local function orderByDesc( input ) 3 local output = {} 4 local count = #input 5 while count > 0 do 6 table.insert(output, input[count] ) 7 count = count -1 8 end 9 return output 10 end 11 12 --

浅谈栈&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语言实现

         进制问题几乎是刚入门计算机时学的东西,即便如此,你知道进制之间是如何转换的吗?下面就来详细说明各进制之间的转换原理. (一)二.八.十六进制转十进制 2.8.16转10有一个通用的算法,就是用各位上的数乘以本进制的基数的n次幂(n为本位数后面的位数)求值后相加所得.有点绕口是吧?语文没学好,请谅解,下面举个例就懂了. Eg:100002=? 10 这是将二进制的10000转换成十进制,从左往右看,第一位是1,后面位数都是0,那就是: 1*24+0*23+0*22+0*21+0*

进制转换算法

package com.lk.C; import java.util.Stack; public class Test3 { public static String getBinary(int decimal){ Stack<Integer> stack = new Stack<Integer>(); while(decimal != 0){ stack.push(decimal % 2);//向栈中增加余数 decimal = decimal / 2;//获得新商 } Stri

C# 进制转换 (没有数值的长度限制)

曾经在大学时做过一个c的进制转换算法,那时由于技术的局限性,数值的大小受到限制(系统数据类型长度限制),多年以后,自己那台学习机陈旧后感觉要报废了,整理了一下里面的东西,偶尔在一个角落里发现了这个转换算法,觉得它还有改进的地方,可以让它功能更强大(当时想过要转换超长数值,但受系统数据类型的局限性.个人开发语言深度的认知.以及视界观的狭隘,没能想到可以解决计算超长数据的有效的方法),这里我会将多年前大学里写的那段,和我修改后的粘贴出来,以飨读者. 传入参数: string x 是超大数的字符串格式

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

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

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

用栈实现进制转换

“除基取余 + 顺序栈”  实现十进制数转换成其他进制数,代码如下: #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;        //初始化栈