栈的基本操作实现

用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;
}

栈的代码操作相对简单,其他的操作请自行尝试!

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值