当前位置: 首页 > article >正文

2024.9.4

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

template<typename T>
class Stack
{
private:
    int len;
    int count = 0;
    T *stack;
public:
    Stack():len(10)             //无参构造
    {
        stack = new T[len];
        stack[len] = {0};
    }
    Stack(int len):len(len)         //有参构造
    {
        stack = new T[len];
        stack[len] = {0};
    }
    Stack(Stack &other):len(other.len)  //拷贝构造函数
    {
        stack = new T[len];
        for(int i=0;i<len;i++)
        {
            stack[i] = other.stack[i];
        }
    }
    Stack &operator=(const Stack &other)    //拷贝赋值函数
    {
        if(this != &other)
        {
            this->count = other.count;
            this->len = other.len;
            int *newstack = new T[this->len];
            for(int i=0;i<len;i++)
            {
                newstack[i] = other.stack[i];
            }
            delete [] stack;
            stack = newstack;

        }
        return *this;
    }
    ~Stack()        //析构函数
    {
        delete [] stack;
    }
    T top();
    bool empty();
    int size();
    int push(T n);
    void expand();
    void show();
    int pop();
};
template<typename T>
T Stack<T>::top()
{
    if(empty())
    {
        cout<<"error" <<endl;
        return -1;
    }
    return stack[count-1];
}
template<typename T>
bool Stack<T>::empty()
{
    return count == 0;
}

template<typename T>
int Stack<T>::size()
{
    return count;
}

template<typename T>
int Stack<T>::push(T n)
{
    if(count == len)
    {
        expand();
    }
    stack[count++] = n;
    return 0;
}

template<typename T>
void Stack<T>::expand()
{
    len = len * 2;
    int *newstack = new T[len];
    for(int i=0;i<count;i++)
    {
        newstack[i] = stack[i];
    }
    delete [] stack;
    stack = newstack;
}
template<typename T>
void Stack<T>::show()
{
    for(int i=count-1;i>=0;i--)
    {
        cout<<stack[i]<<" ";
    }
    cout<<endl;
}

template<typename T>
int Stack<T>::pop()
{
    if(empty())
    {
        cout<<"error"<<endl;
        return -1;
    }
    stack[--count] = 0;
    return 0;
}
template<typename K>
class Queue
{
private:
    int len;
    int count = 0;
    K *queue;
public:
    Queue():len(10)
    {
        queue = new K[len];
        queue[len] = {0};
    };
    Queue(int n):len(n)
    {
        queue = new K[len];
        queue[len] = {0};
    };
    Queue(Queue &other):len(other.len)
    {
        queue = new K[len];
        for(int i=0;i<len;i++)
        {
            queue[i] = other.queue[i];
        }
    };
    Queue &operator=(const Queue &other)    //拷贝赋值函数
    {
        if(this != &other)
        {
            this->count = other.count;
            this->len = other.len;
            int *newqueue = new K[this->len];
            for(int i=0;i<len;i++)
            {
                newqueue[i] = other.queue[i];
            }
            delete [] queue;
            queue = newqueue;

        }
        return *this;
    }
    ~Queue()
    {
        delete []queue;
    };
    K front();
    K back();
    bool empty();
    int size();
    int push(K n);
    void pop();
    void expand();
    void show();
};
template<typename K>
K Queue<K>::front()
{
    if(empty())
    {
        cout<<"error"<<endl;
        return  -1;
    }
    return queue[count-1];
}
template<typename K>
K Queue<K>::back()
{
    if(empty())
    {
        cout<<"error"<<endl;
        return  -1;
    }
    return queue[0];
}
template<typename K>
bool Queue<K>::empty()
{
    return count == 0;
}
template<typename K>
int Queue<K>::size()
{
    return count;
}
template<typename K>
int Queue<K>::push(K n)
{
    if(count == len)
    {
        expand();
    }
    queue[count++] = n;
    return 0;
}
template<typename K>
void Queue<K>::pop()
{
    for(int i=0;i<count;i++)
    {
        queue[i] = queue[i+1];
    }
    count--;
}
template<typename K>
void Queue<K>::expand()
{
    len = len * 2;
    int *newqueue = new K[len];
    for(int i=0;i<count;i++)
    {
        newqueue[i] = queue[i];
    }
    delete [] queue;
    queue = newqueue;
}
template<typename K>
void Queue<K>::show()
{
    for(int i=0;i<count;i++)
    {
        cout<<queue[i]<<"  ";
    }
    cout<<endl;
}
int main()
{
    Stack<int> s1(3);
    s1.push(1);
    s1.push(2);
    s1.push(3);
    s1.push(3);
    s1.pop();
    Stack<int> s2;
    s2 = s1;
    s1.show();
    s2.show();
    cout<<s2.top()<<"   "<<s2.size()<<endl;
    cout<<"************"<<endl;
    Queue<int> q1(3);
    q1.push(1);
    q1.push(2);
    q1.push(3);
    q1.show();
    q1.pop();
    q1.show();
    return 0;
}


http://www.kler.cn/a/291151.html

相关文章:

  • python脚本中使用git命令
  • SLAAC如何工作?
  • Kingbase数据库备份还原操作手册
  • 数通-免费ARP
  • 51c大模型~合集91
  • Android 折叠屏问题解决 - 展开或收起页面重建
  • 在js渲染的dom中的事件中传递对象
  • 米家商城主题 html 页面源码分享,可用于网页设计作业
  • 室内导航定位系统在医院的应用与部署
  • Kubernetes学习指南:保姆级实操手册05——配置集群HA负载均衡
  • 智能巡检机器人创新设计的关键技术
  • Xml 映射文件中常见的标签
  • python(进阶2)实现自动化注册和登录
  • 长芯微国产LS0102电平转换器/电平移位器P2P替代TXS0102
  • 支付宝线上小程序打开异常
  • VUE3+FLASK+TYPESCRIPT(实习接触,学习并自主实现)
  • 硬件-电源常识
  • Python作为客户端连接websocket
  • 10.2 TCP IP模型、IP协议、IPv4、子网掩码
  • SpringBoot3 项目部署
  • 【计算机毕业设计】微信小程序的美甲店铺座位预约系统
  • 数据结构(6.4_6)——拓扑排序
  • SDIO驱动开发
  • 支持萝卜快跑:AI能否颠覆出租车与外卖行业?
  • 大模型研发全揭秘:数据决定模型成败!如何确保数据采集不踩坑?
  • http、https、https原理