//链式队列 一般设计成带头节点的 操作比较方便
typedef struct node
{
int data;
struct node *next;
}LinkNode;
typedef struct queue
{
LinkNode *front; //队列的头
LinkNode *rear; //队列的尾
}LinkQueue;
//链式队列的基本操作
//队列的初始化
void InitQueue(LinkQueue *Q)
{
Q->front=(LinkNode*)malloc(sizeof(LinkNode));
Q->front->next=NULL;
// Q->rear=NULL;
}
//判队列是否为空
bool IsEmpty(LinkQueue Q)
{
if(Q.front->next==NULL)
return true;
else
return false;
}
//入队列
void QueueAppend(LinkQueue *Q,int value)
{
LinkNode *p=(LinkNode*)malloc(sizeof(LinkNode));
p->next=NULL;
p->data=value;
Q->rear->next=p; //插入链尾
Q->rear=p;
}
//出队列
void QueueDelete(LinkQueue Q,int *x)
{
if(Q.front->next==NULL)//说明队列为空
return ;
LinkNode *p=Q.front->next;//p为队头第一个节点
*x=(p->data);
if(p==Q.rear) //当队列只有一个节点
{
Q.rear->next=NULL;
free(p);
p=NULL;
return ;
}
Q.front->next=p->next;
free(p);
p=NULL;
}
void print(LinkQueue Q) //打印队列中的元素
{
LinkNode *p=Q.front->next;
while(p)
{
cout<<p->data<<" ";
p=p->next;
}
}
//测试
void main()
{
LinkQueue Q;
InitQueue(&Q);
for(int i=1;i<2;i++)
{
QueueAppend(&Q,i);
}
int x;
print(Q);
QueueDelete(Q,&x);
print(Q);
}