栈的函数测试

Posted p201821440033

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了栈的函数测试相关的知识,希望对你有一定的参考价值。

#include<stdio.h>
#include<stdlib.h>
#define ok 1
#define error 0
#define overflow -2
typedef struct
{
    int *base,*top;
    int stacksize;
}sqstack;

int initstack(sqstack *s)
{
    s->base=(int *)malloc(10*sizeof(int));                        //预先为s->base所指向的内存空间分配10个int类型的存储空间
    if(!s->base)return overflow;
    s->top=s->base;
    s->stacksize=10;
    return ok;
}

int gettop(sqstack *s,int *e)
{
    if(s->top==s->base)return error;
    *e=*(s->top-1);
    return ok;
}

int pop(sqstack *s,int *e)
{
    if(s->top==s->base)return error;
    s->top--;
    *e=*s->top;
    return ok;
}

int push(sqstack *s,int e)
{
    if(s->top-s->base>=s->stacksize)
    {
        s->base=(int *)realloc(s->base,(s->stacksize+10)*sizeof(int));    //如果栈满,则再次给s->base所指向的内存空间分配10个int类型的存储空间
        if(!s->base)return overflow;
        s->top=s->base+s->stacksize;
        s->stacksize++;
    }
    *s->top=e;
    s->top++;
    return ok;
}

int getlength(sqstack *s)                 //获取栈的长度作为返回值
{
    int i;
    i=s->top-s->base;
    return i;
}

int convertion(int n)                             //传入一个十进制数n,返回值为n的八进制
{
    int k,t,l,m,sum;
    sqstack s;
    initstack(&s);
    do
    {
        k=n%8;
        push(&s,k);
        n/=8;
    }while(n!=0);
    l=getlength(&s);
    for(sum=0;l>0;l--)
    {
        sum*=10;                   //sum*10表示每进行一次循环小数点都向后移动一位,即先出栈的元素位权高
        pop(&s,&m);
        sum+=m;
    }
    return sum;
}

void main()
{
    int i,j;
    printf("请输入一个十进制数:");
    scanf("%d",&j);
    i=convertion(j);
    printf("十进制数%d的八进制为:%d
",j,i);
}

程序运行结果如下:

技术图片技术图片

可以发现,无论是正数还是负数程序都能进行转化。

以上是关于栈的函数测试的主要内容,如果未能解决你的问题,请参考以下文章

VC++中栈的大小是多少?

使用从循环内的代码片段中提取的函数避免代码冗余/计算开销

栈的基本操作

Android Studio - 带回栈的导航抽屉

运行/调试你的PHP代码

这个代码片段有啥作用?