c++实现数据结构栈和队列

发布于:2023-09-16 ⋅ 阅读:(67) ⋅ 点赞:(0)

1、栈

头文件

#ifndef ZHAN_H
#define ZHAN_H

#define MAX 8
#include <iostream>
using namespace std;

class Shu
{
    int datatype;  //入栈的数据
    int *arr;  //栈的数组
    int top;  //记录栈顶元素的下标

public:
    //构造函数
    Shu();


    //析构函数
    ~Shu();


    //判断空
    int stack_empty();

    //判断满
    int stack_full();

    //入栈
    int stack_push(int data);

    //遍历栈
    void stack_show();

    //出栈
    int stack_pop();

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

    //求栈的大小
    int stack_size();

    //清空栈
    void stack_free();

};

void xitong();

#endif // ZHAN_H

源文件

#include "zhan.h"

Shu::Shu()
{
    datatype=0;
    arr = new int[MAX];
    top=-1;
}

Shu::~Shu()
{
    delete arr;
    arr=nullptr;
}

//判断空
int Shu::stack_empty()
{
    if(NULL==arr)
    {
        cout<<"判空失败"<<endl;
        return -1;
    }

    return this->top==-1;

}

//判断满
int Shu::stack_full()
{
    if(NULL==arr)
    {
        cout<<"判满失败"<<endl;
        return -1;
    }

    return this->top==MAX-1;
}

//入栈
int Shu::stack_push(int data)
{
    datatype=data;
    if(stack_full())
    {
        cout<<"入栈失败"<<endl;
        return -1;
    }

    //top下标自增
    this->top++;

    //将输入的函数放入数组中
    arr[this->top]=datatype;

    cout<<"入栈成功"<<endl;

    return 0;
}

//遍历栈
void Shu::stack_show()
{
    if(stack_empty())
    {
        cout<<"遍历失败"<<endl;
        return ;
    }

    //遍历
    for(int i=0;i<this->top+1;i++)
    {
        cout<<arr[i]<<" ";
    }
    cout<<endl;
}

//出栈
int Shu::stack_pop()
{
    if(stack_empty())
    {
        cout<<"出栈失败"<<endl;
        return -1;
    }

    //出栈
    cout<<arr[this->top]<<"出栈成功"<<endl;

    //自减
    this->top--;

    return 0;
}

//获取栈顶元素
int Shu::stack_top()
{
    if(stack_empty())
    {
        cout<<"获取栈顶元素失败"<<endl;
        return -1;
    }

    //获取栈顶元素
    cout<<"栈顶元素为:"<<arr[top]<<endl;

    return 0;
}

//求栈的大小
int Shu::stack_size()
{
    if(stack_empty())
    {
        cout<<"求栈大小失败"<<endl;
        return -1;
    }

    //栈的大小
    int size=this->top+1;

    cout<<"栈的大小为:"<<size<<endl;
    return 0;
}

//清空栈
void Shu::stack_free()
{
    this->top=-1;

    cout<<"清空栈成功"<<endl;
}

//系统函数
void xitong()
{
    //定义一个Shu类型的变量名
    Shu zhan;
    while(1)
    {
        END:
        system("CLS");
        cout<<"**********************"<<endl;
        cout<<"********1、入栈********"<<endl;
        cout<<"********2、遍历********"<<endl;
        cout<<"********3、出栈********"<<endl;
        cout<<"********4、栈顶元素*****"<<endl;
        cout<<"********5、栈的大小*****"<<endl;
        cout<<"********0、退出********"<<endl;
        cout<<"**********************"<<endl;

        int num;
        int data;
        cout<<"请输入对应的功能:";
        cin>>num;
        switch(num)
        {
        case 1:
            cout<<"请输入要加入的数:";
            cin>>data;
            zhan.stack_push(data);
            break;
        case 2:
            zhan.stack_show();
            break;
        case 3:
            zhan.stack_pop();
            break;
        case 4:
            zhan.stack_top();
            break;
        case 5:
            zhan.stack_size();
            break;
        case 0:
            goto ENDL;
        }
        int qp;
        cout<<"输入清屏(7):";
        cin>>qp;
        if(qp==7)
        {
            goto END;
        }
    }
    ENDL:

    cout<<"系统退出成功"<<endl;
    zhan.stack_free();

}

