队列

//2022.9.27 队列
//队列的特点,插入在队尾,删除在队前,先进先出.

#include <stdio.h>
#include <stdlib.h>

//定义单链表节点类型
typedef struct qlink{
int data; //数据域
struct qlink *next;//指针域
}qlink;


//定义链队列的类型
typedef struct linkqueue{
qlink *front;//队头指针
qlink *rear;//队尾指针
}linkq;

linkq q;//定义一个链队列

//初始化链队列
void initqlink(){
q.front=(qlink *)malloc(sizeof(qlink));
if (!q.front)
exit(0);
q.front->next=NULL;
q.rear=q.front;//空队列
}

//入队(插入)
void enqlink(int e){
qlink *p;
p=(qlink *)malloc(sizeof(qlink));
if (!p)
exit(0);
p->data=e;
p->next=NULL;
q.rear->next=p;//连接作用
q.rear=p;//修改队尾指针
}

//出队(删除)
int deqlink(){
qlink *p;
int x;
if(q.rear==q.front){
printf("空队列,不进行删除\n");
exit(0);
}
p=q.front->next;
x=p->data;
q.front->next=p->next;
if(p==q.rear)//如果队尾指针没有,空队列
q.rear=q.front;
free(p);
return x;

}
void main(){
int e,n;
initqlink();
printf("请输入创建的队列的长度:\n");
scanf("%d",&n);
printf("请输入元素:\n");
for(int i=1;i<=n;i++){
scanf("%d",&e);
enqlink(e);
}
printf("返回删除的值:");
while(q.rear!=q.front){
printf("%d ",deqlink());
}
}