写两个c++程序分别实现顺序栈、链栈的各种基本运算
时间: 2024-11-24 08:42:06 浏览: 11
链栈的基本运算
当然可以。在C++中,我们可以使用数组(顺序存储)和链表(动态存储)来实现栈。以下是简化的示例:
### 顺序栈(Array Stack)实现
```cpp
#include <iostream>
using namespace std;
const int MAX_SIZE = 100;
class SequenceStack {
private:
int top; // 栈顶指针
int data[MAX_SIZE]; // 存储栈元素的数组
public:
SequenceStack() : top(-1) {} // 初始化栈为空
// 入栈操作
void push(int value) {
if (top == MAX_SIZE - 1) {
cout << "Stack overflow!" << endl;
return;
}
data[++top] = value;
}
// 出栈操作
int pop() {
if (top == -1) {
cout << "Stack underflow!" << endl;
return -1; // 返回-1表示空栈
}
return data[top--];
}
// 查看栈顶元素但不删除
int peek() {
if (top == -1) {
cout << "Stack is empty." << endl;
return -1;
}
return data[top];
}
// 判断栈是否为空
bool isEmpty() {
return top == -1;
}
};
int main() {
SequenceStack seqStack;
seqStack.push(1);
seqStack.push(2);
cout << "Top element is: " << seqStack.peek() << endl;
seqStack.pop();
return 0;
}
```
### 链栈(Linked Stack)实现
```cpp
#include <iostream>
// 定义链栈节点
struct Node {
int data;
Node* next;
Node(int val) : data(val), next(nullptr) {}
};
class LinkedStack {
private:
Node* top; // 栈顶指针
public:
LinkedStack() : top(nullptr) {}
// 入栈操作
void push(int value) {
Node* newNode = new Node(value);
newNode->next = top;
top = newNode;
}
// 出栈操作
int pop() {
if (top == nullptr) {
cout << "Stack underflow!" << endl;
return -1;
}
int data = top->data;
Node* temp = top;
top = top->next;
delete temp;
return data;
}
// 查看栈顶元素但不删除
int peek() {
if (top == nullptr) {
cout << "Stack is empty." << endl;
return -1;
}
return top->data;
}
// 判断栈是否为空
bool isEmpty() {
return top == nullptr;
}
};
int main() {
LinkedStack linkedStack;
linkedStack.push(1);
linkedStack.push(2);
cout << "Top element is: " << linkedStack.peek() << endl;
linkedStack.pop();
return 0;
}
```
这两个例子展示了如何使用C++实现顺序栈和链栈的基本操作,如入栈、出栈、查看栈顶元素以及判断栈是否为空。
阅读全文