C语言编写一个栈和队列的进制转换
时间: 2023-09-22 13:07:34 浏览: 135
以下是使用栈和队列实现进制转换的C语言代码:
栈的实现:
```c
#include <stdio.h>
#define MAX_STACK 100
int stack[MAX_STACK_SIZE];
int top = -1;
void push(int item) {
if (top >= MAX_STACK_SIZE - 1) {
printf("Stack Overflow!\n");
return;
}
stack[++top] = item;
}
int pop() {
if (top == -1) {
printf("Stack Underflow!\n");
return -1;
}
return stack[top--];
}
int is_empty() {
return top == -1;
}
```
队列的实现:
```c
#include <stdio.h>
#define MAX_QUEUE_SIZE 100
int queue[MAX_QUEUE_SIZE];
int front = 0;
int rear = 0;
void enqueue(int item) {
if ((rear + 1) % MAX_QUEUE_SIZE == front) {
printf("Queue Overflow!\n");
return;
}
queue[rear] = item;
rear = (rear + 1) % MAX_QUEUE_SIZE;
}
int dequeue() {
if (front == rear) {
printf("Queue Underflow!\n");
return -1;
}
int item = queue[front];
front = (front + 1) % MAX_QUEUE_SIZE;
return item;
}
int is_empty() {
return front == rear;
}
```
进制转换函数:
```c
#include <stdio.h>
void convert(int num, int base) {
int rem;
while (num != 0) {
rem = num % base; // 求余数
push(rem); // 将余数入栈
num /= base; // 更新被除数
}
while (!is_empty()) {
enqueue(pop()); // 将栈中的元素出栈并入队列
}
while (!is_empty()) {
printf("%d", dequeue()); // 依次出队列并输出
}
printf("\n");
}
int main() {
int num, base;
printf("Enter a number: ");
scanf("%d", &num);
printf("Enter the base: ");
scanf("%d", &base);
printf("The converted number is: ");
convert(num, base);
return 0;
}
```
在该程序中,我们首先输入一个要转换的数字和目标进制,接着调用 `convert` 函数,该函数使用栈来存储余数,然后将余数依次出栈并入队列,最后依次出队列并输出,即可实现进制转换。
阅读全文