数据结构--队列--顺序表实现

队列 先进先出

c++中STL

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

int main(){
    queue<int> q;
    q.push(1);
    q.push(2);
    q.push(3);
    q.push(4);
    while(!q.empty()){
        cout << q.front() << endl;
        q.pop();
    }
    return 0;
}
1
2
3
4

全部代码

#include <iostream>
#include <stdexcept>
using namespace std;
template<typename T>
class Queue{
private:
    T *data;
    int front;//指向队首
    int rear;//指向队尾后面的一个元素
    int capacity;
    void resize();//动态数组需要扩容
public:
    Queue() : data(new T[capacity]),front(0),rear(0),capacity(10) {}
   // Queue() : data(new T[10]),front(0),rear(0),capacity(10) {}
    //初始化 :舒适化列表
    ~Queue();//析构函数
    void enqueue(T element);//入队函数
    T dequeue();//出队函数
    T getFront() const;//获取队头元素
    int getSize() const;//获取队列长度
};
template<typename T>
void Queue<T>::resize(){
    T *newData = new T[capacity * 2];
    for (int i = 0; i < rear; i++) {
        newData[i] = data[i];
    }
    delete[] data;
    data = newData;
    capacity *= 2;
};
template<typename T>
Queue<T>::~Queue(){
    delete[] data;
};//析构函数
template<typename T>
void Queue<T>::enqueue(T element){
    if(rear == capacity){
        resize();
    }
    data[rear++] = element;
};//入队函数

template<typename T>
T Queue<T>::dequeue(){
    if(front == rear){
        throw std::underflow_error("Queue is empty");
    }
    return data[front++];
};//出队函数
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);
    q.enqueue(4);
    cout << q.getFront() << endl;
    q.enqueue(5);
    cout << q.getFront() << endl;
    q.dequeue();
    cout << q.getFront() << endl;
    cout << q.getSize() << endl;
    return 0;
}

输出

3
3
4
2

动态数组需要扩容

template<typename T>
void Queue<T>::resize(){
    T *newData = new T[capacity * 2];
    for (int i = 0; i < rear; i++) {
        newData[i] = data[i];
    }
    delete[] data;
    data = newData;
    capacity *= 2;
};

析构函数

template<typename T>
Queue<T>::~Queue(){
    delete[] data;
};//析构函数

入队函数

template<typename T>
void Queue<T>::enqueue(T element){
    if(rear == capacity){
        resize();
    }
    data[rear++] = element;
};//入队函数

出队函数

template<typename T>
T Queue<T>::dequeue(){
    if(front == rear){
        throw std::underflow_error("Queue is empty");
    }
    return data[front++];
};//出队函数

获取队头元素

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;
};//获取队列长度

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值