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

这篇具有很好参考价值的文章主要介绍了c++实现数据结构栈和队列。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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、思维导图

c++实现数据结构栈和队列,c++,数据结构,算法文章来源地址https://www.toymoban.com/news/detail-712692.html

到了这里,关于c++实现数据结构栈和队列的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数据结构|栈和队列以及实现

    栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。 进行数据插入和数据删除的一端称为栈顶,另一端称为栈顶。 栈中的数据元素遵循后进先出的原则,简称LIFO(Last In First Out)。 压栈:栈的插入操作叫做进栈/压栈/入栈, 入数据在栈顶 。 出栈:栈

    2024年02月09日
    浏览(34)
  • 【数据结构】实现栈和队列

    (1)栈的概念 栈是一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。 进行数据插入和删除操作的一端称为栈顶,另一端称为栈底 。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。 压栈:栈的插入操作叫做进栈/压栈/入栈, 入数据在栈顶。 出

    2024年02月11日
    浏览(29)
  • 【数据结构】栈和队列的模拟实现

    前言:前面我们学习了单链表并且模拟了它的实现,今天我们来进一步学习,来学习栈和队列吧!一起加油各位,后面的路只会越来越难走需要我们一步一个脚印! 💖 博主CSDN主页:卫卫卫的个人主页 💞 👉 专栏分类:数据结构 👈 💯代码仓库:卫卫周大胖的学习日记💫 💪关

    2024年02月05日
    浏览(30)
  • 数据结构(Java实现)-栈和队列

    栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。 先进后出 栈的使用 栈的模拟实现 上述的主要代码 改变元素的序列 将递归转化为循环 比如:逆序打印链表 结果如下 队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表

    2024年02月10日
    浏览(27)
  • 从0开始学C++ 第二十八课 数据结构深入 - 栈和队列

    第二十八课:数据结构深入 - 栈和队列 学习目标: 理解栈(Stack)的基本概念和特性。 掌握队列(Queue)的基本概念和特性。 学会在C++中使用栈和队列。 了解栈和队列的典型应用场景。 学习内容: 栈(Stack) 概念:栈是一种后进先出(LIFO, Last In First Out)的数据结构,元素

    2024年01月23日
    浏览(32)
  • 数据结构——Java实现栈和队列

    (1)栈是一种线性数据结构 (2)规定只能从栈顶添加元素,从栈顶取出元素 (3)是一种先进后出的数据结构(Last First Out)LIFO Java中可以直接调用方法来实现栈 如何自己写代码来实现栈呢? 先定义一个接口,方便后边进行调用 接下来来实现栈的方法,调用接口,完善方法

    2024年01月20日
    浏览(28)
  • 数据结构基础5:栈和队列的实现。

    1.基本概念 栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。 压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。 出栈:栈

    2024年02月13日
    浏览(25)
  • 【数据结构】栈和队列的模拟实现(两个方式实现)

    💓作者简介: 加油,旭杏,目前大二,正在学习 C++ , 数据结构 等👀 💓作者主页:加油,旭杏的主页👀 ⏩本文收录在:再识C进阶的专栏👀 🚚代码仓库:旭日东升 1👀 🌹欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖        这一篇博客将学习栈和队列的相关知识, 栈

    2024年02月05日
    浏览(25)
  • 数据结构初阶(用C语言实现简单数据结构)--栈和队列

    ✨✨欢迎来到T_X_Parallel的博客!!       🛰️博客主页:T_X_Parallel       🛰️专栏 : 数据结构初阶       🛰️欢迎关注:👍点赞🙌收藏✍️留言 这小猫真好看 言归正传,通过上篇有关顺序表和链表的博客,可以了解到线性表的一些大致特征,这篇博

    2024年02月08日
    浏览(27)
  • 数据结构上机实验——栈和队列的实现、栈和队列的应用、进制转换、约瑟夫环问题

      1.利用栈的基本操作实现将任意一个十进制整数转化为R进制整数。   2.利用循环队列实现.约瑟夫环问题:已知n个人(以编号1,2,3…n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到k的那个人出圈;他的下一个人又从1开始报数,数到k的那个人出圈;依

    2024年02月08日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包