很高兴为您解答这个问题!以下是使用C语言完成栈Stack定义和实现十进制数据转换的代码示例:

#include <stdio.h>

#define MAX_SIZE 100 // 定义栈的最大容量

typedef struct {
    int data[MAX_SIZE]; // 栈的数据存储数组
    int top; // 栈顶指针
} Stack;

// 栈的初始化
void init(Stack *stack) {
    stack->top = -1;
}

// 判断栈是否为空
int IsEmpty(Stack *stack) {
    return stack->top == -1;
}

// 判断栈是否已满
int IsFull(Stack *stack) {
    return stack->top == MAX_SIZE - 1;
}

// 入栈
void push(Stack *stack, int value) {
    if (IsFull(stack)) {
        printf('栈已满,无法入栈。\n');
        return;
    }
    stack->data[++stack->top] = value;
}

// 出栈
int pop(Stack *stack) {
    if (IsEmpty(stack)) {
        printf('栈为空,无法出栈。\n');
        return -1; // 返回一个特殊值表示出错
    }
    return stack->data[stack->top--];
}

// 获取栈顶元素
int gettop(Stack *stack) {
    if (IsEmpty(stack)) {
        printf('栈为空,无栈顶元素。\n');
        return -1; // 返回一个特殊值表示出错
    }
    return stack->data[stack->top];
}

// 十进制转换为其他进制
void decimalToOther(int decimal, int base) {
    Stack stack;
    init(&stack);
    
    while (decimal > 0) {
        push(&stack, decimal % base);
        decimal /= base;
    }
    
    printf('转换结果为:');
    while (!IsEmpty(&stack)) {
        int value = pop(&stack);
        if (value < 10) {
            printf('%d', value);
        } else {
            printf('%c', 'A' + value - 10); // 十六进制中使用字母表示10~15
        }
    }
    printf('\n');
}

int main() {
    int decimal;
    printf('请输入一个十进制数:');
    scanf('%d', &decimal);
    
    printf('\n转换为二进制:');
    decimalToOther(decimal, 2);
    
    printf('转换为八进制:');
    decimalToOther(decimal, 8);
    
    printf('转换为十六进制:');
    decimalToOther(decimal, 16);
    
    return 0;
}

这段代码中,我们首先定义了一个栈结构体Stack,包含一个数组data用于存储栈的数据,以及一个整数top表示栈顶指针。接下来,我们实现了栈的初始化、判断栈是否为空、判断栈是否已满、入栈、出栈和获取栈顶元素等功能函数。

在主函数中,我们首先输入一个十进制数,然后调用decimalToOther函数将其转换为二进制、八进制和十六进制,并输出转换结果。

希望以上代码能够满足您的需求!如果有任何疑问,请随时提问。

C语言实现栈数据结构及十进制数转换

原文地址: https://www.cveoy.top/t/topic/UMn 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录