当前位置: 首页 > news >正文

编程日志4.27

队列的顺序表表示代码

#include<iostream>
#include<stdexcept>
using namespace std;


//队列 类的声明


template<typename T>//1.模板声明,表明Queue类是一个通用的模板类,可以用于存储任何类型的元素T

class Queue {//2.Queue类的声明,表示一个队列的数据结构
private://定义成员变量私有
    T* data;//3.用于存储队列中的元素,它是一个指向类型为T的指针
    int front;//4.用于记录队首的索引
    int rear;//5.用于记录队尾的索引
    int capacity;//6.用于记录队列的容量
    void resize();//7.用于在队列容量不足时进行扩容
public://定义公共成员函数
//8.Queue()是构造函数,用于初始化队列的成员变量。它创建一个新的队列,并分配一个容量为10的数组来存储元素,front和rear一开始都指向0,代表一个空队列
    Queue():data(new T[10]),front(0),rear(0),capacity(10){}
    ~Queue();//9.析构函数,用于释放队列所占用的内存
    void enqueue(T element);//10.用于将一个新元素入队
    T dequeue();//11.用于出队
    T getFront() const;//12.用于获取队首的元素,但不弹出它
    int getSize() const;//13.用于获取队列中元素的数量
};

//队列的扩容


template<typename T>//1.模板声明,表明resize函数是一个通用的模板类,可以用于处理任何类型的元素T
//resize用于在队列容量不足时进行扩容操作。它创建了一个更大的数组,并将旧数组的元素复制到新数组中,然后更新队列元素的指针和容量,确保不溢出。
void Queue<T>::resize() {
    T* newData = new T[capacity * 2];//计算新容量为当前容量的两倍,并创建新数组newData,用于存储扩充后的元素,新数组大小为新的容量
    for (int i = 0; i < rear; i++) {
        newData[i] = data[i];//复制元素到新数组
    }
    delete[] data;//释放旧数组占用的空间
    data = newData;//newData数组赋给data,使其成为队列的新存储数组
    capacity *= 2;//更新队列容量
}

//队列的销毁


template<typename T>
Queue<T>::~Queue() {//析构函数的声明,用于在对象销毁时执行清理操作
    delete[] data;//释放了动态分配的数组data所占用的内存空间。delete[]用于释放动态分配的数组内存
}

//入队


template<typename T>
void Queue<T>::enqueue(T element) {
    if (rear == capacity) {//队尾等于容量,调用resize()扩容
        resize();
    }
    data[rear++] = element;//element赋值给队列数组data的rear位置,并将rear的值增加1,以表示队列中元素的数量增加
}

//出队


template<typename T>
T Queue<T>::dequeue() {
    if (front == rear) {//栈空 抛出异常
        throw std::underflow_error("Queue is empty");
    }
    return data[front++];//不空,返回队首索引元素,并将front+1,代表移除队首元素。
}

//获取队首元素


template<typename T>
T Queue<T>::getFront() const {
    if (front == rear) {
        throw std::underflow_error("Queue is empty");
    }
    return data[front];//队不空,返回队首元素
}

//获取队列长度


template<typename T>
int Queue<T>::getSize() const {
    return rear - front;//队尾减去队头得队列长度
}

//主函数


int main() {
    Queue<int> q;
    q.enqueue(3);//入队3
    q.enqueue(4);
    cout << q.getFront() << endl;//队首元素为3
    q.enqueue(5);
    cout << q.getFront() << endl;//3
    q.dequeue();//移除队首元素3
    cout << q.getFront() << endl;//4
    cout << q.getSize() << endl;//2 (4,5)
    return 0;
}

相关文章:

  • RPA与After Effects 2024深度融合:自动化影视特效全链路革命
  • Unity垃圾回收(GC)
  • Spring Boot 中 AOP 的自动装配原理
  • 如何使用极狐GitLab 软件包仓库功能托管 npm?
  • 战术级微波干扰系统:成都鼎轻量化装备如何实现全频段智能压制?
  • http Status 400 - Bbad request 网站网页经常报 HTTP 400 错误,清缓存后就好了的原因
  • Java程序题案例分析
  • Nvidia-smi 运行失败(Failed to initialize NVML: Driver/library version mismatch)
  • 2025FIC初赛(手机)
  • 【实战教程】零基础搭建DeepSeek大模型聊天系统 - Spring Boot+React完整开发指南
  • 阿里云平台与STM32的物联网设计
  • 大模型Prompt工程2.0:多Prompt协同完全指南——从原理到实战,高效解锁AI深层潜力
  • 什么是回调 钩子 Hook机制 钩子函数 异步编程
  • shell脚本实现远程重启多个服务器
  • 代码随想录算法训练营第三十四天
  • 数据库补充知识
  • 【Redis】哨兵机制和集群
  • k8s 中 deployment 管理的多个 pod 构成集群吗
  • 技术视界|青龙机器人训练地形详解(二):添加地形到训练环境
  • Flutter TabBar / TabBarView 详解
  • 伤员回归新援融入,海港逆转海牛重回争冠集团
  • 马云再次现身阿里打卡创业公寓“湖畔小屋”,鼓励员工坚持创业精神
  • 外交部:习近平主席同普京总统达成许多新的重要共识
  • 【社论】职业上新,勇于“尝新”
  • 七大交响乐团“神仙斗法”,时代交响在上海奏出时代新声
  • 【社论】以法治力量促进民企长远健康发展