队列(Queue)-- 数组实现(C++ )
2017-02-25 17:01
435 查看
什么是队列?
队列是一种先入先出的数据结构(FIFO),只允许在前端(front)删除,在后端(rear)插入。
那么怎么实现队列呢?
数组实现变量
前端: front
后端: rear
存储数组: queue
容量: capacity
功能
构造队列:Queue
析构队列:~Queue
入队:enqueue
出队:dequeue
判空:isEmpty
判满:isFull
大小:capacity
查看队首:front
以int为数据,类代码:
class Queue { public: Queue(int c = 10); ~Queue(); bool enqueue(int data); int dequeue(); int front(); bool isEmpty(); bool isFull(); int size(); private: int *queue_; int front_; int rear_; int capacity_; };
使用模板类造后:
template <typename T> class Queue { public: Queue(int c = 10); ~Queue(); bool enqueue(T data); T dequeue(); T front(); bool isEmpty(); bool isFull(); int size(); private: T *queue_; int front_; int rear_; int capacity_; };
模板类接口实现:
用数组是现实时常实现为循环队列,以便实现O(1)入队和出队,使空间合理被应用。
空队列: front == rear
满队列: (rear + 1) % size == front (牺牲一个位置)
template <typename T> Queue<T>::Queue(int c): capacity_(c), front_(0), rear_(0), queue_(NULL) { queue_ = new T [c]; std::cout << "capacity:" << c << std::endl; } template <typename T> Queue<T>::~Queue() { if(queue_) { delete [] queue_; } } template <typename T> bool Queue<T>::enqueue(T data) { if(isFull()) { return false; } queue_[rear_] = data; rear_ = (rear_ + 1) % capacity_; return true; } template <typename T> T Queue<T>::dequeue() { T data; if(isEmpty()) { throw std::out_of_range("Queue::dequeue() - Empty queue"); } data = queue_[front_]; front_ = (front_ + 1) % capacity_; return data; } template <typename T> T Queue<T>::front() { if(isEmpty()) { throw std::out_of_range("Queue::front() - Empty queue"); } return queue_[front_]; } template <typename T> bool Queue<T>::isEmpty() { return (front_ == rear_); } template <typename T> bool Queue<T>::isFull() { return (((rear_+1) % capacity_) == front_); } template <typename T> int Queue<T>::size() { return ((rear_ - front_ + capacity_) % capacity_); }
相关文章推荐
- 队列(queue)的链表(list)实现及循环数组(circular array)实现 C++实现
- 队列(queue)的链表(list)实现及循环数组(circular array)实现 C++实现
- C++ 模板应用 实现一个Queue 队列
- 【数据结构与算法基础】以数组实现的循环队列 / Circular Queue implemented by array
- 基于数组的循环队列(C++模板实现)
- 数据结构队列之环形队列的动态数组实现:queue
- 有序队列(sorted_queue)的C++实现
- C++用数组实现栈和循环队列
- 创建自己的队列Queue底层实现利用数组
- 队列(数组形式)实现_c++
- C++用数组和链表分别实现Queue
- 数组队列C++实现
- C++用数组和链表分别实现Queue
- 队列(queue) 之 c++模板实现(友元函数和运算符重载)
- 基于数组的循环队列(C++模板实现)
- 队列 queue 的链表实现操作 -C++
- 循环队列的实现(Queue, C++版)
- C++ 实现queue(队列)链表
- 队列(c++ 数组实现)
- C++动态数组实现队列