zoukankan      html  css  js  c++  java
  • SqStack进制计算

    基于SqStack 进制计算

    #include<malloc.h> 
    #include<stdio.h> 
    #include<stdlib.h> 
    typedef int Status;
    typedef int SElemType;
    #define STACK_INIT_SIZE 100 
    #define STACKINCREMENT 20
    #define OVERFLOW -2
    #define OK 1
    #define ERROR 0
    typedef struct SqStack
    {
        SElemType *base;
        SElemType *top;
        int stacksize;
    } SqStack; // 顺序栈
    
    
    Status InitStack(SqStack &S)
    { // 构造一个空栈S
        if (!(S.base = (SElemType *)malloc(STACK_INIT_SIZE * sizeof(SElemType))))
            exit(OVERFLOW); // 存储分配失败
        S.top = S.base;
        S.stacksize = STACK_INIT_SIZE;
        return OK;
    }
    int GetTop(SqStack S)
    { // 若栈不空,则用e返回S的栈顶元素
        if (S.top>S.base)
            return *(S.top - 1);
    }
    
    Status Push(SqStack &S, SElemType e)
    { // 插入元素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;
        S.top++;
        return OK;
    }
    
    Status Pop(SqStack &S, SElemType &e)
    { // 若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR
        if (S.top == S.base)
            return ERROR;
        //e=*--S.top;//e=*S.top;
        S.top--;
        e = *S.top;
        return e;
    }
    
    Status StackTraverse(SqStack S, Status(*visit)(SElemType))
    { // 从栈底到栈顶依次对栈中每个元素调用函数visit()。
      // 一旦visit()失败,则操作失败
        while (S.top>S.base)
            visit(*S.base++);
        printf("
    ");
        return OK;
    }
    int main()
    {
        SqStack S;
        int x, y, e,num1;
        InitStack(S);
        printf("输入一个十进制数:
    ");
        scanf("%d", &x);
        printf("输入一个进制数:
    ");
        scanf("%d", &num1);
        while (x)
        {
            Push(S, x % num1);
            x = x / num1;
        }
        while (S.base != S.top)
        {
            y = Pop(S, e);
            printf("%d", y);
        }
        printf("
    ======================
    ");
    
        system("pause");
        return 0;
    }

    参考:https://blog.csdn.net/sunshunli/article/details/78461172

  • 相关阅读:
    安装VMtools vim编辑器的使用 压缩包命令 Linux下的用户管理 (第三天)
    VM虚拟机安装 常用Linux命令 网卡配置 (第二天)
    数据库的交互模式 常用的dos命令 (第一天)
    Validate US Telephone Numbers FreeCodeCamp
    Arguments Optional FreeCodeCamp
    Everything Be True FreeCodeCamp
    Binary Agents FreeCodeCamp
    Steamroller FreeCodeCamp
    Drop it FreeCodeCamp
    Smallest Common Multiple FreeCodeCamp
  • 原文地址:https://www.cnblogs.com/herd/p/11761629.html
Copyright © 2011-2022 走看看