Number conversion using sequence stack

convert.c 

#include "seqstack.h"

/*

    进制转换: m是要转换的数,n是进制数

*/

void convert_num(seqstack *s,int m,int n)

{

    while (m!=0)

    {

        stack_push(s,m%n);

        m=m/n;

    }

    stack_show(s);

}

int main(int argc, char const *argv[])

{

    seqstack *s = stack_create();

    if(NULL == s)

    {

        return -1;

    }

    convert_num(s,10,8);

    return 0;

}

seqstack.h

#ifndef __SEQSTACK_H__

#define __SEQSTACK_H__

#include <stdio.h>

#include <stdlib.h>

#define MAX 20

typedef int datatype;

typedef struct

{

    datatype data[MAX]; //存储栈的数组

    int top; //记录栈顶元素所在下标

} seqstack;

//创建

seqstack * stack_create();

//判空

int stack_empty(seqstack *s);

//判满

int stack_full(seqstack *s);

//入栈 压栈 进栈

void stack_push(seqstack *s,datatype e);

//遍历

void stack_show(seqstack *s);

//出栈 弹栈

void stack_pop(seqstack *s);

//返回栈中元素个数

int stack_size(seqstack *s);

//返回栈顶元素指针

datatype* stack_top(seqstack *s);

//销毁栈

void stack_free(seqstack *s);

#endif

 seqstack.c

#include "seqstack.h"

//创建

seqstack * stack_create()

{

    seqstack *s = (seqstack *)malloc(sizeof(seqstack));

    if(NULL == s)

    {

        printf("创建失败\n");

        return NULL;

    }

    s->top = -1;

    printf("顺序栈创建成功\n");

    return s;

}

//判空

int stack_empty(seqstack *s)

{

    return s->top == -1;

}

//判满

int stack_full(seqstack *s)

{

    return s->top == MAX-1; //1表示满,0表示不满

}

//入栈 压栈 进栈

void stack_push(seqstack *s,datatype e)

{

    if (NULL == s || stack_full(s))

    {

        printf("入栈失败\n");

        return;

    }

    //入栈逻辑: 先加后压

    s->top++;

    s->data[s->top] = e; //将元素压入栈中

    printf("%d入栈成功,top=%d\n",e,s->top);

}

//遍历

void stack_show(seqstack *s){

    if (NULL == s || stack_empty(s))

    {

        printf("遍历失败\n");

        return;

    }

    printf("从栈顶到栈底的元素分别是: ");

    for (int i = s->top; i >= 0; i--)

    {

        printf("%d\t",s->data[i]);

    }

    printf("\n");

}

//出栈 弹栈

void stack_pop(seqstack *s)

{

    if (NULL == s || stack_empty(s))

    {

        printf("出栈失败\n");

        return;

    }

    //出栈逻辑  先弹后间

    datatype value = s->data[s->top];

    s->top --;

    printf("%d出栈成功\n",value);

}

//返回栈中元素个数

int stack_size(seqstack *s)

{

    if (NULL == s)

    {

        printf("所给栈不合法\n");

        return -1;

    }

    return s->top+1; //返回栈顶下标+1

}

//返回栈顶元素指针

datatype* stack_top(seqstack *s)

{

    if (NULL == s || stack_empty(s))

    {

        printf("失败\n");

    }

    //将栈顶元素返回

    return &(s->data[s->top]);

   

}

//销毁栈

void stack_free(seqstack *s)

{

    if (NULL !=s)

    {

        free(s);

        s = NULL;

    }

   

    printf("销毁成功\n");

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值