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

1、栈

头文件

#ifndef ZHAN_H
#define ZHAN_H

#define MAX 8
#include 
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<<"判空失败"<top==-1;

}

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

//入栈
int Shu::stack_push(int data)
{
    datatype=data;
    if(stack_full())
    {
        cout<<"入栈失败"<top++;

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

    cout<<"入栈成功"<top+1;i++)
    {
        cout<top]<<"出栈成功"<top--;

    return 0;
}

//获取栈顶元素
int Shu::stack_top()
{
    if(stack_empty())
    {
        cout<<"获取栈顶元素失败"<top+1;

    cout<<"栈的大小为:"<top=-1;

    cout<<"清空栈成功"<>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<<"系统退出成功"<

主函数

#include 
#include "zhan.h"

using namespace std;

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

2、循环队列

头文件

#ifndef DUILIE_H
#define DUILIE_H

#define MAX 8
#include 
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<<"判空失败"<head==this->tail;

}

//判断满
int Shu::queue_full()
{
    if(NULL==arr)
    {
        cout<<"判满失败"<tail+1)%MAX==this->head;
}

//入队
int Shu::queue_push(int data)
{
    datatype=data;
    if(queue_full())
    {
        cout<<"入队失败"<tail]=datatype;

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

    cout<<"入队成功"<head;i!=this->tail;i=(i+1)%MAX)
    {
        cout<head]<<"出队成功"<head=(this->tail+1)%MAX;

    return 0;
}

//求队列的大小
int Shu::queue_size()
{
    if(queue_empty())
    {
        cout<<"求队列大小失败"<tail+MAX-this->head)%MAX;

    cout<<"队列的大小为:"<head=0;
    this->tail=0;

    cout<<"清空队列成功"<>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<<"系统退出成功"<

主函数

#include 
#include "duilie.h"

using namespace std;

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

3、思维导图

你可能感兴趣的:(c++,数据结构,算法)