主函数

#include <iostream>
#include "zhan.h"

using namespace std;

int main()
{
    xitong();
    return 0;
}

2、循环队列

头文件

#ifndef DUILIE_H
#define DUILIE_H

#define MAX 8
#include <iostream>
using namespace std;

class Shu
{
    int datatype;  //入队的数据
    int *arr;  //循环队列的数组
    int head;  //记录队列头元素的下标
    int tail;  //记录队列尾元素下标

public:
    //构造函数
    Shu();


    //析构函数
    ~Shu();


    //判断空
    int queue_empty();

    //判断满
    int queue_full();

    //入队
    int queue_push(int data);

    //遍历队
    void queue_show();

    //出队
    int queue_pop();

    //求队列的大小
    int queue_size();

    //清空队
    void queue_free();

};

//系统函数
void xitong();

#endif // DUILIE_H

源文件

#include "duilie.h"

Shu::Shu()
{
    datatype=0;
    arr = new int[MAX];
    head=0;
    tail=0;
}

Shu::~Shu()
{
    delete arr;
    arr=nullptr;
}

//判断空
int Shu::queue_empty()
{
    if(NULL==arr)
    {
        cout<<"判空失败"<<endl;
        return -1;
    }

    return this->head==this->tail;

}

//判断满
int Shu::queue_full()
{
    if(NULL==arr)
    {
        cout<<"判满失败"<<endl;
        return -1;
    }

    return (this->tail+1)%MAX==this->head;
}

//入队
int Shu::queue_push(int data)
{
    datatype=data;
    if(queue_full())
    {
        cout<<"入队失败"<<endl;
        return -1;
    }

    //将输入的函数放入数组中
    arr[this->tail]=datatype;

    //尾下标自增
    this->tail=(this->tail+1)%MAX;

    cout<<"入队成功"<<endl;

    return 0;
}

//遍历栈
void Shu::queue_show()
{
    if(queue_empty())
    {
        cout<<"遍历失败"<<endl;
        return ;
    }

    //遍历
    for(int i=this->head;i!=this->tail;i=(i+1)%MAX)
    {
        cout<<arr[i]<<" ";
    }
    cout<<endl;
}

//出队
int Shu::queue_pop()
{
    if(queue_empty())
    {
        cout<<"出队失败"<<endl;
        return -1;
    }

    //出队
    cout<<arr[this->head]<<"出队成功"<<endl;

    //自增
    this->head=(this->tail+1)%MAX;

    return 0;
}

//求队列的大小
int Shu::queue_size()
{
    if(queue_empty())
    {
        cout<<"求队列大小失败"<<endl;
        return -1;
    }

    //栈的大小
    int size=(this->tail+MAX-this->head)%MAX;

    cout<<"队列的大小为:"<<size<<endl;
    return 0;
}

//清空栈
void Shu::queue_free()
{
    this->head=0;
    this->tail=0;

    cout<<"清空队列成功"<<endl;
}

//系统函数
void xitong()
{
    //定义一个Shu类型的变量名
    Shu zhan;
    while(1)
    {
        END:
        system("CLS");
        cout<<"**********************"<<endl;
        cout<<"********1、入队********"<<endl;
        cout<<"********2、遍历********"<<endl;
        cout<<"********3、出队********"<<endl;
        cout<<"********4、队列的大小***"<<endl;
        cout<<"********0、退出********"<<endl;
        cout<<"**********************"<<endl;

        int num;
        int data;
        cout<<"请输入对应的功能:";
        cin>>num;
        switch(num)
        {
        case 1:
            cout<<"请输入要加入的数:";
            cin>>data;
            zhan.queue_push(data);
            break;
        case 2:
            zhan.queue_show();
            break;
        case 3:
            zhan.queue_pop();
            break;
        case 4:
            zhan.queue_size();
            break;
        case 0:
            goto ENDL;
        }
        int qp;
        cout<<"输入清屏(7):";
        cin>>qp;
        if(qp==7)
        {
            goto END;
        }
    }
    ENDL:

    cout<<"系统退出成功"<<endl;
    zhan.queue_free();

}

主函数

#include <iostream>
#include "duilie.h"

using namespace std;

int main()
{
    xitong();
    return 0;
}

3、思维导图

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到