构造一个栈
参考代码一:
模板数据类型实现栈
以下是一个基于C++的手写栈的示例代码,包括了栈的初始化、入栈、出栈、获取栈顶元素和判断栈是否为空等常用功能。
#include <iostream>
#include <vector>
using namespace std;
template <typename T>
class Stack {
private:
vector<T> data; // 存储栈中元素的数组
public:
// 初始化栈
Stack() {}
// 入栈操作
void push(T item) {
data.push_back(item);
}
// 出栈操作
T pop() {
T item = data.back();
data.pop_back();
return item;
}
// 获取栈顶元素
T top() {
return data.back();
}
// 判断栈是否为空
bool empty() {
return data.empty();
}
};
int main() {
Stack<int> s; // 创建一个整型栈
// 入栈操作
s.push(5);
s.push(10);
s.push(15);
// 出栈操作
cout << "出栈:" << endl;
cout << s.pop() << endl; // 15
cout << s.pop() << endl; // 10
// 获取栈顶元素
cout << "获取栈顶元素:" << endl;
cout << s.top() << endl; // 5
// 判断栈是否为空
cout << "判断栈是否为空:" << endl;
cout << s.empty() << endl; // 0(false)
return 0;
}
//输出:
出栈:
15
10
获取栈顶元素:
5
判断栈是否为空:
0
以上示例代码中,我们使用了一个vector来存储栈中的元素。栈的入栈和出栈操作分别使用了vector的push_back和pop_back方法。获取栈顶元素和判断栈是否为空的操作也很简单,直接使用vector的back和empty方法即可。
参考代码二:
该实现使用类(class)来表示一个栈,具备入栈(push)、出栈(pop)、查看栈顶元素(peek)、判断栈空(isEmpty)和判断栈满(isFull)等操作。在主函数中,我们创建了一个栈对象,并依次将元素 1、2 和 3 入栈,然后输出栈顶元素并进行出栈操作,再次输出栈顶元素。
#include <iostream>
using namespace std;
const int MAX_SIZE = 100; // 设定栈的最大容量
class Stack {
private:
int top; // 栈顶指针
int data[MAX_SIZE]; // 栈的数据存储区域
public:
Stack() { // 构造函数初始化栈为空
top = -1;
}
bool isEmpty() { // 判断栈是否为空
return top == -1;
}
bool isFull() { // 判断栈是否已满
return top == MAX_SIZE - 1;
}
void push(int value) { // 入栈操作
if (isFull()) { // 若栈已满,则不允许入栈
cout << "Stack overflow!" << endl;
return;
}
data[++top] = value; // 将值加入栈顶,并指向新的栈顶位置
}
int pop() { // 出栈操作
if (isEmpty()) { // 若栈空,则无法出栈
cout << "Stack underflow!" << endl;
return -1;
}
return data[top--]; // 返回原来栈顶的数值,并指向新的栈顶位置
}
int peek() { // 查看栈顶元素
if (isEmpty()) { // 若栈空,则无法查看栈顶元素
cout << "Stack is empty!" << endl;
return -1;
}
return data[top];
}
};
int main() {
Stack s;
s.push(1);
s.push(2);
s.push(3);
cout << "The top element is: " << s.peek() << endl; // 输出栈顶元素
s.pop();
cout << "The top element is: " << s.peek() << endl; // 再次输出栈顶元素
return 0;
}
//输出:
The top element is: 3
The top element is: 2
该实现使用一个数组作为栈的数据存储区域,使用一个整数变量 top 来表示当前栈顶的位置。在构造函数中将 top 初始化为 -1 表示栈为空。
参考代码三:
#include <iostream>
using namespace std;
#define MAX_SIZE 100
class Stack {
private:
int arr[MAX_SIZE];
int top;
public:
Stack() { top = -1; }
void push(int x);
int pop();
bool isEmpty();
};
void Stack::push(int x) {
if (top >= MAX_SIZE-1) {
cout << "栈已满" << endl;
} else {
arr[++top] = x;
}
}
int Stack::pop() {
if (top == -1) {
cout << "栈为空" << endl;
return 0;
} else {
int x = arr[top--];
return x;
}
}
bool Stack::isEmpty() {
return (top == -1);
}
int main(void) {
Stack stack;
cout << "入栈 : " << endl;
stack.push(1);
stack.push(2);
stack.push(3);
stack.push(4);
stack.push(5);
cout << "出栈 : " << endl;
while (!stack.isEmpty()) {
int value = stack.pop();
cout << value << ",";
}
return 0;
}
//输出:
入栈 :
出栈 :
5,4,3,2,1,
这个实现使用了一个大小为 MAX_SIZE 的整型数组,它的 push() 函数将元素添加到数组中并更新 top 变量,如果栈已满则会输出一条错误信息;pop() 函数从栈顶删除元素并返回它的值,如果栈为空也会输出一条错误信息;isEmpty() 函数检查栈是否为空。