编写一个程序liststack.cpp,实现链栈(假设栈中的元素类型ElemType为char)的各种基本运算,并在此基础上设计一个程序exp1-1.cpp完成以下功能:1)初始化栈s;2)判断栈s是
时间: 2024-09-29 09:03:29 浏览: 30
编写一个名为`liststack.cpp`的程序,用于实现链式栈(其中栈元素类型为`char`),可以包含以下几个基本操作:
1. **创建栈**:定义一个`Node`结构体,表示链表节点,每个节点有一个值(`char`)和指向下一个节点的指针。
```cpp
struct Node {
char data;
Node* next;
};
```
2. **初始化栈**:创建一个空的链式栈实例。
```cpp
Node* top = nullptr; // 栈顶指针初始为空
```
3. **入栈(push)**:当有新元素要入栈时,创建一个新的节点并将其添加到链表头部。
```cpp
void push(char elem) {
Node* newNode = new Node{elem, top};
top = newNode;
}
```
4. **出栈(pop)**:移除栈顶元素,返回该元素。
```cpp
char pop() {
if (top == nullptr) {
throw std::runtime_error("Stack is empty");
}
char elem = top->data;
Node* temp = top;
top = top->next;
delete temp;
return elem;
}
```
5. **查看栈顶元素(peek)**:检查当前栈顶,但不删除它。
```cpp
char peek() {
if (top == nullptr) {
throw std::runtime_error("Stack is empty");
}
return top->data;
}
```
6. **检查栈是否为空(empty)**:检查链表头是否为`nullptr`。
```cpp
bool isEmpty() {
return top == nullptr;
}
```
现在,对于`exp1-1.cpp`程序,你可以这样完成任务:
1. 初始化栈`s`:通过`push`函数将一些字符入栈。
```cpp
// 示例初始化
for (char c : {'a', 'b', 'c', 'd', 'e'}) {
push(c);
}
```
2. 判断栈`s`是否为空:调用`isEmpty()`函数。
```cpp
if (isEmpty()) {
std::cout << "Stack s is empty." << std::endl;
} else {
std::cout << "Stack s is not empty." << std::endl;
}
```
阅读全文