0904作业+思维导图

一、作业

(将昨天的作业修改为标准模板类的)

1、代码
#include <iostream>
#include <stack>
using namespace std;
//队列模板类
template<typename T>
class Queue
{
private:
    int max;      //队列最大容量
    int num;      //队列内元素数
    T *ptr;     //容器
public:
    Queue():max(20),num(0){
        ptr = new T[this->max];
        cout<<"无参构造"<<endl;
    }
    ~Queue(){
        delete [] ptr;           //释放空间
        cout<<"析构函数"<<endl;
    }
   Queue(Queue &q):max(q.max),num(q.num),ptr(new T(*q.ptr))    //深拷贝
   {
       cout<<"拷贝构造函数"<<endl;
   }
   T front()
   {
       if(empty())
       {
           cout<<"队列为空无法返回"<<endl;
           T a;
           return a;
       }
       return ptr[0];
   }
   T back()
   {
       if(empty())
       {
           cout<<"队列为空无法返回"<<endl;
           T a;
           return a;
       }
       return ptr[num-1];
   }
   bool empty()
   {
       return num==0;
   }
   int size()
   {
       return num;
   }
   void push(T n)
   {
       //判满
       if(num>=max)
       {
           cout<<"容器已满无法继续加入"<<endl;
           return;
       }
       this->num++;
       this->ptr[num-1] = n;
       cout<<"添加完毕"<<endl;
   }
   void pop()
   {
       //判空
       if(empty())
       {
           cout<<"容器为空无法删除"<<endl;
           return;
       }
       for(int i=0;i<this->num;i++)
       {
           this->ptr[i]=this->ptr[i+1];
       }
       this->num--;
       cout<<"删除完毕"<<endl;
   }
   void show()
   {
       for(int i=0;i<num;i++)
       {
           cout<<ptr[i]<<"  ";
       }
       cout<<endl;
   }
};
int main()
{
    Queue<string> q;
    //判空
    if(q.empty())
    {
        q.push("hhh");
        q.push("I");
        q.push("have");
        q.push("a");
        q.push("dog");
        q.show();
    }
    cout<<q.back()<<endl;
    cout<<q.front()<<endl;
    cout<<q.size()<<endl;
    q.pop();
    q.show();
    return 0;
}
#include <iostream>

using namespace std;

template<typename T>
class Stack  //定义一个栈的模板类
{
private:
    T *ptr;   //栈
    int num;  //栈顶元素数
    int max;  //栈的空间初始大小
public:
    Stack():num(-1),max(20){
        ptr = new T[max];   //申请空间
        cout<<"无参构造"<<endl;}
    Stack(int t,int m):num(t),max(m){
        ptr = new T[max];   //申请栈空间
        for(int i=0;i<num+1;i++)
        {
            cout<<"请输入第"<<i+1<<"个元素内容为:";
            cin>>ptr[i];
        }
        cout<<"有参构造"<<endl;
    }
    ~Stack(){
        delete [] ptr;
        cout<<"析构函数"<<endl;}
    Stack(Stack &s):ptr(new T(*s.ptr)),num(s.num),max(s.max)
    {
        cout<<"拷贝构造函数"<<endl;
    }
    //栈顶元素访问
    T top()
    {
        return ptr[num];
    }
    //判空
    bool empty()
    {
        return num==-1;
    }
    //元素数
    int size()
    {
        return num+1;
    }
    //向栈顶插入元素
    void push(T n)
    {
        //判满
        if(num==max-1)
        {
            cout<<"无法继续插入"<<endl;
            return;
        }
        ++this->num;
        this->ptr[num] = n;
    }
    //删除栈顶元素
    void pop()
    {
        //判空
        if(empty())
        {
            return;
        }
        this->num--;
    }
    void show()
    {
        for(int i=0;i<num+1;i++)
        {
            cout<<ptr[i]<<"    ";
        }
        cout<<endl;
    }
};
int main()
{

    Stack<string> s1(4,10);   //有参构造
    s1.show();
    s1.pop();
    s1.show();
    string buf;
    cout<<"请输入要尾插的内容:";
    cin>>buf;
    s1.push(buf);
    s1.show();
    cout<<s1.size()<<"  "<<s1.top()<<endl;
    return 0;
}
2、运行结果

二、思维导图(Lambda、异常处理、文件操作、线程支持、模板)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值