美文网首页
栈应用之数制转换

栈应用之数制转换

作者: obidv | 来源:发表于2018-09-01 16:48 被阅读0次

    头文件:

    stackdef.h
    #pragma once
    //基本定义
    #define true 1
    #define false 0
    #define ok 1
    #define error 0
    #define infeasible -1
    #define overflow -2
    
    typedef int status;
    
    #define init_size 100//预设量
    #define increment 10//增量
    
    typedef int selemtype;//设置元素类型
    
    typedef struct {//栈结构
        selemtype *base;
        selemtype *top;
        int stacksize;
    }sqstack;
    
    //函数声明
    status InitStack(sqstack &s);
    status Push(sqstack &s, selemtype e);
    status Pop(sqstack &s,selemtype &e);
    status StackeEmpty(sqstack s);
    status GetTop(sqstack s, selemtype &e);
    

    cpp文件:

    StackOperation.cpp
    #include <stdio.h>
    #include <stdlib.h>
    #include "stackdef.h"
    
    
    
    
    
    
    //----------函数定义
    //-----------初始化栈----------//
    status InitStack(sqstack &s) {
        s.base = (selemtype *)malloc(init_size * sizeof(selemtype));
        if (!s.base) exit(overflow);
        s.top = s.base;
        s.stacksize = init_size;
        return ok;
    }
    
    //--------栈顶加入元素--------//
    status Push(sqstack &s, selemtype e) {
        if (s.top - s.base >= s.stacksize) {
            s.base = (selemtype *)realloc(s.base, (s.stacksize + increment) * sizeof(selemtype));
            s.top = s.base + s.stacksize;
            s.stacksize += increment;
        }
        *s.top++ = e;
        return ok;
    }
    
    //-----------栈顶指针下移--------//
    status Pop(sqstack &s,selemtype &e) {
        if (s.base == s.top) return error;
        e=*--s.top;
    
        return ok;
    }
    
    //----------判断是否为空栈---------//
    status StackeEmpty(sqstack s) {
        if (s.base == s.top) return true;
        else return false;
    }
    
    //---------获得栈顶元素-------//
    status GetTop(sqstack s, selemtype &e) {
        if (s.top == s.base) return error;
        e = *(s.top - 1);
        return ok;
    }
    
    Conversion.cpp
    #include <stdio.h>
    #include "stackdef.h"
    #include <stdlib.h>
    
    //---------函数声明
    void Conversion();
    //对于输入的任意一个非负十进制整数,打印输出与其等值的二进制数
    
    //----------主函数
    int main() {
        Conversion();
        return 0;
    }
    
    
    //----------函数定义
    void Conversion() {
        sqstack s;
        int n,e;
        InitStack(s);
        scanf("%d", &n);
        while (n) {
            Push(s, n % 2);
            n = n / 2;
        }
        while (!StackeEmpty(s)) {
            Pop(s,e);
            printf("%d", e);
        }
    }
    

    相关文章

      网友评论

          本文标题:栈应用之数制转换

          本文链接:https://www.haomeiwen.com/subject/easuwftx.html