C++ -day3

1、自行封装一个栈的类

头文件

#ifndef ZY1_H
#define ZY1_H

#include <iostream>

using namespace std;

class Stack
{
private:
    int *p = nullptr;      //存储栈的数组
    int top;               //栈顶元素的下标
    int max;

public:

    //定义析构函数
    ~Stack();

    //定义拷贝构造函数
    Stack(const Stack &other);

    //创建栈
    Stack(int max);

    //判空
    bool stack_empty();

    //判满
    bool stack_full();

    //入栈
    int stack_push(int e);

    //出栈
    int stack_pop();

    //获取栈顶元素
    int stack_top();

    //栈的大小
    void stack_getsize();

    //清空栈
    int stack_delete();
};

#endif // ZY1_H

源文件:

#include "zy1.h"


//定义析构函数
Stack::~Stack()
{
    delete []p;              //释放成员指针的空间

    cout<<"Stu::析构函数:"<<this<<endl;
}

//定义拷贝构造函数
Stack::Stack(const Stack &other):p(other.p),top(other.top)
{
    cout<<"拷贝构造函数"<<endl;
}

//初始化
Stack::Stack(int size)
{
    max = size;
    p = new int[max];       //构造函数
    top =-1;
}

//判空
bool Stack::stack_empty()
{
    if(top==-1)
    {
        cout<<"栈为空"<<endl;
        return 1;
    }
    return 0;
}

//判满
bool Stack::stack_full()
{
    if(top==max-1)
    {
        cout<<"栈已满"<<endl;
        return 1;
    }
    return 0;
}

//入栈
int Stack::stack_push(int e)
{
    if(stack_full())
    {
        cout<<"入栈失败"<<endl;
        return -1;
    }
    top++;
    p[top]=e;
    cout<<"入栈成功"<<endl;
    return 0;
}

//出栈
int Stack::stack_pop()
{
    if(stack_empty())
    {
        cout<<"出栈失败"<<endl;
        return -1;
    }
    int e=p[top];
    top--;
    cout<<e<<"出栈成功"<<endl;
    return 0;
}

//清空栈
int Stack::stack_delete()
{
    while(top!=-1)
    {
        stack_pop();
    }
    delete [] p;
    p=nullptr;
    cout<<"清空成功"<<endl;
    return 0;
}

//获取栈顶元素
int Stack::stack_top()
{
    cout<<"栈顶元素是:"<<p[top]<<endl;
    return 0;
}

//求栈的大小
void Stack::stack_getsize()
{
    cout<<"栈的大小为:"<<top+1<<endl;
}


测试文件:

#include "zy1.h"

int main()
{
    //设置栈存储的最大值max
    int m;
    cout<<"设置栈的大小"<<endl;
    cin>>m;

    Stack s1(m);
    int e;
    int n;

    //判空
    s1.stack_empty();

    //入栈
    cout<<"请输入要入栈的个数:";
    cin>>n;

    for(int i=0;i<n;i++)
    {
        cout<<"请输入要入栈的元素:";
        cin>>e;
        s1.stack_push(e);
    }
    s1.stack_top();
    s1.stack_getsize();

    cout<<endl;
    s1.stack_delete();

    return  0;
}

2、自行封装一个队列的类

#ifndef ZY2_H
#define ZY2_H

#include <iostream>
#define MAX 128

using namespace std;
class Queue
{
private:
    int *p;         //队列的数组
    int tail;       //记录队尾元素
    int head;       //记录对头元素
    int max;        //队列元素的最大数量
public:

    //析构函数
    ~Queue();

    //拷贝构造函数
    Queue(const Queue &other);

    //初始化
    Queue(int size);

    //判空
    bool queue_empty();

    //判满
    bool queue_full();

    //入队
    int queue_push(int e);

    //出队
    int queue_pop();

    //清空队列
    int queue_delete();

    //队列的大小
    void queue_getsize();

};


#endif // ZY2_H

源文件:

#include "zy2.h"

//初始化
Queue::Queue(int size)
{
    max = size;
    p = new int[max];       //构造函数
    head = -1;
    tail = -1;
}

//定义析构函数
Queue::~Queue()
{
    delete []p;              //释放成员指针的空间

    cout<<"Stu::析构函数:"<<this<<endl;
}
//拷贝构造函数
Queue::Queue(const Queue &other):p(other.p),tail(other.tail),head(other.head)
{
    cout<<"拷贝构造函数"<<endl;
}

//判空
bool Queue::queue_empty()
{
    if(head==tail)
    {
        cout<<"队列为空"<<endl;
        return 1;
    }
    return 0;
}
//判满
bool Queue::queue_full()
{
    if((tail+1)==0)
    {
        cout<<"队列已满"<<endl;
        return 1;
    }
    return 0;
}

//入队
int Queue::queue_push(int e)
{
    if(queue_full())
    {
        cout<<"入队失败"<<endl;
        return -1;
    }
    p[tail]=e;
    tail++;
    cout<<"入队成功"<<endl;
    return 0;
}

//出队
int Queue::queue_pop()
{
    if(queue_empty())
    {
        cout<<"出队失败"<<endl;
        return -1;
    }
    int e=p[head];
    head=(head+1)%MAX;
    cout<<e<<"出队成功"<<endl;
    return 0;
}

//队列的大小
void Queue::queue_getsize()
{
    int size;
    size=(tail-head+MAX)%MAX;
    cout<<"队的大小为:"<<size<<endl;
}

//清空队列
int Queue::queue_delete()
{
    while(head!=tail)
    {
        queue_pop();
    }
    delete [] p;
    p=nullptr;
    cout<<"清空队列成功"<<endl;
    return 0;
}

测试文件:

#include "zy2.h"

int main()
{
    //设置队列存储的最大值max
    int m;
    cout<<"设置队列的大小"<<endl;
    cin>>m;

    Queue q1(m);
    int e;
    int n;
    q1.queue_empty();
    cout<<"请输入要入队的个数:";
    cin>>n;
    for(int i=0;i<n;i++)
    {
        cout<<"请输入要入队的元素:";
        cin>>e;
        q1.queue_push(e);
    }
     q1.queue_getsize();

    cout<<endl;
    q1.queue_delete();

    return 0;
}

 3、思维导图

猜你喜欢

转载自blog.csdn.net/Lychee_z23/article/details/132779543