带头结点的链队列front指向表头结点,rear指向最后一个结点
#includeusing namespace std; //结点 typedef struct LinkNode{ int data; struct LinkNode *next; }LinkNode; //链队列 typedef struct LinkQueue{ LinkNode *front,*rear; }; //初始化 void InitQueue(LinkQueue &Q){ Q.front = Q.rear = new LinkNode; //给链队列创建结点 Q.front->next = NULL; } //判空 bool IsEmpty(LinkQueue Q){ if(Q.front==Q.rear) return true; } //入队 bool EnQueue(LinkQueue &Q,int x){ LinkNode *s = new LinkNode; //创建新结点 s->data = x; s->next = NULL; Q.rear->next = s; //新结点插入到rear之后 Q.rear = s; //修改表尾指针 } //出队 bool DeQueue(LinkQueue &Q,int &x){ if(Q.front==Q.rear) //判空 return false; LinkNode *p = Q.front->next; x = p->data; Q.front->next = p->next; if(Q.rear==p){ //如果出队的是最后一个元素,将链队列置空 Q.rear = Q.front; } delete p; return true; } int main(){ LinkQueue Q; InitQueue(Q); IsEmpty(Q); EnQueue(Q,2); EnQueue(Q,3); int x; DeQueue(Q,x); cout << x; return 0; }



