头文件:
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);
}
}
网友评论