设计一个类模板,实现链式栈的操作,完成十进制到不同进制的转换。
时间: 2024-12-19 17:16:25 浏览: 2
用C++实现一个链式栈的实例代码
5星 · 资源好评率100%
设计一个类模板,我们可以创建一个名为`ChainStack`的模板类,用于存储元素并支持链式操作,同时包含一个辅助函数来进行十进制到其他进制的转换。这里我们将实现基本的入栈、出栈以及一个转换功能。
```cpp
template <typename T>
class ChainStack {
public:
// 构造函数和析构函数
ChainStack() : top(nullptr), size(0) {}
~ChainStack();
// 入栈操作
void push(const T& value);
// 出栈操作
bool pop(T& result);
// 十进制转其他进制的辅助函数 (这里假设有个通用的转换函数decimal_to_base)
static std::string convertToBase(int decimal, int base);
private:
Node<T>* top; // 栈顶指针
int size; // 栈大小
// 链表节点
struct Node {
T data;
Node* next;
Node(const T& data) : data(data), next(nullptr) {}
};
};
// 实现函数
template <typename T>
std::string ChainStack<T>::convertToBase(int decimal, int base) {
if (decimal == 0) return "0";
std::string result;
while (decimal > 0) {
result = char('0' + (decimal % base)) + result;
decimal /= base;
}
return result;
}
// 定义构造函数和析构函数的具体实现
template <typename T>
ChainStack<T>::~ChainStack() {
clear();
}
template <typename T>
void ChainStack<T>::push(const T& value) {
Node<T>* newNode = new Node(value);
newNode->next = top;
top = newNode;
size++;
}
template <typename T>
bool ChainStack<T>::pop(T& result) {
if (top == nullptr) return false;
result = top->data;
delete top;
top = top->next;
size--;
return true;
}
// 清空栈
template <typename T>
void ChainStack<T>::clear() {
Node<T>* temp = top;
while (temp != nullptr) {
Node<T>* next = temp->next;
delete temp;
temp = next;
}
top = nullptr;
size = 0;
}
```
这个模板类允许用户以链式的方式操作栈,并通过`convertToBase`函数进行数字转换。但是,如果需要特定进制的转换,可以在实际使用时传入适当的`base`值。
阅读全文