队列是一种先进先出的逻辑结构
代码:

//queue
struct queue_node{
	int value;
	struct queue_node * next; 
};
typedef struct queue_node queue_node;

struct queue{
	queue_node * front;
	queue_node * back;
	int size;
};
typedef struct queue queue;

queue * create_queue(){
	queue * q = (queue *) malloc(sizeof(queue));
	q->size = 0;
	q->front = NULL;q->back = NULL;
	return q;
}

bool empty_queue(queue * q){
	return q->size == 0;
}

void push_queue(queue * q, int value){
	queue_node * qn = (queue_node *)malloc(sizeof(queue_node));
	qn->value = value;
	qn->next = NULL;
	if(empty_queue(q)){
		q->back = q->front = qn;
	}
	else{
		q->back->next = qn , q->back = qn;
	}
	q->size++;
}

int pop_queue(queue * q){
	if(empty_queue(q)){
		printf("Error, Queue is emtpy!\n");
		return 0;
	}
	int value = q->front->value;
	queue_node * qn = q->front;
	q->front = q->front->next;
	free(qn);
	q->size --;
	return value; 
}


int main(){
//	stack *s;
//	s = create_stack();
//	push_stack(s,20);
//	push_stack(s,20);
//	push_stack(s,20);
//	int v = pop_stack(s);
//	printf("pop a element of stack s:%i\n",v);
//	printf("the size of stack s is:%i",s->size);
	queue * q = create_queue();
	push_queue(q,20);
	push_queue(q,10);
	push_queue(q,50);
	push_queue(q,60);
	push_queue(q,100);
	printf("the size of queue is :%d\n",q->size);
	while(!empty_queue(q)){
		printf("%d\t",pop_queue(q));
	}
	return 0;
}

代码难点理解:
queue push操作
q->back->next = qn , q->back = qn;这行代码指的是队列尾指针指向新插入的节点