C(或C++)实现顺序栈,并利用该栈实现教材的数制转换算法
时间: 2024-11-22 21:39:38 浏览: 24
在C语言中,我们可以手动实现一个简单的顺序栈数据结构,它基于数组存储元素。以下是一个基本的顺序栈实现:
```c
#include <stdio.h>
#define MAX_SIZE 50
typedef struct {
int top;
int data[MAX_SIZE];
} Stack;
// 初始化栈
void init(Stack* stack) {
stack->top = -1;
}
// 判断栈是否为空
int isEmpty(Stack* stack) {
return stack->top == -1;
}
// 将元素压入栈顶
void push(Stack* stack, int value) {
if (stack->top < MAX_SIZE - 1) {
stack->data[++stack->top] = value;
} else {
printf("Stack is full.\n");
}
}
// 弹出栈顶元素并返回
int pop(Stack* stack) {
if (!isEmpty(stack)) {
return stack->data[stack->top--];
} else {
printf("Stack is empty.\n");
return -1;
}
}
// 主要用于数制转换算法的辅助函数,将十进制整数分解为各个位
void decimalToDigit(int num, char result[]) {
Stack digitStack;
while (num > 0) {
push(&digitStack, num % 10);
num /= 10;
}
// 翻转栈中的元素并打印出来,从低位到高位
int index = 0;
while (!isEmpty(&digitStack)) {
result[index++] = '0' + pop(&digitStack);
}
result[index] = '\0'; // 添加结束符
}
int main() {
Stack digitsStack;
init(&digitsStack);
// 示例:将十进制数123转换为二进制
int decimalNum = 123;
char binaryResult[10];
decimalToDigit(decimalNum, binaryResult);
printf("Decimal: %d\nBinary: %s\n", decimalNum, binaryResult);
return 0;
}
```
上述代码中,`decimalToDigit`函数首先将输入的十进制数字分解成一个个位,然后逐个推入顺序栈,最后从栈中弹出并反转输出得到其他进制的结果。注意这个实现并不包含错误处理,实际应用中需要考虑溢出等边界情况。
阅读全文