IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 【数据结构】队列 -> 正文阅读

[数据结构与算法]【数据结构】队列

今天复习了顺序表、栈、队列
明天复习堆与优先队列、二叉树

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


class OutOfRange:public exception {
public:
    const char* what()const throw() {
        return "ERROE! OUT OF Range.\n";
    }
};

class BadSize:public exception {
public:
    const char* what()const throw() {
        return "ERROR! BAD SIZE.\n";
    }
};


template<class T>
class Queue {
public:
    virtual bool isEmpty()const = 0;
    virtual bool isFull()const = 0;
    virtual void clear() = 0;
    virtual int size()const = 0;
    virtual void enQueue(const T& x) = 0;
    virtual T deQueue() = 0;
    virtual T getHead()const = 0;
};


template<class T>
class seqQueue : public Queue<T> {
private:
    T* data;
    int maxSize;
    int front, rear;
    void resize();
public:
    seqQueue(int initSize = 100);
    ~seqQueue() { delete[] data; }
    bool isEmpty()const { return front == rear; }
    bool isFull()const { return (rear + 1) % maxSize == front; }
    void clear() { front = rear = -1; }
    int size()const { return (rear - front + maxSize) % maxSize; }
    void enQueue(const T& x);
    T deQueue();
    T getHead()const { return data[front]; }
}; 

template<class T>
seqQueue<T>::seqQueue(int initSize) {
    if (initSize <= 0) throw BadSize();
    data = new T[initSize];
    maxSize = initSize;
    front = rear = -1;
}


template<class T>
void seqQueue<T>::enQueue(const T& x) {
    if (isFull()) resize();
    rear = (rear + 1) % maxSize;
    data[rear] = x;
}

template<class T>
T seqQueue<T>::deQueue() {
    if (isEmpty()) throw OutOfRange();
    front = (front + 1) % maxSize;
    return data[front];
}

template<class T>
T seqQueue<T>::getHead()const {
    if (isEmpty()) throw OutOfRange();
    return data[(front + 1) % maxSize];
}

template<class T>
void seqQueue<T>::resize() {
    T* p = data;
    data = new T[maxSize * 2];
    for (int i = 1; i <= maxSize; ++i) {
        data[i] = p[(front + i) % maxSize];
    }
    maxSize *= 2;
    delete[] p;
}



template<class T>
class linkQueue:public Queue<T> {
private:
    struct LinkNode {
        int val;
        LinkNode* next;
        LinkNode(const T& x, LinkNode* p = nullptr): val(x), p(nullptr) {}
        LinkNode(const T& x): p(nullptr), val(x) {}
    };
    LinkNode* front, * rear;
public:
    linkNode() { front = nullptr; rear = nullptr;}
    ~linkNode() { clear(); }
    bool isEmpty()const { return front == nullptr; }
    void clear();
    int size()const;
    void enQueue(const T& x);
    T deQueue();
    T getHead()const;
};


template<class T>
void linkQueue<T>::clear() {
    LinkNode* del = front
    while (front) {
        del = front;
        front = front->next;
        delete del;
    }
    rear = nullptr;
}

template<class T>
int linkQueue<T>::size()const {
    LinkNode* node = front;
    int cnt = 0;
    while (node) {
        ++cnt;
        node = node->next;
    }
    return cnt;
}

template<class T>
void linkQueue<T>::enQueue(const T& x) {
    if (rear == nullptr) 
        front = rear = new node(x);
    else {
        LinkNode* p = new LinkNode(x);
        rear->next = p;
        rear = p;
    }
}

template<class T>
T linkQueue<T>::deQueue() {
    if (isEmpty()) throw OutOfRange();
    LinkNode* del = front;
    T value = front->val;
    front = front->next;
    if (front == nullptr)
        rear = nullptr;
    delete del;
    return val;
}

template<class T>
T linkQueue<T>::getHead()const {
    if (isEmpty()) throw OutOfRange();
    return front->val;
}


  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章           查看所有文章
加:2021-07-07 11:50:56  更:2021-07-07 11:52:21 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 17:43:07-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码