c++中顺序栈的封装

c++中顺序栈的封装

栈是一种先入后出的线性数据结构,分为顺序栈和链栈。本博文主要是顺序栈的封装

static.h

#ifndef _stack_H
#define _stack_H
#include <iostream>
#include <malloc.h>
typedef int ElemType;
 
class Stack
{
    ElemType *arr;
    int s_top;
    size_t capacity;
 
public:
    size_t GetCapacity() const;
    size_t size() const;
    bool isFull() const;
    bool empty() const;
    void push(const ElemType x);
    void pop();
    ElemType top() ;
    void clear();
 
    Stack(size_t n);
    ~Stack();
};
 
#endif

static.cpp

#include "2_stack.h"

 
//获取栈容量
size_t Stack::GetCapacity() const
{
    return capacity;
}
 
//获取栈长度
size_t Stack::size() const
{
    return s_top + 1;
}
 
//判断是否满栈
bool Stack::isFull() const
{
    return size() == capacity;
}
 
//判断栈是否为空
bool Stack::empty() const
{
    return s_top == -1;
}
 
//向栈中压入元素
void Stack::push(const ElemType x)
{
    if(isFull())
    {
        std::cout << "The stack is full." << std::endl;
        return;
    }
    arr[++s_top] = x;
}
 
//弹出栈顶元素
void Stack::pop()
{
    if (empty())
    {
        std::cout << "The stack is empty." << std::endl;
        return;
    }
    s_top--;
}
 
//获取栈顶元素
ElemType Stack::top() 
{
    if (empty())
    {
        std::cout << "The queue is empty." << std::endl;
        return -1;
    }
    
   
    return arr[s_top];
}
 
//清空栈中元素
void Stack::clear()
{
    s_top = -1;
}
 
//构造函数:创建容量为n的栈
Stack::Stack(size_t n)
    : s_top(-1), capacity(n)
{
    arr = (ElemType*)malloc(sizeof(ElemType) * n);
}
 
//析构函数
Stack::~Stack()
{
    free(arr);
    arr = nullptr;
}
 

main.cpp

#include "2_stack.h"
#include <iostream>
using namespace std;
int main()
{
    Stack obj(10);
    for(int i=0;i<9;i++)
    {
    if(obj.isFull()!=0)
    {
        cout<<"栈满"<<endl;
        return -1;
    }
    obj.push(i);
    }
    for(int i=0;i<9;i++)
    {
   cout<< obj.top()<<endl;
    obj.pop();
    }
  

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值