队列(Queue),是一种线性存储结构。它有以下几个特点:
(01) 队列中数据是按照"先进先出(FIFO, First-In-First-Out)"方式进出队列的。
(02) 队列只允许在"队首"进行删除操作,而在"队尾"进行插入操作。
一 C++标准库queue
(1)成员函数
成员函数 |
说明 |
时间复杂度 |
size() |
返回队列大小 |
O(1) |
push() |
在末尾加入一个元素 |
O(1) |
pop() |
删除第一个元素 |
O(1) |
front() |
返回第一个元素 |
O(1) |
end() |
返回最后一个元素 |
O(1) |
empty |
队列为空返回真 |
O(1) |
(2)示例
#include <iostream>
#include <queue>
using namespace std;
/**
* C++ : STL中的队列(queue)的演示程序。
*
* @author skywang
* @date 2013/11/07
*/
int main ()
{
int tmp=0;
queue<int> iqueue;
// 将10, 20, 30 依次加入队列的末尾
iqueue.push(10);
iqueue.push(20);
iqueue.push(30);
// 删除队列开头的元素
iqueue.pop();
// 将“队列开头的元素”赋值给tmp,不删除该元素.
tmp = iqueue.front();
cout<<"tmp="<<tmp<<endl;
// 将40加入到队列的末尾
iqueue.push(40);
cout << "empty()=" << iqueue.empty() <<endl;
cout << "size()=" << iqueue.size() <<endl;
while (!iqueue.empty())
{
tmp = iqueue.front();
cout<<tmp<<endl;
iqueue.pop();
}
return 0;
}
二 C++实现队列
#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