c语言编程之循环队列

时间:2023-03-09 03:55:50
c语言编程之循环队列

利用链表实现的循环队列,完成了队列的入队和出队,对于队空和队满用了一个flag进行标记。入队flag++,出队flag--

   #include"stdio.h"

   typedef int element;

   typedef struct Node{
struct Node *next;
element data;
}*pNode; typedef struct QNode{
pNode front,rear;
element flag;
}*Linknode; //init a empty queue
element Init_queue(Linknode *pLinknode)
{
Linknode P;
P=*pLinknode;
P->front=P->rear=(pNode)malloc(sizeof(struct Node));
P->front->next=NULL;
P->rear->next=P->front; // make loop queue font linked rear,in usuall queue this is P->rear->next=NULL;make a change become
//Loop queue;
P->flag=;
} //add a data to queue rear
element Add_queue(Linknode *pLinknode,int num)
{
Linknode P;
P=*pLinknode;
pNode s=(pNode)malloc(sizeof(struct Node));
s->data=num;
s->next=P->front; //in this position we can see the new add memory s is point to front,in usuall queue we can see s->next=NULL;
           P->rear->next=s;
P->rear=s;
++P->flag;
printf("add data:%d add flag:%d\n",P->rear->data,P->flag);
}
{
if((*pLinknode)->flag==)
{
printf("queue is empty\n");
return ;
}
//if(((*pLinknode)->front)==((*pLinknode)->rear))
// {
// printf("queue is empty!!");
// return 0;
// }
Linknode P;
pNode k;
P=*pLinknode;
k=P->front->next;
P->front->next=k->next;
printf("delet data:%d\n",k->data);
//--P->flag;
free(k);
printf("delete flag:%d\n",P->flag);
--P->flag;
return ;
} element Print_queue(Linknode pLinknode)
{
pNode p;
p=pLinknode->front;
while(p!=pLinknode->rear&&pLinknode->flag) //it is importand,because in loop queue fornt==rear can means empty or full,it is a //loop,we can't determin this loop queue is empty by using front==rear,must add num as flag;
                 {
p=p->next;
printf("data:%d\n",p->data);
}
return ;
}
element main()
{
Linknode pQnode;
pQnode=(Linknode)malloc(sizeof(struct QNode));
Init_queue(&pQnode);
Add_queue(&pQnode,);
Add_queue(&pQnode,);
Add_queue(&pQnode,);
Add_queue(&pQnode,);
Add_queue(&pQnode,);
Add_queue(&pQnode,);
Print_queue(pQnode);
Delet_queue(&pQnode);
Delet_queue(&pQnode);
Delet_queue(&pQnode);
Delet_queue(&pQnode);
Delet_queue(&pQnode);
Delet_queue(&pQnode);
Delet_queue(&pQnode);
Print_queue(pQnode);
return ;
}