数据结构练习:进制转换——栈的初始化与插入操作

//此代码只实现十进制转换为二进制

#include<stdio.h>
#include<math.h>
#include<stdlib.h>

#define OK         1
#define ERROR      0

#define TRUE       1
#define FALSE      0

typedef int Status;
typedef int SElemType;

#define STACK_INIT_SIZE 100      //存储空间初始分配量
#define STACKINCREMENT   10      //存储空间分配增量

typedef struct {
    SElemType *base;  //在栈构造之前和销毁之后,base的值为NULL
    SElemType *top;   //栈顶指针
    int stacksize;    //当前已分配的存储空间,以元素为单位
}SqStack;

Status InitStack(SqStack &S)  //构造空栈
{
    S.base = (SElemType*)malloc(STACK_INIT_SIZE * sizeof(SElemType));
    if(!S.base) exit(OVERFLOW);   //存储分配失败
    S.top = S.base;
    S.stacksize = STACK_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 + STACKINCREMENT) * sizeof(SElemType));
        if(!S.base) exit (OVERFLOW); //存储分配失败
        S.top = S.base + S.stacksize;
        S.stacksize = STACKINCREMENT;
    }
    *S.top++ = e;
    return OK;
}

Status Pop(SqStack &S,SElemType e)
{//若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR
    if(S.top = S.base) return ERROR;
    e = *--S.top;
    return OK;
}

Status StackEmpty(SqStack S)//判断是否为空栈
{
    if(S.top == S.base)
    return TRUE;
    else
    return FALSE;
}

Status StackTraverse(SqStack S)//打印函数
{
    if (S.base == NULL)
        return ERROR;
    if (S.top == S.base)
        printf("栈中没有元素……\n");
    SElemType *p;
    p = S.top;
    while (p > S.base)
    {
        p--;
        printf("%d ", *p);
    }

    return OK;
}


void conversion()//二进制转换函数
{
    SqStack S;
    int n;
    InitStack(S);
    SElemType e;
    scanf("%d",&n);
    while(n!=0)
    {
 
        Push(S, n%2);//元素入栈
        n = n / 2;
    }
    StackTraverse(S);


}

int main()
{
    SqStack S;
    SElemType e;
    int n;
    conversion();
    return 0;
}

猜你喜欢

转载自blog.csdn.net/Leiqian5757/article/details/85316879
今日推荐