描述
隊列是一種線性存儲結構。隊列中的數據是按照先進先出方式進出隊列的。隊列只允許在隊首進行刪除操作(出隊),而在隊尾進行插入操作(入隊)。
順序隊列(C++)
#include<iostream>
using namespace std;
template<class T>
class ArrayQueue{
public:
ArrayQueue();
ArrayQueue(int size);
~ArrayQueue();
T front();//返回隊首元素
bool push(T e);//入隊
bool pop();//出隊
bool empty();//返回隊列是否爲空
int size();//返回隊列中的元素個數
private:
T *arr;
int count;//隊列中元素的個數
int capacity;//隊列的容量
};
//構造函數
template<class T>
ArrayQueue<T>::ArrayQueue(int size)
{
count=0;
capacity=size;
arr=new T[capacity];
if(!arr)
{
cout<<"動態內存分配失敗!"<<endl;
}
}
template<class T>
ArrayQueue<T>::ArrayQueue()
{
new (this)ArrayQueue(30);
}
//構造函數
template<class T>
ArrayQueue<T>::~ArrayQueue()
{
count=capacity=0;
if(!arr)
{
delete[] arr;
arr=NULL;
}
}
//返回隊首元素
template<class T>
T ArrayQueue<T>::front()
{
return arr[0];
}
//入隊
template<class T>
bool ArrayQueue<T>::push(T e)
{
//隊列已滿,入隊失敗,返回false
if(count>=capacity)
return false;
arr[count++]=e;
return true;
}
//出隊
template<class T>
bool ArrayQueue<T>::pop()
{
//隊列爲空,出隊失敗,返回false
if(count<0)
return false;
for(int i=0;i<count;i++)
arr[i]=arr[i+1];
count--;
return true;
}
//返回隊列是否爲空
template<class T>
bool ArrayQueue<T>::empty()
{
return count==0;
}
//返回隊列中的元素個數
template<class T>
int ArrayQueue<T>::size()
{
return count;
}
int main()
{
ArrayQueue<int> *queue=new ArrayQueue<int>();
//入隊操作
cout<<"入隊 5 7 4"<<endl;
queue->push(5);
queue->push(7);
queue->push(4);
while(!queue->empty())
{
cout<<"隊列中元素個數爲"<<queue->size()<<endl;
int front=queue->front();
queue->pop();
cout<<"刪除隊首元素"<<front<<endl;
}
if(queue->empty())
cout<<"隊列爲空!"<<endl;
return 0;
}