用顺序栈的类型定义、基本操作的实现函数(初始化、判栈空、判栈满、进栈、出栈)、实现非负十进制到二进制、八进制、十六进制的转换函数。构造一个完整的程序,实现具有进制转换的程序。
时间: 2024-12-04 16:24:47 浏览: 26
栈的初始化、进栈出栈、清空栈、销毁栈
3星 · 编辑精心推荐
顺序栈是一种基于数组实现的数据结构,用于动态存储数据。它通常只支持在一端(称为栈顶)进行插入和删除的操作。下面是一个简单的顺序栈实现:
```c++
#include <iostream>
#include <vector>
class Stack {
public:
// 初始化一个空栈
Stack() : top_(0) {}
// 判定栈是否为空
bool isEmpty() const { return top_ == 0; }
// 判定栈是否已满(假设栈的最大容量是MAX_SIZE)
bool isFull() const { return top_ == MAX_SIZE; }
// 进栈(压入元素)
void push(int value) {
if (isFull()) {
std::cout << "Stack overflow!" << std::endl;
return;
}
stack_.push_back(value);
++top_;
}
// 出栈(弹出元素)
int pop() {
if (isEmpty()) {
std::cout << "Stack underflow!" << std::endl;
return -1; // 返回错误码表示无法出栈
}
int value = stack_.back();
stack_.pop_back();
--top_;
return value;
}
private:
static constexpr int MAX_SIZE = 100; // 栈的最大容量
size_t top_; // 栈顶指针
std::vector<int> stack_; // 存储栈元素
};
// 非负整数转其他进制的函数模板
template <typename TargetBase, typename SourceBase>
std::string convertToIntBase(int number, TargetBase base) {
std::string result;
while (number > 0) {
result = std::to_string(number % base) + result;
number /= base;
}
return result;
}
int main() {
Stack decimalStack;
// 入栈一些非负十进制数
decimalStack.push(10);
decimalStack.push(255);
// 转换并打印结果
std::cout << "Decimal to Binary: " << convertToIntBase<std::string, 2>(decimalStack.pop(), 2) << std::endl;
std::cout << "Decimal to Octal: " << convertToIntBase<std::string, 8>(decimalStack.pop(), 8) << std::endl;
std::cout << "Decimal to Hexadecimal: " << convertToIntBase<std::string, 16>(decimalStack.pop(), 16) << std::endl;
return 0;
}
```
在这个程序中,我们首先创建了一个顺序栈`decimalStack`,然后将一些非负十进制数字放入栈中。接着,我们调用`convertToIntBase`函数,通过出栈的方式获取十进制数值,再将其转换为目标进制(二进制、八进制或十六进制),最后打印出转换后的结果。
阅读全文