C语言栈实现任意进制转换

  栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。

#include <stdio.h>

#define MAX_STACK_SIZE    100

int stack[MAX_STACK_SIZE];
int top = -1;

int is_empty(int *top)
{
    if (*top < 0)
        return 1;

    return 0;
}

int is_full(int *top)
{
    if (*top >= MAX_STACK_SIZE - 1)
        return 1;

    return 0;
}

void add(int *top, int item)
{
    if (is_full(top)) {
        fprintf(stderr, "stack full\n");
        return;
    }

    stack[++*top] = item;                // 先移动指针再放入数值,指针指向的位置非空
}

int delete(int *top)
{
    if (is_empty(top)) {
        fprintf(stderr, "stack empty\n");
        return -1;
    }
    
    return stack[(*top)--];                // 先取出数值再移动指针,指针指向的位置非空
}

int main(void)
{
    int num, jin;

    printf("输入一个数字:");
    scanf("%d", &num);
    printf("希望转换为多少进制:");
    scanf("%d", &jin);

    while(num) {
        add(&top, num % jin);    // 将余数压栈
        num /= jin;
    }

    while(!is_empty(&top)) {
        printf("%d", delete(&top));
    }
    putchar(\n);

    return 0;
}

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。