#include<stdio.h> #include<stdlib.h> //定义 typedef struct LinkNode{ int data; struct LinkNode *next; }LinkNode; typedef struct{ LinkNode *rear,*front; }LinkQueue; //初始化——带头结点 void InitQueue(LinkQueue &Q){ Q.front=Q.rear=(LinkNode *)malloc(sizeof(LinkNode)); Q.front->next=NULL; } //初始化——不带头结点 void InitQueue_(LinkQueue &Q){ Q.front=NULL; Q.rear=NULL; } //入队——带头结点 bool EnQueue(LinkQueue &Q,int x){ LinkNode *s=(LinkNode *)malloc(sizeof(LinkNode)); //给新节点分配内存 s->data=x; s->next=NULL; Q.rear->next=s; //新节点插入到尾指针后面 Q.rear=s; //尾指针指向新插入的结点 return true; } //入队——不带头结点 bool EnQueue_(LinkQueue &Q,int x){ LinkNode *s=(LinkNode *)malloc(sizeof(LinkNode)); //给新节点分配内存 s->data=x; s->next=NULL; if(Q.front==NULL){ Q.front=s; Q.rear=s; } else{ Q.rear->next=s; Q.rear=s; } return true; } //出队——带头结点 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; } free(p); return true; } //出队——不带头结点 bool DeQueue_(LinkQueue &Q,int &x){ if(Q.front==NULL) //首先判断队空 return false; LinkNode *p=Q.front; //不带头结点时头指针指向队头元素 x=p->data; Q.front=p->next; if(Q.rear==p){ //这是最后一个结点 Q.rear=NULL; Q.front=NULL; } free(p); return true; } //队列的链式存储一般不会出现队满的情况,除非内存不足 int main(){ }
标签:存储,队列,结点,next,链式,front,NULL,LinkNode,rear From: https://www.cnblogs.com/zyj3955/p/17674817.html