• 顺序栈实现数制的转换


    此例为十进制N转换为其它进制

    1.顺序栈的存储结构

    typedef struct{
      ElemType data[MAXSIZE];//为顺序栈分配最大容量的内存
      int top;  //指向栈顶
    }SqStack;
    View Code

    2.初始化栈

    void Initstack(SqStack &S)
    {
        if(!S.data) exit(-1);
        S.top = 0;
    }
    View Code

    3.入栈

    Status Push(SqStack &S,ElemType e)
    {
        if(S.top==MAXSIZE) return ERROR;
        S.data[S.top++] = e;
        return OK;
    }
    View Code

    4.出栈

    Status Pop(SqStack &S)
    {
       if(S.top<=0) return ERROR;
       S.top--;
       return OK;
    }
    View Code

    5.获得栈顶元素

    void getTop(SqStack S,ElemType &e)
    {
        if(S.top==0) printf("栈空了!!");
        e = S.data[S.top-1];
    }
    View Code

    6.进制转换

    void Convertion(SqStack &S)
    {
        int n,r;
        printf("输入要转换进制的数:
    ");
        scanf("%d",&n);
        printf("输入要转换的进制:
    ");
        scanf("%d",&r);
        while(n)
        {
            Push(S,n%r);
            n/=r;
        }
        while(S.top)
        {
            ElemType e;
            getTop(S,e);
            Pop(S);
            printf("%d",e);
        }
        printf("
    ");
    }
    View Code

    7.遍历

    void traverse(SqStack S)
    {
        printf("进制转换结果:
    ");
        for(int i=S.top-1;i>=0;i--)
        {
            printf("%d",S.data[i]);
        }
        printf("
    ");
    }
    View Code

    8.全部代码(这里就整合为一个了)

    #include<stdio.h>
    #include<stdlib.h>
    
    #define MAXSIZE 100
    #define ERROR 0
    #define OK 1
    
    typedef int Status;
    typedef int ElemType;
    
    typedef struct{
      ElemType data[MAXSIZE];//为顺序栈分配最大容量的内存
      int top;  //指向栈顶
    }SqStack;
    
    void Initstack(SqStack &S)
    {
        if(!S.data) exit(-1);
        S.top = 0;
    }
    
    Status Push(SqStack &S,ElemType e)
    {
        if(S.top==MAXSIZE) return ERROR;
        S.data[S.top++] = e;
        return OK;
    }
    
    Status Pop(SqStack &S)
    {
       if(S.top<=0) return ERROR;
       S.top--;
       return OK;
    }
    void getTop(SqStack S,ElemType &e)
    {
        if(S.top==0) printf("栈空了!!");
        e = S.data[S.top-1];
    }
    void Convertion(SqStack &S)
    {
        int n,r;
        printf("输入要转换进制的数:
    ");
        scanf("%d",&n);
        printf("输入要转换的进制:
    ");
        scanf("%d",&r);
        while(n)
        {
            Push(S,n%r);
            n/=r;
        }
        while(S.top)
        {
            ElemType e;
            getTop(S,e);
            Pop(S);
            printf("%d",e);
        }
        printf("
    ");
    }
    void traverse(SqStack S)
    {
        printf("进制转换结果:
    ");
        for(int i=S.top-1;i>=0;i--)
        {
            printf("%d",S.data[i]);
        }
        printf("
    ");
    }
    
    
    int main()
    {
        SqStack S;
    
        Initstack(S);
    
        Convertion(S);
    
       //我看了几个博客,都是用上面的方法,下面这个也可以
       //traverse(S);//这两个函数只能用一个
        return 0;
    }
    View Code
  • 相关阅读:
    VDOM configuration
    Fortinet Security Fabric
    Gartner 2018 年WAF魔力象限报告:云WAF持续增长,Bot管理与API安全拥有未来
    installns
    vyos 基础配置
    vyatta的fork开源版本vyos
    vyos User Guide
    图论----同构图(详解)
    Educational Codeforces Round 21(A.暴力,B.前缀和,C.贪心)
    2017年中国大学生程序设计竞赛-中南地区赛暨第八届湘潭市大学生计算机程序设计大赛游记心得
  • 原文地址:https://www.cnblogs.com/wwww2/p/11716412.html
Copyright © 2020-2023  润新知