C++实现链式队列和线性队列

本文介绍了C++中如何实现链式队列和线性队列,包括它们的定义、基本操作如入队、出队、获取队列顶元素等,并探讨了线性队列增加空间大小的方法。同时,提供了链式队列和线性队列的运行结果以及源码链接。
摘要由CSDN通过智能技术生成

云开的博客原文:https://chenyunxin.cn/posts/3058917998.html
欢迎访问我的博客交流哟😜:https://chenyunxin.cn/

前言

   队列(queue)是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。

   队列的数据元素又称为队列元素。在队列中插入一个队列元素称为入队,从队列中删除一个队列元素称为出队。因为队列只允许在一端插入,在另一端删除,所以只有最早进入队列的元素才能最先从队列中删除,故队列又称为先进先出(FIFO—first in first out)线性表。

   入队(push):线性表中,入队数据存储在last+1(last为未入队时栈顶元素的下标)的位置;链式表中,表中的最后一个结点指向待入队结点,待入队结点指向空(NULL);

   出队(pop):线性表中,数据依次左移一个单位;链式栈中,head指向它后继节点的后继节点(head->next = head->next->next);

   取队列顶(front):线性表中,返回下标为0的一个数据;链式表中,返回 head 的后继节点的数据。

队列的操作接口

操作接口 功能
void push(T p) 将元素p插入队尾(入队)
void pop() 删除队首元素
bool front(T &p) 成功得到队列顶元素返回true,并得到队列顶数据p
bool isEmpty() 判断队列是否为空
int size() 得到队列的大小

线性队列

使用线性结构数组来实现栈的操作。

线性队列的定义

template<class T>
class SeqQueue {
   
public:
    T *data;
    int maxSize{
   };       //能存储的最大数据量
    int last{
   };          //当前存储的元素个数(并非元素下标)
public:
    SeqQueue();                              //构造函数
    SeqQueue(SeqQueue<T> &list);             //拷贝构造函数
    ~SeqQueue();                             //析构函数
    void reSize();                           //增加空间大小
    void push(T p);                          //进队列
    void pop();                              //出队列
    bool front(T &p);                        //取队列顶
    bool isEmpty();                          //判断栈是否为空
    int size();                              //返回队列的大小
    void print();                            //打印队列
    void clear();                            //清空队列
    void delete_link();                      //摧毁队列
};

基本函数

//构造函数
template<class T>
SeqQueue<T>::SeqQueue() {
   
    maxSize = 50;       //初始最大存储量为50
    last = 0;
    data = new T[maxSize];   //给数组分配空间

    if (data == NULL)           //动态分配失败
    {
   
        cerr << "存储分配错误!" << endl;
        exit(1);
    }
}

//拷贝构造函数
template<class T>
SeqQueue<T>::SeqQueue(SeqQueue<T> &list) {
   
    maxSize = list.maxSize;
    last = list.last;

    data = new T[maxSize];
    if (data == NULL)           //动态分配失败
    {
   
        cerr << "存储分配错误!" << endl;
        exit(1);
    }

    for (int i = 0; i < maxSize; i++)
        data
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值