1).顺序队列要简单点,只实现了链式队列~,注释都很详细,主要实现过程如下:
(1).初始化Queue。分配内存,队首队尾指向同一处,队首数据不予值
(2).入队操作,即将队尾的指向新分配的内存,其它的不变
(3).出队操作,就是将队队首的next指向下一个的下一个,因为下一个要被删除
(4).清空操作,就是一个while(头指针的next),判断有不有节点,有就删!!
2).代码:
template<
typename T>
struct List
{
List<T> *next;
T data;
};
template<
typename T>
struct AudioPacketQueue{
List<T> *front;
List<T> *rear;
};
template<
typename T>
int InitQueue(AudioPacketQueue<T>*Q)
{
Q->front=Q->rear=
new List<T>;
if(!Q->front)
return 0;
Q->front->next=NULL;
return 1;
}
template<
typename T>
int QueuePut(AudioPacketQueue<T> *Q,T pkt)
{
List<T> *pl=
new List<T>;
if(!pl)
return 0;
pl->data= pkt;
pl->next = NULL;
Q->rear->next=pl;
Q->rear=pl;
return 1;
}
template<
typename T>
int QueueOut(AudioPacketQueue<T> *Q,T &data)
{
List<T> *pl;
if(Q->front==Q->rear)
return 0;
pl=Q->front->next;
data=pl->data;
Q->front->next=pl->next;
if(pl==Q->rear)
Q->rear=Q->front;
delete(pl);
return 1;
}
template<
typename T>
int QueueFlush(AudioPacketQueue<T> *Q)
{
if(!Q->front)
return 0;
List<T>* pl=Q->front;
List<T>* nextpl=Q->front->next;
while(pl)
{
nextpl=pl->next;
delete(pl);
Q->front=nextpl;
pl=nextpl;
}
Q->front=Q->rear=NULL;
return 1;
}
template<
typename T>
int QueueEmpty(AudioPacketQueue<T> *Q)
{
if(!Q->front->next||!Q->front)
return 0;
List<T>* nextpl=Q->front->next;
List<T>* nextpl2=NULL;
while(nextpl)
{
nextpl2=nextpl->next;
delete nextpl;
Q->front->next=nextpl2;
nextpl=nextpl2;
if(!nextpl)
{
Q->front->next=NULL;
delete Q->rear;
break;
}
}
Q->rear=Q->front;
return 1;
}
int main(
int argc,
char *argv[])
{
QCoreApplication a(argc, argv);
AudioPacketQueue<QString> Queue;
InitQueue(&Queue);
for(
int i=
0;i<
10;i++)
{
QueuePut(&Queue,QString(
"data-%1").arg(i));
}
for(
int i=
0;i<
8;i++)
{
QString text;
QueueOut(&Queue,text);
qDebug()<<text;
}
qDebug()<<QueueEmpty(&Queue);
qDebug()<<QueueFlush(&Queue);
return a.exec();
}
配张图吧,运行结果
更多文章:http://blog.csdn.net/what951006?viewmode=list powered by: 小乌龟在大乌龟背上~
转载请注明原文地址: https://ju.6miu.com/read-962799.html