队列是一种先进先出的逻辑结构
代码:
//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;这行代码指的是队列尾指针指向新插入的节点