C++手动实现建议的栈和队列的容器库

说明:

通过模板类对栈与队列在public写入成员函数完成对栈和队列操作的基本功能。

栈:

原理与vector相似,该程序通过vector自带函数完成对栈的简单操作(完成判空、入栈、出栈功能)

实现代码:

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

template<typename T>
class MyStack
{
private:
    vector<T> v;
public:
    MyStack(){}
    MyStack(const MyStack& s)
    {
        this->v = s.v;
    }
    ~MyStack(){}

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



    void push(T e)
    {
        this->v.push_back(e);
    }

    T pop()
    {
        if(v.empty())
        {
            cout<< "栈空" <<endl;
                //可增加throw用于捕获错误
        }
        T res=v.back();
        this->v.pop_back();

        return res;

    }

};
int main()
{
    MyStack<int> s;
    cout <<"判空(1为空0为非空):"<< s.empty() << endl;
    cout<<"执行入栈"<<endl;
    for(int i=1;i<=5;i++)
    {
        s.push(i);
    }
    cout <<"判空(1为空0为非空):"<< s.empty() << endl;
    cout<<"执行出栈"<<endl;
    for(int i=1;i<=5;i++)
    {
        cout<<s.pop()<<" ";
    }
    cout<<endl;
    cout <<"判空(1为空0为非空):"<< s.empty() << endl;
    cout<<endl;

}

 运行结果:

队列:

 完成通过模板类入队出队销毁功能

#include<iostream>
#include<string.h>
using namespace std;

#define MAX 6


template <typename T>
class Queue
{
private:
     struct queue_list
    {
        T q[MAX];
        int front;
        int rear;
    };
    queue_list *Q;
public:
    //创建队列
    int create(){

        Q=new queue_list;
        if(NULL==Q){
            cout<<"创建失败"<<endl;
            return -1;
        }
        memset(Q,0,sizeof (queue_list));
        Q->front=Q->rear=0;
        return 0;
    }
    //入队
    int push(char n){
        if(Q->rear==MAX){
            cout<<"队列满,入队失败"<<endl;
            return -1;
        }
        Q->q[Q->rear]=n;
        Q->rear=(Q->rear+1);
        return 0;
    }
    //出队
    int pop(){
        if(Q->front==Q->rear){
            cout<<"队列空,出队失败"<<endl;
            return -1;
        }
        cout<<Q->q[Q->front]<<endl;
        Q->front=(Q->front+1);
        return 0;
    }

    //销毁队列
    void des(){
        delete Q;
        cout<<"队列已销毁"<<endl;
    }

};

int main()
{
    Queue<char> q;
    q.create();
    q.push('a');
    q.push('B');
    q.push('c');
    q.push('D');
    q.push('e');
    cout<<"遍历队列:"<<endl;


    cout<<"出队顺序:"<<endl;
    for(int i=0;i<MAX-1;i++)
    {
        q.pop();
    }

    q.des();
    return 0;
}

测试结果

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值