数据结构栈与队列c++版本
时间: 2024-01-05 15:02:16 浏览: 89
好的,以下是栈和队列的C++实现:
栈的实现:
```cpp
#include <iostream>
using namespace std;
const int MAXSIZE = 100; // 栈的最大容量
class Stack {
private:
int top; // 栈顶指针
int data[MAXSIZE]; // 栈的数据存储区
public:
Stack() { top = -1; } // 构造函数,初始化栈顶指针为-1
bool push(int x); // 入栈操作
bool pop(); // 出栈操作
bool isEmpty(); // 判断栈是否为空
int getTop(); // 获取栈顶元素
};
bool Stack::push(int x) {
if (top == MAXSIZE - 1) { // 栈满,无法入栈
return false;
}
data[++top] = x; // 栈顶指针加1,将元素x入栈
return true;
}
bool Stack::pop() {
if (top == -1) { // 栈空,无法出栈
return false;
}
top--; // 栈顶指针减1,出栈
return true;
}
bool Stack::isEmpty() {
return top == -1;
}
int Stack::getTop() {
if (top == -1) { // 栈空,返回-1
return -1;
}
return data[top]; // 返回栈顶元素
}
int main() {
Stack s;
s.push(1);
s.push(2);
s.push(3);
while (!s.isEmpty()) {
cout << s.getTop() << " ";
s.pop();
}
return 0;
}
```
队列的实现:
```cpp
#include <iostream>
using namespace std;
const int MAXSIZE = 100; // 队列的最大容量
class Queue {
private:
int front, rear; // 队头和队尾指针
int data[MAXSIZE]; // 队列的数据存储区
public:
Queue() { front = rear = 0; } // 构造函数,初始化队头和队尾指针为0
bool enqueue(int x); // 入队操作
bool dequeue(); // 出队操作
bool isEmpty(); // 判断队列是否为空
int getFront(); // 获取队头元素
};
bool Queue::enqueue(int x) {
if ((rear + 1) % MAXSIZE == front) { // 队满,无法入队
return false;
}
data[rear] = x; // 将元素x入队
rear = (rear + 1) % MAXSIZE; // 队尾指针加1
return true;
}
bool Queue::dequeue() {
if (front == rear) { // 队空,无法出队
return false;
}
front = (front + 1) % MAXSIZE; // 队头指针加1,出队
return true;
}
bool Queue::isEmpty() {
return front == rear;
}
int Queue::getFront() {
if (front == rear) { // 队空,返回-1
return -1;
}
return data[front]; // 返回队头元素
}
int main() {
Queue q;
q.enqueue(1);
q.enqueue(2);
q.enqueue(3);
while (!q.isEmpty()) {
cout << q.getFront() << " ";
q.dequeue();
}
return 0;
}
```
阅读全文