读书人

利用栈构造计算十进制转化二进制

发布时间: 2012-11-04 10:42:42 作者: rapoo

利用栈结构计算十进制转化二进制

//栈的顺序表示实现#include <stdio.h>#include <stdlib.h>//栈初始大小#define STACK_INIT_SIZE 100//栈的增长大小#define STACKINCREMENT 10#define OVERFLOW 0#define ERROR 0#define FALSE 0#define TRUE 1typedef int Status;typedef int SElemType;typedef int boolean;//栈的顺序定义typedef struct{SElemType *bese; //栈底指针,在栈构造之前和析构之后值都为NULLSElemType *top; //栈顶指针int stacksize; //栈的大小}Stack;//初始化栈Stack InitStack(){Stack S;S.bese = (SElemType *)malloc(sizeof(SElemType) * STACK_INIT_SIZE);if(!S.bese)exit(OVERFLOW);S.top = S.bese;S.stacksize = STACK_INIT_SIZE;return S;}//若栈不为空,则返回栈顶元素eStatus GetTop(Stack S){//判断是否为空栈if(S.bese == S.top)return ERROR;//非空栈的栈顶指针始终是在栈顶元素的下一个位置上return *(S.top - 1);}//入栈操作,若栈满,则增加存储空间Stack push(Stack S, SElemType e){//判断栈是否已经满if(S.top - S.bese >= STACK_INIT_SIZE){S.bese = (SElemType *)realloc(S.bese, sizeof(SElemType) * (S.stacksize + STACKINCREMENT));if(!S.bese)exit(OVERFLOW);S.top = S.bese + S.stacksize; //计算栈顶指针S.stacksize += STACKINCREMENT;}*S.top++ = e;return S;}//入栈操作Stack pop(Stack S){//空栈if(S.bese == S.top){printf("此栈是空栈!");return S;}printf("%d", * --S.top);return S;}//销毁栈Stack DestoryStack(Stack S){S.bese = NULL;return S;}//清空栈中数据Stack ClearStack(Stack S){S.top = S.bese;return S;}//判断栈是否是空栈boolean StackEmpty(Stack S){if(S.bese == S.top)return TRUE;return FALSE;}//返回栈的长度int StackLength(Stack S){return S.top - S.bese;}//计算十进制数的二进制int main(){//初始化栈Stack S = InitStack();int N;printf("请输入数N:");scanf("%d", &N);while(N){S = push(S, N % 2);N = N / 2;}while(!StackEmpty(S)){S = pop(S);}printf("\n");//销毁栈DestoryStack(S);return 0;}

读书人网 >编程

热点推荐