先建立栈的顺序存储结构和链式存储结构;基于顺序存储结构完成栈的各项基本操作。在主函数中使用该结构和基本操作,判断字符串是否中心对称。 推荐使用单独的头文件,封装存储结构和基本操作。 要两个文件,两个文件,一个头文件,一个源文件
时间: 2024-10-23 17:14:33 浏览: 25
首先,我们来创建两个文件:一个名为`stack.h`的头文件用于定义栈的数据结构和公共接口,另一个名为`stack.cpp`的源文件实现具体的栈操作。
**stack.h** (头文件)
```cpp
#ifndef STACK_H
#define STACK_H
#include <string>
class Stack {
public:
// 构造函数
Stack(size_t capacity);
// 销毁堆栈
~Stack();
// 判断栈是否为空
bool isEmpty() const;
// 向栈顶添加元素
void push(const std::string& str);
// 删除栈顶元素并返回
std::string pop();
// 检查栈顶元素是否等于给定字符串
bool topEquals(const std::string& target) const;
private:
size_t capacity_;
std::string* elements_; // 使用顺序存储结构,数组存放字符串
size_t top_; // 栈顶指针
};
#endif // STACK_H
```
**stack.cpp** (源文件)
```cpp
#include "stack.h"
// 初始化栈
Stack::Stack(size_t capacity) : capacity_(capacity), elements_(new std::string[capacity]), top_(0) {}
// 销毁堆栈
Stack::~Stack() {
delete[] elements_;
}
// 确保不会越界
bool Stack::isEmpty() const {
return top_ == 0;
}
// 添加元素到栈顶
void Stack::push(const std::string& str) {
if (top_ < capacity_) {
elements_[top_] = str;
++top_;
} else {
throw std::runtime_error("Stack overflow");
}
}
// 移除栈顶元素并返回
std::string Stack::pop() {
if (!isEmpty()) {
std::string result = elements_[top_ - 1];
elements_[top_ - 1] = "";
top_--;
return result;
} else {
throw std::runtime_error("Stack underflow");
}
}
// 检查栈顶元素
bool Stack::topEquals(const std::string& target) const {
if (!isEmpty()) {
return elements_[top_ - 1] == target;
} else {
return false;
}
}
```
**main.cpp** (主函数示例)
```cpp
#include "stack.h"
#include <iostream>
#include <string>
int main() {
Stack stack(5); // 创建一个容量为5的栈
// ... (在这里进行栈的操作)
// 中心对称检查示例
std::string input_str = "madam";
stack.push(input_str);
// 如果输入字符串中心对称,则栈顶元素应该不变
if (stack.topEquals(input_str)) {
std::cout << "The string is center-symmetric." << std::endl;
} else {
std::cout << "The string is not center-symmetric." << std::endl;
}
return 0;
}
阅读全文