链式队列
有头结点,使得front==rear为判空条件
1、创建链式队列
typedef int data_type;
typedef struct link_node{
struct link_node *next;
data_type data;
}link_list;
typedef struct{
link_list *front;
link_list *rear;
}link_queue;
link_queue *create_link_queue(){
link_queue *q=NULL;
q=(link_queue *)malloc(sizeof(link_queue));
link_list *head=(link_list*)malloc(sizeof(link_list));
head->next=NULL;
q->rear=q->front=head;
return q;
}
2、判空
int is_empty(link_queue *q){
return q->front==q->rear;
}
3、入队
void in_queue(link_queue *q,data_type data){
link_list *temp=(link_list*)malloc(sizeof(link_list));
temp->data=data;
temp->next=q->rear->next;
q->rear->next=temp;
q->rear=temp;
}
4、出队
当最后一个元素出队,将rear和front指向同一个地址
data_type out_queue(link_queue *q){
link_list *temp=q->front->next;
data_type data=temp->data;
q->front->next=temp->next;
free(temp);
temp=NULL;
//最后一个元素出队
if(q->front->next==NULL){
q->rear=q->front;
}
return data;
}