循环队列
①定义
#define Maxsize 50
typedef struct{
Elempty data[Maxsize];
int *front , *rear;
}Squeue;
②初始化
void InitQueue (Squeue &Q){
Q.front=Q.rear=0; //初始化队头队尾指针
}
③ 判队空
bool IsEmpty(Squeue Q){
if(Q.front = =Q.rear) //判队
return true;
else
return false;
}
④入队
bool EnQueue(Squeue &Q,Elempty x){
if((Q.rear+1)%Maxsize == Q.front) //判队
return false;
Q.data[Q.rear]=x;
Q.rear=(Q.rear + 1)%Maxsize;//队尾指针+1取模
return true;
}
⑤出队
bool DeQueue (Squeue &Q ,Elempty &x){
if(Q.front==Q.rear) //判队
retrue false;
x=Q.data[Q.front];
Q.front=(Q.front+1)%Maxsize;//队头指针+1取模
return true;
}
链式队列
疯了手机刚打的没了 就是该死的输入法点出去了 然后回来没了
我就说一下难懂的出队吧其他自行百度吧
bool DeQueue(LinkNode &Q, Elempty &x){
if (Q.front= =Q.rear)
ruturn false;
LinkNode *p =Q.front->next; ①
//首先把头指针指向的位置赋给p
x=p->data;
//把p指向的值给x让她传回去
Q.front->next=p->next; ②
/这里可能是很多人不理解的地方
把p所指向后一个的地址赋给头指针所指向的下一个/
if(Q.rear==p)
Q.rear=Q.front;
free(q);
retrun true;
}