用c语言用栈和队列求一整数的n进制数
时间: 2024-01-22 09:18:10 浏览: 64
C语言栈和队列
这是一个比较基础的问题,下面是一个简单的实现:
```c
#include <stdio.h>
#define MAX_LEN 100 // 最大支持的进制数长度
// 声明栈和队列数据结构
typedef struct {
int data[MAX_LEN];
int top;
} Stack;
typedef struct {
int data[MAX_LEN];
int front, rear;
} Queue;
// 初始化栈
void init_stack(Stack *s) {
s->top = -1;
}
// 判断栈是否为空
int is_empty_stack(Stack *s) {
return s->top == -1;
}
// 入栈
void push(Stack *s, int x) {
s->data[++s->top] = x;
}
// 出栈
int pop(Stack *s) {
return s->data[s->top--];
}
// 初始化队列
void init_queue(Queue *q) {
q->front = q->rear = 0;
}
// 判断队列是否为空
int is_empty_queue(Queue *q) {
return q->front == q->rear;
}
// 入队
void enqueue(Queue *q, int x) {
q->data[q->rear++] = x;
}
// 出队
int dequeue(Queue *q) {
return q->data[q->front++];
}
// 将整数n转换为m进制数
void convert(int n, int m) {
Stack s;
Queue q;
int r;
init_stack(&s);
init_queue(&q);
// 将n转换为m进制数并压入栈中
while (n) {
r = n % m;
push(&s, r);
n /= m;
}
// 将栈中元素依次出栈并入队
while (!is_empty_stack(&s)) {
enqueue(&q, pop(&s));
}
// 依次出队并输出队列中的元素
while (!is_empty_queue(&q)) {
printf("%d", dequeue(&q));
}
printf("\n");
}
int main() {
int n, m;
printf("Enter a number and its base: ");
scanf("%d %d", &n, &m);
printf("%d in base %d is: ", n, m);
convert(n, m);
return 0;
}
```
该程序中使用了栈和队列两种数据结构,其中栈用于将整数n转换为m进制数,而队列则用于存储转换后的每一位数字,并输出最终的结果。
阅读全文