栈
用c++实现栈的基本操作
文章目录
1.栈的顺序存储方式的基本操作实现
1.创建栈的结构体
#define MAX_SIZE 20 //表示一个栈的容量大小
typedef struct Stack
{
int data[MAX_SIZE];//代表栈的容量,能存储的数据个数
int top;//代表栈顶
}
//定义栈的全局变量,方便各个函数的使用
Stack stack;
2.栈的初始化
void InitStack()
{
stack.top = -1;
}
3.判断栈是否为空/判断栈是否满了
bool IsEmpty()
{
return stack.top == -1;
}
bool IsFull()
{
return stack.top == MAX_SIZE-1;//数组中的索引是从0开始的,所以top最大只能到MAX_SIZE-1
}
4.入栈操作
bool Push(int value)
{
//判断栈是否满了,满了就不能进行入栈操作
if(IsFull())
{
printf("操作失败,栈已经满了!\n");
return false;
}
//进行入栈操作
stack.data[++top] = value;
return true;
}
5.出栈操作
//参数表示返回被删除的值
bool Pop(int &e)
{
//判断栈是否为空
if(IsEmpty())
{
printf("出栈失败,栈为空!\n");
return false;
}
//进行出栈操作
e = stack.data[top--];
return true;
}
6.获取栈顶元素
//参数表示栈顶的元素
//不用int型返回数据是因为:如果栈顶元素为负数则会直接达不到效果
//所以返回bool类型的变量
bool GetItem(int &ele)
{
//判断栈是否为空
if(IsEmpty())
{
printf("查看数据失败,栈为空!\n");
return false;
}
ele = stack.data[top];
return true;
}
2.栈的链式存储的相关操作实现
1.创建栈的结构体
//创建栈结构体
typedef struct Stack
{
int data;//存放数据
struct Stack* next;//存放下一个节点的地址
}Stack;
//创建栈,后续函数里面都需要用到栈,方便操作
Stack* top;
2.判断栈是否为空
//判断栈是否为空
bool IsEmpty()
{
return top == NULL;
}
3.进栈操作
//进栈操作
bool Push(int value)
{
//创建栈节点
Stack* stack = new Stack();
if (stack == NULL)
{
printf("进栈失败,内存不足,开辟空间失败!\n");
return false;
}
stack->data = value;
stack->next = top;
top = stack;
printf("进栈成功!\n");
return true;
}
4.出栈操作
//出栈操作
bool Pop(int& e)
{
if (IsEmpty())
{
printf("出栈失败,栈为空!\n");
return false;
}
Stack* temp = top;
e = temp->data;
if (temp->next != NULL)
{
top = temp->next;
}
else
{
top = NULL;
}
delete temp;
return true;
}
5.查看栈顶数据
//参数表示栈顶的元素
//不用int型返回数据是因为:如果栈顶元素为负数则会直接达不到效果
//所以返回bool类型的变量
bool GetItem(int &ele)
{
//判断栈是否为空
if(IsEmpty())
{
printf("查看数据失败,栈为空!\n");
return false;
}
ele = top->data;
return true;
}
栈的代码操作相对简单,其他的操作请自行尝试!