当前位置:首页 » 《关注互联网》 » 正文

坐牢第三十四天(c++)

9 人参与  2024年09月15日 16:42  分类 : 《关注互联网》  评论

点击全文阅读


一.作业

1.栈的手写

#include <iostream>using namespace std;// 封装一个栈class stcak{private:    int *data;    //    int max_size; // 最大容量    int top;      // 下标public:    // 无参构造函数    stcak();    // 有参构造函数    stcak(int size);    // 拷贝构造函数    stcak(const stcak &other);    // 析构函数    ~stcak();    // 判空函数    bool empty();    // 判满函数    bool full();    // 扩容函数    void resize(int new_size);    // 返回元素个数函数    int size();    // 向栈顶插入元素函数    void push(int value);    // 删除栈顶元素函数    int pop();    // 访问栈顶元素函数    int get_top();    // 赋值重载函数    stcak &operator=(const stcak &other);    // 遍历栈里元素函数    void show();};// 无参构造函数stcak::stcak() : max_size(10){    data = new int[10];    max_size = 10;    top = -1;    cout << "无参构造" << endl;}// 有参构造函数stcak::stcak(int size){    data = new int[size];    max_size = size;    top = -1;    cout << "有参构造" << endl;}// 拷贝构造函数stcak::stcak(const stcak &other){    max_size = other.max_size;    top = other.top;    data = new int[max_size];    for (int i = 0; i <= top; i++)    {        data[i] = other.data[i];    }    cout << "拷贝构造" << endl;}// 析构函数stcak::~stcak(){    delete[] data;    cout << "析构函数" << endl;}// 判空函数bool stcak::empty(){    return top == -1;}// 判满函数bool stcak::full(){    return top == max_size - 1;}// 扩容函数void stcak::resize(int new_size){    int *new_data = new int[new_size];    for (int i = 0; i <= top; i++)    {        new_data[i] = data[i];    }    delete[] data;    data = new_data;    max_size = new_size;}// 返回元素个数函数int stcak::size(){    return top + 1;}// 向栈顶插入元素函数void stcak::push(int value){    if (full())    {        // 调用扩容函数        resize(max_size * 2);    }    data[++top] = value;}// 删除栈顶元素函数int stcak::pop(){    if (empty())    {        cout << "栈是空的";        return -1;    }    return data[top--]; // 出栈}// 访问栈顶元素函数int stcak::get_top(){    if (empty())    {        cout << "栈是空的";        return -1;    }    return data[top]; // 出栈}// 赋值重载函数stcak &stcak::operator=(const stcak &other){    if (this == &other)    {        return *this;    }    delete[] data;    max_size = other.max_size;    top = other.top;    data = new int[max_size];    for (int i = 0; i <= top; i++)    {        data[i] = other.data[i];    }    return *this;}// 遍历栈里元素函数void stcak::show(){    if (empty())    {        cout << "栈是空的";        return;    }    cout << "栈里元素有:"<<endl;    for (int i = 0; i <= top; i++)    {        cout<< data[i] <<'\t';     }    cout <<endl;}/******************主函数*********************/ int main(){    stcak s1(20);    cout << s1.size() << endl;    s1.push(1);    s1.push(2);    s1.show();    cout << s1.size() << endl;    stcak s2 = s1;    return 0;}

 效果图:

2.队列的手写

#include <iostream>using namespace std;class queue{private:    int *data;    // 容器    int max_size; // 最大容量    int front;    // 头下标    int tail;     // 尾下标public:    // 无参构造函数    queue();    // 有参构造函数    queue(int size);    // 拷贝构造函数    queue(const queue &other);    // 析构函数    ~queue();    // 判空函数    bool empty();    // 判满函数    bool full();    // 扩容函数    void resize(int new_size);    // 元素个数函数    int size();    // 向队列尾部插入元素函数    void push(int value);    // 删除首个元素函数 出队    int pop();    // 遍历队列元素    void show();    // 赋值重载函数    queue &operator=(const queue &other);};// 无参构造函数queue::queue() : max_size(10){    data = new int[10];    max_size = 10;    front = tail = -1;    cout << "无参构造" << endl;}// 有参构造函数queue::queue(int size){    data = new int[size];    max_size = size;    front = tail = 0;    cout << "有参构造" << endl;}// 拷贝构造函数queue::queue(const queue &other){    max_size=other.max_size;    front=other.front;    tail=other.tail;    data=new int[max_size];    for (int i = front; i != tail; i = (i + 1) % max_size)    {        data[i]=other.data[i];    }       cout << "拷贝构造" << endl;}// 析构函数queue::~queue(){    delete[] data;    cout << "析构函数" << endl;}// 判空函数bool queue::empty(){    return front == tail;}// 判满函数bool queue::full(){    return (tail + 1) % max_size == front;}// 元素个数函数int queue::size(){    return (tail - front + max_size) % max_size;}// 扩容函数void queue::resize(int new_size){    int *new_data = new int[new_size];    for (int i = front; i <= tail; i++)    {        new_data[i] = data[i];    }    data = new_data;    max_size = new_size;}// 向队列尾部插入元素函数void queue::push(int value){    if (full())    {        // 调用扩容函数        resize(max_size * 2);    }    data[tail] = value;    tail = (tail + 1) % max_size;}// 删除首个元素函数 出队int queue::pop(){    if (empty())    {        cout << "队列为空" << endl;        return -1;    }    cout << data[front] << "出队" << endl;    front = (front + 1) % max_size;    return 0;}// 遍历队列元素void queue::show(){    if (empty())    {        cout << "队列为空" << endl;        return;    }    cout << "队列元素:" << endl;    for (int i = front; i != tail; i = (i + 1) % max_size)    {        cout << data[i] << '\t';    }    cout << endl;}// 赋值重载函数queue &queue::operator=(const queue &other){    if (this == &other)    {        return *this;    }    delete []data;    max_size=other.max_size;    front=other.front;    tail=other.tail;    data=new int[max_size];    for (int i = front; i != tail; i = (i + 1) % max_size)    {        data[i]=other.data[i];    }    cout << "拷贝赋值函数" <<endl;      return *this; }/******************主函数*********************/int main(){    queue s1(20);    s1.push(1);    s1.push(2);    s1.show();    // s1.pop();    // s1.pop();    // s1.show();    queue s2=s1;    queue s3;    s3=s2;    return 0;}

 效果图:

二.思维导图


点击全文阅读


本文链接:http://zhangshiyu.com/post/160442.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1