使用c++,基于顺序栈实现十进制数到二进制数的转换
时间: 2024-05-09 10:19:40 浏览: 114
用C语言顺序栈实现十进制和二进制的转换.docx
以下是使用C语言基于顺序栈实现十进制数到二进制数的转换的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define STACK_INIT_SIZE 100
#define STACK_INCREMENT 10
typedef struct {
int *base; // 栈底指针
int *top; // 栈顶指针
int stack_size; // 当前已分配的存储空间
} SqStack;
/* 初始化顺序栈 */
void InitStack(SqStack *S) {
S->base = (int *)malloc(STACK_INIT_SIZE * sizeof(int));
if (!S->base) {
exit(1); // 存储分配失败
}
S->top = S->base;
S->stack_size = STACK_INIT_SIZE;
}
/* 进栈操作 */
void Push(SqStack *S, int e) {
if (S->top - S->base >= S->stack_size) { // 栈满,追加存储空间
S->base = (int *)realloc(S->base, (S->stack_size + STACK_INCREMENT) * sizeof(int));
if (!S->base) {
exit(1); // 存储分配失败
}
S->top = S->base + S->stack_size; // 栈底指针不变
S->stack_size += STACK_INCREMENT;
}
*(S->top++) = e; // e成为新的栈顶元素
}
/* 出栈操作 */
int Pop(SqStack *S) {
if (S->top == S->base) { // 栈空
exit(1);
}
return *(--S->top); // 栈顶元素出栈,并返回其值
}
/* 十进制数转换为二进制数 */
void DecToBin(int dec) {
SqStack S;
InitStack(&S); // 初始化顺序栈
while (dec > 0) {
Push(&S, dec % 2); // 余数进栈
dec /= 2;
}
while (S.top != S.base) {
printf("%d", Pop(&S)); // 从栈顶到栈底输出0和1
}
printf("\n");
}
int main() {
int dec;
printf("请输入一个十进制数:");
scanf("%d", &dec);
printf("转换为二进制数为:");
DecToBin(dec);
return 0;
}
```
使用方法:
1. 编译上述代码(如文件名为`dec2bin.c`):
```
gcc dec2bin.c -o dec2bin
```
2. 运行生成的可执行文件:
```
./dec2bin
```
3. 输入一个十进制数,程序会输出其转换后的二进制数。
阅读全文