一、介绍
队列(Queue),是一种线性存储结构。它有以下几个特点:
(01) 队列中数据是按照"先进先出(FIFO, First-In-First-Out)"方式进出队列的。
(02) 队列只允许在"队首"进行删除操作,而在"队尾"进行插入操作。
队列通常包括的两种操作:入队列 和 出队列。
二、实现
C++的STL中本身就包含了list类,基本上该list类就能满足我们的需求,所以很少需要我们自己来实现。本部分介绍2种C++实现。
1. C++实现一:数组实现的队列,能存储任意类型的数据。
2. C++实现二:C++的 STL 中自带的"队列"(list)的示例。
1.C++实现一:数组实现的队列,能存储任意类型的数据。
实现代码:.h
#ifndef ARRAY_QUEUE_HXX #define ARRAY_QUEUE_HXX #include <iostream> using namespace std; template<class T> class ArrayQueue{ public: ArrayQueue(); ~ArrayQueue(); void add(T t); T front(); T pop(); int size(); int is_empty(); private: T *arr; int count; }; // 创建“队列”,默认大小是12 template<class T> ArrayQueue<T>::ArrayQueue() { arr = new T[12]; if (!arr) { cout<<"arr malloc error!"<<endl; } } // 销毁“队列” template<class T> ArrayQueue<T>::~ArrayQueue() { if (arr) { delete[] arr; arr = NULL; } } // 将val添加到队列的末尾 template<class T> void ArrayQueue<T>::add(T t) { arr[count++] = t; } // 返回“队列开头元素” template<class T> T ArrayQueue<T>::front() { return arr[0]; } // 返回并删除“队列末尾的元素” template<class T> T ArrayQueue<T>::pop() { int i = 0;; T ret = arr[0]; count--; while (i++<count) arr[i-1] = arr[i]; return ret; } // 返回“队列”的大小 template<class T> int ArrayQueue<T>::size() { return count; } // 返回“队列”是否为空 template<class T> int ArrayQueue<T>::is_empty() { return count==0; } #endif