编写一个程序listack.cpp,实现链伐(假设栈中的元素类型Eem/Type为char) 的各种基本运算并在此基础上设计一个程序完成以下功能: (1)初始化栈s. (2)判断栈s是否非空。 (3
时间: 2024-12-23 21:27:12 浏览: 0
eemcut.rar_DCP和EEM_MATLAB 三维荧光_三维荧光光谱_三维荧光光谱去散射matlab程序_拉曼光谱
5星 · 资源好评率100%
为了编写一个名为`listack.cpp`的程序,实现基于字符类型的链式栈(Stack),我们首先需要定义一个结构体来表示节点,并实现链表的基本操作如压入、弹出、查看顶部元素以及检查栈是否为空。这里是一个简单的实现:
```cpp
// 定义栈节点结构体
struct Node {
char data; // 存储字符数据
Node* next; // 指向下一个节点的指针
};
class ListStack {
public:
// 初始化一个空栈
ListStack() : top(nullptr) {}
// 判断栈是否为空
bool isEmpty() const {
return top == nullptr;
}
// 入栈(压栈)
void push(char value) {
Node* newNode = new Node();
newNode->data = value;
newNode->next = top;
top = newNode;
}
// 出栈(弹栈)
char pop() {
if (isEmpty()) {
throw std::runtime_error("Stack is empty");
}
char data = top->data;
Node* temp = top;
top = top->next;
delete temp;
return data;
}
// 查看栈顶元素,但不移除
char peek() const {
if (isEmpty()) {
throw std::runtime_error("Stack is empty");
}
return top->data;
}
private:
Node* top; // 栈顶指针
};
int main() {
// (1) 初始化栈s
ListStack s;
// (2) 判断栈s是否非空
if (s.isEmpty()) {
std::cout << "Stack is empty.\n";
} else {
std::cout << "Stack is not empty.\n";
}
// (3) 示例性地进行入栈和出栈操作
s.push('A');
s.push('B');
std::cout << "Top element is: " << s.peek() << "\n"; // 输出 A
char popped_char = s.pop();
std::cout << "Popped element was: " << popped_char << "\n"; // 输出 B
return 0;
}
```
阅读全文