如何在C++中使用栈数据结构,分别采用顺序存储和链式存储的方式,将一个十进制数转换为对应的二进制、八进制和十六进制表示?
时间: 2024-10-24 13:18:34 浏览: 16
在C++中,我们可以利用栈(Stack)数据结构来辅助转换数字。栈是一种后进先出(LIFO)的数据结构,非常适合这种逐位处理然后反转结果的操作。下面是两种存储方式(顺序存储和链式存储)下如何实现十进制转二进制、八进制和十六进制:
**1. 顺序存储(数组)**
首先,我们创建一个固定大小的数组作为栈,用于保存每位数字。假设数组大小为36,因为0-9代表二进制、八进制和十六进制的数码。
```cpp
#include <iostream>
#include <string>
using namespace std;
void decimalToBinary(int num, int* stack, int size) {
while (num > 0) {
stack[size - 1] = num % 2;
num /= 2;
size--;
}
}
void printStack(int* stack, int size) {
string binary = "";
for (int i = size - 1; i >= 0; i--) {
binary += to_string(stack[i]);
}
cout << "Binary: " << binary << endl;
}
// 类似的方法可以添加用于八进制和十六进制的转换
```
**2. 链式存储(链表)**
对于链表,我们可以创建一个节点结构,包含一个整数值和指向下一个节点的指针。这种方法更灵活,可以根据需要动态增长。
```cpp
#include <iostream>
#include <list>
struct Node {
int value;
Node* next;
};
void decimalToBinary(int num, Node** top) {
Node* newNode = new Node{num % 2, nullptr};
*top = newNode;
if (num > 1) {
decimalToBinary(num / 2, top);
}
}
// 打印链表并转换成相应进制字符串
void printLinkedList(Node* head) {
// ... 实现打印链表和转换成二进制、八进制、十六进制的功能
}
int main() {
// 初始化链表头节点
Node* stackHead = nullptr;
int decimalNum = 42;
decimalToBinary(decimalNum, &stackHead);
printLinkedList(stackHead); // 输出二进制、八进制和十六进制
return 0;
}
```
阅读全文