C语言关于队列的问题:是关于求队列的长度的,问题很简单,为了大家方便看,我把所有代码都贴出来

Python013

C语言关于队列的问题:是关于求队列的长度的,问题很简单,为了大家方便看,我把所有代码都贴出来,第1张

pq->rear->next

=

pnew这个代码从队列的尾部增加新节点,

然后pq->rear

=

pnew更新队列尾部指针。队列的数据结构形式就是由一个头front指针,一个尾rear指针来表征,items的设计是用空间换时间,涉及队列大小的操作会非常方便。

队列的特征是先进先出,你给出的链式实现,其实就跟一个链表一样,链表的添加删除如果能理解了,队列只是链表的元素增加/删除

按先进先出特点的一种实现。

但对于队列来说,实现方式不是重点,先进先出的性质才是重点,这在实际应用中很多,比如排队叫号。

include<iostream>using namespace std#define MAX_QSIZE 5typedef int ElemTypetypedef struct SqQueue //循环队列结构体定义{ ElemType *baseint frontint rear}void InitQueue(SqQueue *&Q){ Q=(SqQueue *)malloc(MAX_QSIZE*sizeof(SqQueue))Q->rear=Q->front}int EmptyQueue(SqQueue *Q){ if(Q->rear==Q->front) return 0else return 1}void DestroyQueue(SqQueue *Q){ if(Q->base) free(Q->base)Q->base=NULLQ->front=Q->rear}void ClearQueue(SqQueue *Q){ Q->rear=Q->front}int LenghtQueue(SqQueue *Q) //求队列长度函数{ return (Q->front-Q->rear+MAX_QSIZE)%MAX_QSIZE}int EnQueue(SqQueue *&Q,ElemType &e) //入队操作{ if((Q->rear+1)%MAX_QSIZE==Q->front) return 0else Q->base[Q->rear]=eQ->rear=(Q->rear+1)%MAX_QSIZE return 1}int DeQueue(SqQueue *&Q,ElemType &e) //出队操作{ if(Q->rear==Q->front) return 0else e=Q->base[Q->front]cout<<e<<endlQ->front=(Q->front+1)%MAX_QSIZEreturn 1}int main(){ SqQueue *QInitQueue(Q)int a[9]={0,1,2,3,4,5,6,7,8}for(int i=0i<9i++) { EnQueue(Q,a[i])} cout<<LengthQueue(Q)<<endlreturn 0for(i=0i<9i++) { DeQueue(Q,a[i])}}