#include <stdio.h>
#include <stdlib.h>
typedef int elemType;
typedef struct Node{
elemType data;
struct Node *next;
}Node,*PtrToNode;
typedef struct Queue{
PtrToNode head;//头指针,下一个结点才是实际数据结点
PtrToNode rear;//尾指针
int len;//队列长度
}Queue,*QueueList;
//初始化
void init(QueueList l){
l->rear=NULL;
l->len=0;
l->head=(PtrToNode)malloc(sizeof(Node));
l->head->next=l->rear;
}
//队列长度
int len(QueueList l){
return l->len;
}
//队列判空
int isEmpty(QueueList l){
return l->head->next==NULL;
}
//入队
int push(QueueList l,elemType e){
Node *temp=(PtrToNode)malloc(sizeof(Node));
temp->data=e;
temp->next=NULL;
l->len+=1;
if (isEmpty(l)){
l->head->next=temp;
l->rear=temp;
return 1;
}
l->rear->next=temp;
l->rear=temp;
return 1;
}
//出队
int pop(QueueList l,elemType *e){
if (isEmpty(l)){
return 0;
}
Node *temp=l->head->next;
*e=temp->data;
l->head->next=temp->next;
free(temp);
temp=NULL;
l->len-=1;
return 1;
}
void display(QueueList l){
Node *p=l->head->next;
while(p){
printf("打印:%d\n",p->data);
p=p->next;
}
}
int main(){
QueueList l=(QueueList)malloc(sizeof(Queue));
init(l);
printf("isEmpty:%d\n",isEmpty(l));
push(l,1);
push(l,2);
push(l,3);
printf("len:%d\n",len(l));
display(l);
elemType e;
printf("出队结果:%d,队头元素:%d\n",pop(l,&e),(int)e);
printf("出队结果:%d,队头元素:%d\n",pop(l,&e),(int)e);
push(l,4);
display(l);
return 0;
}