• 顺序栈的实现


    本文作者:韩申权
    作者博客:http://www.cnblogs.com/hsqdboke
    转载请注明出处,侵权必究,保留最终解释权!

     

    用数制的转换算法调试顺序栈的基本操作算法。编写主程序调用数制的转换conversion算法,再由conversion调用InitStack、StackEmpty、Push、Pop算法。用不同的数转换成不同的进制调试程序并对相应的输出作出分析;修改输入数据,预期输出并验证输出的结果,加深对Push和Pop算法的理解。

    #include<stdio.h>
    #include<stdlib.h>
    #define STACK_INIT_SIZE 100
    #define STACKINCREMENT 10
    #define ERROR 0
    #define OK 1
    #define OVERFLOW -1
    typedef int status;
    typedef int SElemType;
    typedef struct   //栈的顺序存储表示
    {
        SElemType *base;
        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 StackEmpty(SqStack *S)
    {
        if(S->base==S->top)
        return OK;
        else
        return ERROR;
    }
    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)//出栈
    {
        if(S->top==S->base)return ERROR;
        *e=*(--S->top);
        return OK;
    }
    void conversion(int n,int m)
    {
        SqStack S;
        SElemType e;
        InitStack(&S);
        printf("%d进制转换为%d进制为: ",n,m);
        while(n)
        {
            push(&S,n%m);
            n/=m;
        }
        while(!StackEmpty(&S))
        {
            pop(&S,&e);
            printf("%d",e);        
        }
        printf("\n");
    }
    int main()
    {
        int n,m;
        while(scanf("%d%d",&n,&m)!=EOF)
        {
            conversion(n,m);        
        }    
    }

     
  • 相关阅读:
    脚本性能分析
    openwrt补丁
    定制openwrt的根文件
    openwrt路由器更换了Flash之后需要修改的源码
    openwrt驱动与应用程序的联系
    我的vi/vim配置文件
    Python中的字典分组函数(groupby,itertools)
    迭代器
    tuple
    list
  • 原文地址:https://www.cnblogs.com/hsqdboke/p/2509318.html
Copyright © 2020-2023  润新知