正在加载图片...
p=(CiLNode*)malloc(sizeof(CILNode)); p->data=x p>next=Q→>next;∥直接把p加在Q的后面 Q Q=p,∥修改尾指针 Status De CiQueue( CiQueue&Q, int x)从循环链表表示的队列Q头部删除元素ⅹ ifQ==Q→>next) return INFEASIBLE/队列已空 p=Q->next->next xp->data; Q->next->next=p->ne free(p) return OK 3//DeCiQueue Status EnCyQueue( qUeue& Q, int x)/带tag域的循环队列入队算法 if(Qfront= Q reard&&Qtag=1)/tag域的值为0表示"空",1表示"满" return OVERFLOW Q basel. rear Q rear(Q rear+l%MAXSIZE if(Q front= EQ rear))Qtag=1;/队列满 M//EnCyQueue Status DeCyQueuer( y Queue&Qnt&x》∥带tag域的循环队列出队算法 if(Q front==Q rear&&Q tag=0)return INFEASIBLE, Q front=(Q front+1%MAXSIZE xQ. base[Q front ]; if(Q front= Qrear)Qtag=1;∥队列空 return OK DeCyQueue 分析:当循环队列容量较小而队列中每个元素占的空间较多时,此种表示方法可以 节约较多的存储空间,较有价值 3.30 Status EnCyQueue( CyQueue&Q,ntxy/带 length域的循环队列入队算法 if(Q length==MAXSIZE)return OVERFLOW;{ p=(CiLNode*)malloc(sizeof(CiLNode)); p->data=x; p->next=Q->next; //直接把 p 加在 Q 的后面 Q->next=p; Q=p; //修改尾指针 } Status DeCiQueue(CiQueue &Q,int x)//从循环链表表示的队列 Q 头部删除元素 x { if(Q==Q->next) return INFEASIBLE; //队列已空 p=Q->next->next; x=p->data; Q->next->next=p->next; free(p); return OK; }//DeCiQueue 3.29 Status EnCyQueue(CyQueue &Q,int x)//带 tag 域的循环队列入队算法 { if(Q.front==Q.rear&&Q.tag==1) //tag 域的值为 0 表示"空",1 表示"满" return OVERFLOW; Q.base[Q.rear]=x; Q.rear=(Q.rear+1)%MAXSIZE; if(Q.front==Q.rear) Q.tag=1; //队列满 }//EnCyQueue Status DeCyQueue(CyQueue &Q,int &x)//带 tag 域的循环队列出队算法 { if(Q.front==Q.rear&&Q.tag==0) return INFEASIBLE; Q.front=(Q.front+1)%MAXSIZE; x=Q.base[Q.front]; if(Q.front==Q.rear) Q.tag=1; //队列空 return OK; }//DeCyQueue 分析:当循环队列容量较小而队列中每个元素占的空间较多时,此种表示方法可以 节约较多的存储空间,较有价值. 3.30 Status EnCyQueue(CyQueue &Q,int x)//带 length 域的循环队列入队算法 { if(Q.length==MAXSIZE) return OVERFLOW;
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有