c++如何实现栈的链式存储
时间: 2023-10-22 13:23:42 浏览: 100
C++中可以使用结构体和指针来实现栈的链式存储。下面是一个基本的链栈的实现:
```c++
#include <iostream>
using namespace std;
// 定义链栈的结点
struct Node{
int data; // 数据域
Node* next; // 指针域
};
class LinkedStack{
private:
Node* top; // 栈顶指针
public:
LinkedStack(); // 构造函数
~LinkedStack(); // 析构函数
bool isEmpty(); // 判断栈是否为空
void push(int x); // 元素入栈
int pop(); // 元素出栈
int peek(); // 获取栈顶元素
};
LinkedStack::LinkedStack(){
top = NULL;
}
LinkedStack::~LinkedStack(){
Node* p;
while (top != NULL){
p = top;
top = top->next;
delete p;
}
}
bool LinkedStack::isEmpty(){
return (top == NULL);
}
void LinkedStack::push(int x){
Node* p = new Node;
p->data = x;
p->next = top;
top = p;
}
int LinkedStack::pop(){
if (isEmpty()){
cout << "Stack is empty!" << endl;
return -1;
}
else{
Node* p = top;
int x = p->data;
top = top->next;
delete p;
return x;
}
}
int LinkedStack::peek(){
if (isEmpty()){
cout << "Stack is empty!" << endl;
return -1;
}
else{
return top->data;
}
}
int main(){
LinkedStack s;
s.push(1);
s.push(2);
s.push(3);
cout << "栈顶元素:" << s.peek() << endl; // 输出3
cout << "元素出栈:" << s.pop() << endl; // 输出3
cout << "元素出栈:" << s.pop() << endl; // 输出2
cout << "元素出栈:" << s.pop() << endl; // 输出1
s.pop(); // 栈为空,输出"Stack is empty!"
return 0;
}
```
上面的代码中,定义了一个链栈的结点Node,包含数据域和指针域。然后定义了一个类LinkedStack,实现了栈的基本操作:判断栈是否为空、元素入栈、元素出栈、获取栈顶元素。其中,push操作将新结点插入到链表头部,pop操作将栈顶结点删除并返回其数据域,peek操作返回栈顶结点的数据域。在main函数中,演示了链栈的基本操作。
阅读全文