用数据结构的知识写栈的表示与实现的C++代码,头文件为#include<stdio.h>和#include<stdlib.h>可以实现以下功能:1、栈的初始化、进栈与出栈等基本操作 2、栈的应用之一:数制转换(十进制转换为:二进制、八进制、十六进制)
时间: 2024-10-24 19:11:07 浏览: 32
在C++中,我们可以使用数组或链表来实现栈的数据结构。这里,我将展示如何使用动态数组(vector)作为底层容器来创建一个简单的线性栈。同时,我会演示栈的基本操作以及栈在数制转换中的应用。
首先,我们需要一个Stack类的声明,包含基本操作:
```cpp
#include <iostream>
#include <vector>
#include <string>
class Stack {
private:
std::vector<int> data;
public:
// 初始化空栈
Stack() {}
// 判断栈是否为空
bool isEmpty() const { return data.empty(); }
// 入栈(压栈)
void push(int value) {
data.push_back(value);
}
// 出栈(弹栈)
int pop() {
if (isEmpty()) {
throw std::runtime_error("Stack is empty");
}
int top = data.back();
data.pop_back();
return top;
}
// 查看栈顶元素(不改变栈)
int top() const {
if (isEmpty()) {
throw std::runtime_error("Stack is empty");
}
return data.back();
}
};
// 数制转换函数,利用栈辅助实现
std::string decimalToBase(int num, int base) {
Stack digits;
while (num > 0) {
digits.push(num % base);
num /= base;
}
std::string result;
while (!digits.isEmpty()) {
result += std::to_string(digits.pop());
}
return result;
}
int main() {
try {
Stack s;
s.push(42); // 进栈
std::cout << "Top element is: " << s.top() << std::endl; // 输出栈顶元素
std::cout << "Decimal to binary: " << decimalToBase(s.pop(), 2) << std::endl; // 十进制转二进制并出栈
} catch (const std::exception& e) {
std::cerr << "Error: " << e.what() << std::endl;
}
return 0;
}
```
在这个示例中,`decimalToBase`函数使用了栈来存储计算过程中得到的每一位数字,最后再按照相反的顺序组合成目标基数的表示。注意,这里假设用户输入的是正整数进行转换。
阅读全文