使用链栈写一个算法实现十进制数转二进制,及十进制转八进制
时间: 2024-02-06 22:01:56 浏览: 73
1. 十进制数转二进制
算法思路:
将十进制数不断除以2,将余数依次入栈,直到商为0。然后依次出栈,组成二进制数。
具体实现:
```C++
#include <iostream>
using namespace std;
const int STACK_INIT_SIZE = 100; // 栈的初始大小
const int STACK_INCREMENT = 10; // 栈的增量
// 栈的结构体
typedef struct {
int *base; // 栈底指针
int *top; // 栈顶指针
int stackSize; // 当前栈的大小
} SqStack;
// 初始化栈
void InitStack(SqStack &s) {
s.base = new int[STACK_INIT_SIZE];
s.top = s.base;
s.stackSize = STACK_INIT_SIZE;
}
// 入栈
void Push(SqStack &s, int e) {
if (s.top - s.base >= s.stackSize) { // 栈满,需要扩容
s.base = (int*)realloc(s.base, (s.stackSize + STACK_INCREMENT) * sizeof(int));
if (!s.base) {
exit(0);
}
s.top = s.base + s.stackSize;
s.stackSize += STACK_INCREMENT;
}
*(s.top++) = e;
}
// 出栈
void Pop(SqStack &s, int &e) {
if (s.top == s.base) { // 栈空
exit(0);
}
e = *(--s.top);
}
// 判断栈是否为空
bool StackEmpty(SqStack s) {
return s.top == s.base;
}
// 十进制数转二进制
void DecToBin(int n) {
SqStack s;
InitStack(s);
while (n) {
Push(s, n % 2);
n /= 2;
}
while (!StackEmpty(s)) {
int e;
Pop(s, e);
cout << e;
}
cout << endl;
}
int main() {
int n;
cout << "请输入一个十进制数:";
cin >> n;
cout << "转换后的二进制数为:";
DecToBin(n);
return 0;
}
```
2. 十进制数转八进制
算法思路:
将十进制数不断除以8,将余数依次入栈,直到商为0。然后依次出栈,组成八进制数。
具体实现:
```C++
#include <iostream>
using namespace std;
const int STACK_INIT_SIZE = 100; // 栈的初始大小
const int STACK_INCREMENT = 10; // 栈的增量
// 栈的结构体
typedef struct {
int *base; // 栈底指针
int *top; // 栈顶指针
int stackSize; // 当前栈的大小
} SqStack;
// 初始化栈
void InitStack(SqStack &s) {
s.base = new int[STACK_INIT_SIZE];
s.top = s.base;
s.stackSize = STACK_INIT_SIZE;
}
// 入栈
void Push(SqStack &s, int e) {
if (s.top - s.base >= s.stackSize) { // 栈满,需要扩容
s.base = (int*)realloc(s.base, (s.stackSize + STACK_INCREMENT) * sizeof(int));
if (!s.base) {
exit(0);
}
s.top = s.base + s.stackSize;
s.stackSize += STACK_INCREMENT;
}
*(s.top++) = e;
}
// 出栈
void Pop(SqStack &s, int &e) {
if (s.top == s.base) { // 栈空
exit(0);
}
e = *(--s.top);
}
// 判断栈是否为空
bool StackEmpty(SqStack s) {
return s.top == s.base;
}
// 十进制数转八进制
void DecToOct(int n) {
SqStack s;
InitStack(s);
while (n) {
Push(s, n % 8);
n /= 8;
}
while (!StackEmpty(s)) {
int e;
Pop(s, e);
cout << e;
}
cout << endl;
}
int main() {
int n;
cout << "请输入一个十进制数:";
cin >> n;
cout << "转换后的八进制数为:";
DecToOct(n);
return 0;
}
```
阅读全文