C++ day3

https://note.youdao.com/s/VC4lNwOlicon-default.png?t=N7T8https://note.youdao.com/s/VC4lNwOl

1>

自行封装一个栈的类,包含私有成员属性:栈的数组、记录栈顶的变量

成员函数完成:构造函数、析构函数、拷贝构造函数、入栈、出栈、清空栈、判空、判满、获取栈顶元素、求栈的大小

2> 自行封装一个循环顺序队列的类,包含私有成员属性:存放队列的数组、队头位置、队尾位置

成员函数完成:构造函数、析构函数、拷贝构造函数、入队、出队、清空队列、判空、判满、求队列大小

循环队列:

#include <iostream>

using namespace std;

class My_Queue{
private:
    int *m_queue;
    int front;
    int tail;
    int length;
public:
    //构造函数
    My_Queue(int len);
    //构造拷贝函数
    My_Queue(const My_Queue& obj);
    //析构函数
    ~My_Queue();
    //队列长度
    int len();
    //入队
    bool push(int val);
    //出队
    bool pop();
    //判空
    bool empty();
    //判满
    bool full();
    //遍历
    bool show();

};

//有参构造
My_Queue::My_Queue(int len):m_queue(nullptr),front(0),tail(0),length(0){

    m_queue = new int[len+1];

    for(int i=0;i<len+1;i++){
        m_queue[i] = 0;

    }
    length = len+1;
}

//拷贝构造
My_Queue::My_Queue(const My_Queue& obj){

    length = obj.length;
    m_queue = new int[obj.length];

    for(int i=0;i<obj.length;i++){
        m_queue[i] = obj.m_queue[i];
    }
}

//求队长
int My_Queue::len(){
    return (tail + length - front)%length;

}

//出队
bool My_Queue::pop(){

    bool ret = true;
    if(empty()){
        cout<<"队为空"<<endl;
        ret = false;
        return ret;
     }
    front = (front + 1)%length;
    cout<<"出队成功"<<endl;
    return ret;
}

//入队
bool My_Queue::push(int val){

    bool ret = true;

    if(full()){
        cout<<"队已满"<<endl;
        ret = false;
        return ret;
    }
    m_queue[tail] = val;

    tail = (tail+1)%length;
    cout<<"入队成功"<<endl;

    return ret;
}

//判空
bool My_Queue::empty(){
    return front == tail;
}

//判满
bool My_Queue::full(){
    return (tail + 1)%length == front;
}

//遍历
bool My_Queue::show(){
    bool ret = true;
    if(empty()){
        cout<<"队为空"<<endl;
        ret = false;
        return ret;
    }
    for(int i=front;i!=tail;i = (i+1)%length){
        cout<<m_queue[i]<<" ";
    }
    cout<<endl;
    return ret;
}


My_Queue::~My_Queue(){
    delete[] m_queue;
}


int main()
{
    My_Queue q(10);

    for(int i=1;i<10;i++){
        q.push(i);
    }

    q.show();

    for(int i=1;i<4;i++){
        q.pop();
    }

    q.show();
    cout<<"队长为"<<q.len()<<endl;


    return 0;
}

 

栈:

#include <iostream>

using namespace std;
#define N 128

class my_stack{
private:
    int data[N];
    int top=-1;
public:
    //构造函数
    //my_stack();

    //判空
    bool empty();

    //判满
    bool full();

    //入栈
    void push(const  int val);

    //出栈
    void pop();

    //求栈大小
    int size();

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

    //销毁栈
    bool clear();

    //遍历
    bool show();

    //析构
    //~my_stack();
};


//判空
bool my_stack::empty(){

    return top == -1?1:0;

}



//判满
bool my_stack::full(){

    return top == N?1:0;
}


//入栈
void my_stack::push(const int val){

    if(full()){return;}
    top++;
    data[top] = val;
}


//出栈
void my_stack::pop(){
    if(empty()){
        cout<<"栈空";
    }
    top--;
    cout<<"出栈成功!"<<endl;

}


//求栈大小
int my_stack::size(){
    if(empty()){return -1;}
    return top+1;
}


//获取栈顶元素
int my_stack::my_top(){

    return data[top];
}


//清空栈
bool my_stack::clear(){
    bool ret = true;
    if(empty()){
        ret = false;
        cout<<"栈为空"<<endl;
        return ret;
    }
    top = -1;
    cout<<"栈已清空"<<endl;
    return ret;
}


//遍历
bool my_stack::show(){
    bool ret = true;
    if(empty()){
        ret = false;
        cout<<"栈为空"<<endl;
        return ret;
    }
    for(int i=0;i<=top;i++){
        cout<<data[i]<<" ";
    }
    cout<<endl;
    return ret;
}

//析构
//my_stack::~my_stack(){

//}
int main()
{

    my_stack s;
    for(int i = 1;i<10;i++ ){
        s.push(i);
    }
    s.show();
    for(int i=0;i<5;i++){
        s.pop();
    }
    s.show();
    cout<<"对列长度为"<<s.size()<<endl;
    cout<<"top="<<s.my_top()<<endl;
    s.clear();
    s.show();


    return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值