C语言实现栈数据结构及十进制数转换
很高兴为您解答这个问题!以下是使用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函数将其转换为二进制、八进制和十六进制,并输出转换结果。
希望以上代码能够满足您的需求!如果有任何疑问,请随时提问。
原文地址: https://www.cveoy.top/t/topic/UMn 著作权归作者所有。请勿转载和采集!