1、概念。
队列(Queue),队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。
二、基本操作。
1.Append();
2.GetHead();
3.GetTail();
4.Pop();
5.GetSize();
6.IsEmpty();
7.GetItem(int nIndex);
三、示图。
入队:
出队:
四、实现。
1、定义类。
template<typename T>
class Queue
{
public:
Queue();
~Queue();
void Append(T t);
T GetHead();
T GetTail();
void Pop();
int GetSize();
bool IsEmpty();
T GetItem(int nIndex);
private:
T *m_pArr;
int m_nSize;
};
2、关键成员实现。
template<typename T>
Queue<T>::Queue()
:m_nSize(0),
m_pArr(NULL)
{
m_pArr = new T[100];//capacity
}
template<typename T>
Queue<T>::~Queue()
{
if (m_pArr)
{
delete[] m_pArr;
m_pArr = NULL;
}
}
template<typename T>
void Queue<T>::Append(T t)
{
m_pArr[m_nSize++] = t;
}
template<typename T>
T Queue<T>::GetHead()
{
return m_pArr[0];
}
template<typename T>
T Queue<T>::GetTail()
{
int n = m_nSize -1;
if (n<0)
{
return T();
}
else
{
return m_pArr[n];
}
}
template<typename T>
void Queue<T>::Pop()
{
int i = 0;
m_nSize--;
while (i++<m_nSize)
{
m_pArr[i - 1] = m_pArr[i];
}
}
template<typename T>
int Queue<T>::GetSize()
{
return m_nSize;
}
template<typename T>
bool Queue<T>::IsEmpty()
{
return m_nSize == 0;
}
template<typename T>
T Queue<T>::GetItem(int nIndex)
{
T temp;
if (nIndex <0||nIndex >=m_nSize)
{
return temp;
}
return m_pArr[nIndex];
}
3、调用实现。
int main()
{
struct Hunter
{
string name;
int age;
void SetData(const char* strName, int nAge)
{
name = strName;
age = nAge;
}
};
Queue<Hunter> *pQueue = new Queue<Hunter>;
Hunter hunter0;
hunter0.SetData("Gon", 12);
pQueue->Append(hunter0);
hunter0.SetData("Killua", 12);
pQueue->Append(hunter0);
hunter0.SetData("Kula", 17);
pQueue->Append(hunter0);
hunter0.SetData("Leiouli", 19);
pQueue->Append(hunter0);
bool IsEmpty = pQueue->IsEmpty();
int nSize = pQueue->GetSize();
Hunter head = pQueue->GetHead();
Hunter tail = pQueue->GetTail();
pQueue->Pop();
head = pQueue->GetHead();
Hunter temp = pQueue->GetItem(1);
cin.get();
return 0;
}
添加四元素,Pop()之前:
Pop()之后:
五、小结:
(1)进出队列方式"先进先出(FIFO, First-In-First-Out)"。
(2)只允许在队首Delete,在队尾进行Append。
向前辈们学习
入门萌新,浅知拙见,若有斧正,不胜感激。^ - ^