6-27 用类模板实现详细的队列(20) (10分)

你需要用模板类来编写一个队列,成员函数包括无参构造(默认队列大小为10)、有参构造、析构函数、入队、出队、获得队头元素函数、打印队列元素函数。注意队列空出一个存储空间用于判断队满队空。

函数接口定义:

template<typename T>
class RQueue

void enqueue(T data)
void dequeue()
T getHeadElem()
bool isfull()
bool isempty()
void show()//队列没元素时,不打印任何
unsigned int elem_available()//返回队列元素数量rear-front

裁判测试程序样例:

#include <iostream>
using namespace std;

/* 请在这里填写答案 */

int main()
{
    RQueue<float> rq;
    float a;
    for (int i = 0; i < 9; i++) {
        cin >> a;
        rq.enqueue(a);
    }
    rq.show();
    cout << endl;
    for (int i = 0; i < 6; i++)//出队6个元素
    {
        cout << rq.getHeadElem() << " ";
        rq.dequeue();
    }
    cout << endl;
    rq.show();
    return 0;
}

输入样例:

在这里给出一组输入。例如:

1.1 2.2 3.3 4.4 5.5 6.6 7.7 8.8 9.9

输出样例:

在这里给出相应的输出。例如(注意空格):

1.1 2.2 3.3 4.4 5.5 6.6 7.7 8.8 9.9 
1.1 2.2 3.3 4.4 5.5 6.6 
7.7 8.8 9.9 

#include <iostream>
using namespace std;

/* 请在这里填写答案 */
template<typename T>
class RQueue {
private:
    struct Queue {
        T data;
        Queue* next;
    };
    const int L;
    unsigned int cnt;
    Queue* head = nullptr, * tail, * newNode;
    void create(T d = 0) {
        for (int i = 0; i < L; ++i) {
            newNode = new Queue;
            newNode->data = d;
            newNode->next = nullptr;
            if (head == nullptr) {
                head = newNode;
            }
            else {
                tail->next = newNode;
            }
            tail = newNode;
        }
        tail->next = head;
    }
public:
    RQueue(T d,const int qL=9):L(qL) {
        create(d);
        cnt = 1;
        tail = head->next;
    }
    RQueue(const int qL=9):L(qL) {
        create();
        cnt = 0;
        tail = head;
    }
    bool isfull() {
        if (cnt > L)return true;
        else return false;
    }
    bool isempty() {
        if (cnt == 0)return true;
        else return false;
    }
    void enqueue(T data) {
        if (!isfull()) {
            tail->data = data;
            tail = tail->next;
            cnt++;
        }
    }
    void dequeue() {
        if (!isempty()) {
            head = head->next;
            cnt--;
        }
    }
    T getHeadElem() {
        return head->data;
    }
    //队列没元素时,不打印任何
    void show() {
        if (!isempty()) {
            newNode = head;
            for (int i = 0; i < cnt; ++i) {
                cout << newNode->data << " ";
                newNode = newNode->next;
            }
        }
    }
    //返回队列元素数量rear-front
    unsigned int elem_available() {
        return cnt;
    }
};
//以下部分题目给定
int main()
{
    RQueue<float> rq;
    float a;
    for (int i = 0; i < 9; i++) {
        cin >> a;
        rq.enqueue(a);
    }
    rq.show();
    cout << endl;
    for (int i = 0; i < 6; i++)//出队6个元素
    {
        cout << rq.getHeadElem() << " ";
        rq.dequeue();
    }
    cout << endl;
    rq.show();
    return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值