栈应用之数制转换

头文件:

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 
#include 
#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 
#include "stackdef.h"
#include 

//---------函数声明
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);
    }
}

你可能感兴趣的:(栈应用之数制转换)