C++ 自己实现stack,queue容器

Stack:

#include<iostream>
#include<vector>
using namespace std;

template<typename T>
class MyStack
{
private:
    vector<T> v;                //用动态数组来实现stack
public:
    //无参构造函数
    MyStack(){}
    //拷贝构造函数
    MyStack(const MyStack& s)
    {
        this->v = s.v;
    }
    //析构函数
    ~MyStack(){}
    
    //判空
    bool empty()
    {
        return this->v.empty();
    }

    //访问栈顶元素
    T top()
    {
        if(this->empty())
        {
            cout << "栈为空,访问失败" << endl;
            return -1;                                //这里可以用异常处理机制,这里就不写了
        }
        return this->v.back();
    }

    //栈顶插入
    void push(T e)
    {
        this->v.push_back(e);
    }

    //删除栈顶元素
    void pop()
    {
        if(this->empty())
        {
            cout << "栈为空,删除失败" << endl;
            return;
        }
        this->v.pop_back();
    }

    //返回容纳的元素数
    size_t size()
    {
        return this->v.size();
    }
};
int main()
{
    MyStack<int> s;
    cout << s.empty() << endl;
    s.pop();

    for(int i=1;i<=20;i++)
    {
        s.push(i);
        cout << s.top() << " ";
    }
    cout << endl;


    s.pop();
    cout << s.top() << endl;

}

queue:

#include <iostream>
#include <list>
using namespace std;

template<typename T>
class Myqueue
{
    list<T> l;              //用链表实现队列
public:
    //无参构造函数
    Myqueue(){};

    //拷贝构造函数
    Myqueue(const Myqueue& q)
    {
        this->l = q.l;
    }

    //返回容纳的元素数
    size_t size()
    {
        return this->l.size();
    }

    //判空
    bool empty()
    {
        return this->l.empty();
    }

    //向队列尾部插入元素
    void push(T data)
    {
        this->l.push_back(data);
    }

    //删除首个元素
    void pop()
    {
        if(this->empty())
        {
            cout << "队列为空,删除" << endl;
            return;
        }
        this->l.pop_front();
    }

    //访问第一个元素
    T front()
    {
        if(this->empty())
        {
            cout << "队列为空,访问失败" << endl;
            return -1;                        //这里可以用异常处理机制,这里就不写了
        }
        return this->l.front();
    }
    //访问最后一个元素
    T back()
    {
        if(this->empty())
        {
            cout << "队列为空,访问失败" << endl;
            return -1;                        //这里可以用异常处理机制,这里就不写了
        }
        return this->l.back();
    }
};
int main()
{
    //实例化对象
    Myqueue<int> q;

    //测试判空
    cout << q.empty() << endl;
    //    q.pop();

    for(int i=1;i<=20;i++)
    {
        q.push(i);
        cout << q.back() << " ";
    }
    cout << endl;

    cout << q.size() << endl;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值