#include <stdio.h>
#include <stdlib.h>
#define ElemType int
typedef struct LinkNode{
ElemType data;
struct LinkNode *next;
}LinkNode;
typedef struct LinkQueue{
LinkNode *front,*rear;
}LinkQueue;
void InitQueue(LinkQueue *q){//初始化队列
q->front=q->rear=(LinkNode*)malloc(sizeof(LinkNode));
q->front->next=NULL;
}
void IsEmpty(LinkQueue q){
if(q.front==NULL && q.rear==NULL){ //判断队列是否为空
printf("当前队列为空!");
}
}
void EnQueue(LinkQueue *q){ //入队
ElemType x;
printf("请依次输入你要入队的元素:");
scanf("%d",&x);
while(x!=9999){
LinkNode *s=(LinkNode*)malloc(sizeof(LinkNode));
s->data=x;
s->next=NULL;
q->rear->next=s;
q->rear=s;
scanf("%d",&x);
}
}
void PrintQueue_En(LinkQueue q ){ //从队头输出入队后的元素
LinkNode *s;
printf("入队后自队首向队尾输出栈的所有元素:");
for(s=q.front->next;s;s=s->next){
printf("%5d",s->data);
}
printf("\n");
}
void DeQueue(LinkQueue *q,int i){ //出队
ElemType x;
printf("您出队的元素自队首向队尾为:");
for(int j=0;j<i;j++){
LinkNode *p=q->front->next;
x=p->data;
printf("%5d",x);
q->front->next=p->next;
if(q->rear==p)
q->rear=q->front; //若原队列只有一个结点,删除后变空
free(p);
}
printf("\n");
}
void PrintQueue_De(LinkQueue q ){ //从队头输出出队后的元素
LinkNode *s;
printf("出队后自队首向队尾输出栈的所有元素:");
for(s=q.front->next;s;s=s->next){
printf("%5d",s->data);
}
printf("\n");
}
int main(){
LinkQueue q;
InitQueue(&q);
IsEmpty(q);
EnQueue(&q);
PrintQueue_En(q);
DeQueue(&q,3);
PrintQueue_De(q);
}