编写一个程序实现链栈的各种基本运算,并在此基础上设计一个主程序,完成如下功能: 初始化链栈;入栈;出栈;取栈顶元素;判断栈是否为空。(c++)
时间: 2024-03-04 07:48:44 浏览: 26
好的,以下是C++代码实现链栈的基本运算:
```cpp
#include <iostream>
using namespace std;
// 定义链栈结构体
struct Node {
int data; // 数据域
Node *next; // 指针域
};
// 初始化链栈
void initStack(Node *&top) {
top = NULL; // 将top指针初始化为空
}
// 判断栈是否为空
bool isEmpty(Node *top) {
return top == NULL;
}
// 入栈
void push(Node *&top, int x) {
// 新建一个结点
Node *p = new Node;
p->data = x;
p->next = top;
top = p; // 将新结点插入到链表头部,更新top指针
}
// 出栈
bool pop(Node *&top, int &x) {
if (isEmpty(top)) {
return false; // 栈空,出栈失败
}
Node *p = top;
x = p->data;
top = top->next; // 删除链表头部结点,更新top指针
delete p;
return true;
}
// 取栈顶元素
bool getTop(Node *top, int &x) {
if (isEmpty(top)) {
return false; // 栈空,取栈顶元素失败
}
x = top->data;
return true;
}
int main() {
Node *top;
initStack(top); // 初始化链栈
// 入栈
push(top, 1);
push(top, 2);
push(top, 3);
// 出栈
int x;
while (pop(top, x)) {
cout << x << " ";
}
cout << endl;
// 再次入栈
push(top, 4);
push(top, 5);
// 取栈顶元素
if (getTop(top, x)) {
cout << "栈顶元素为:" << x << endl;
} else {
cout << "栈为空,无法取栈顶元素" << endl;
}
// 判断栈是否为空
if (isEmpty(top)) {
cout << "栈为空" << endl;
} else {
cout << "栈不为空" << endl;
}
return 0;
}
```
以上代码实现了链栈的基本运算,包括初始化链栈、入栈、出栈、取栈顶元素以及判断栈是否为空。你可以在主函数中调用这些函数来完成相应的操作。