写一个程序,将输入的十进制数据M 转换为八进制数据M8,将其调试通过。在此基础上修改程序,实现十进制数据M 向N 进制(2或8或16)的转换。 (1)采用顺序存储结构实现栈。 (2)采用链表结构实现栈。C语言表示
时间: 2024-10-12 17:16:19 浏览: 39
首先,我们分别编写两个函数,一个用于将十进制数转换成八进制,另一个是通用的十进制转任意基数的转换函数。我们将使用顺序栈和链表栈这两种结构作为示例。
**1. 十进制转八进制(顺序栈)**
```c
#include <stdio.h>
#include <stdlib.h>
// 序列栈结构体
typedef struct {
int data[100]; // 存放数字的数组
int top; // 栈顶指针
} SeqStack;
// 初始化栈
void init(SeqStack *s) {
s->top = -1;
}
// 入栈操作
void push(SeqStack *s, int num) {
if (s->top >= 99) return; // 检查栈是否已满
s->data[++s->top] = num;
}
// 出栈并打印操作
int pop(SeqStack *s) {
if (s->top == -1) return -1; // 空栈
return s->data[s->top--];
}
// 十进制转八进制(顺序栈实现)
void decimal_to_octal(int M, char result[]) {
SeqStack stack;
init(&stack);
while (M > 0) {
push(&stack, M % 8); // 取余并入栈
M /= 8;
}
int i = 0;
while (!stack.top == -1) {
result[i++] = '0' + stack.data[stack.top--]; // 取出栈顶元素并转换为字符
}
result[i] = '\0'; // 结束字符串
printf("十进制 %d 转为八进制: %s\n", M, result);
}
```
**2. 十进制转任意基数(链表栈)**
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 链表节点结构体
typedef struct Node {
int digit;
struct Node* next;
} LinkNode;
// 链表栈结构体
typedef struct {
LinkNode* top;
} LinkStack;
// 初始化链表栈
void init(LinkStack *s) {
s->top = NULL;
}
// 入栈操作
void push(LinkStack *s, int num) {
LinkNode* new_node = (LinkNode*)malloc(sizeof(LinkNode));
new_node->digit = num;
new_node->next = s->top;
s->top = new_node;
}
// 出栈操作
int pop(LinkStack *s) {
if (s->top == NULL) return -1; // 空栈
LinkNode* temp = s->top;
s->top = s->top->next;
free(temp);
return temp->digit;
}
// 十进制转任意基数(链表栈实现)
void generic_decimal_to_base(int M, int base, char result[]) {
LinkStack stack;
init(&stack);
while (M > 0) {
push(&stack, M % base); // 取余并入栈
M /= base;
}
for (int i = 0; i < stack.top; ++i) {
result[i] = '0' + stack.top->digit; // 取出并添加到结果字符串
stack.top = stack.top->next;
}
result[stack.top] = '\0'; // 结束字符串
printf("十进制 %d 转为%dbase: %s\n", M, base, result);
}
// 测试主函数
int main() {
int M = 12345; // 示例十进制数
char octal_result[100];
char hexadecimal_result[100];
decimal_to_octal(M, octal_result);
generic_decimal_to_base(M, 16, hexadecimal_result);
return 0;
}
```
**
阅读全文