/*链队列*/
#include <stdio.h>
#include <stdlib.h>
#define MAX_QUEUE_SIZE 10
typedef struct queue_node{
int data;
struct quenu_node *next;
}node, *queue;
typedef struct queue_t{
queue f;
queue r;
}queue_link;
int
queue_init(queue_link *Q)
{
node *q;
q = malloc(sizeof(node));
if( q == NULL ){
printf("queue init failed\n");
return -1;
}
q->data = -1;
q->next = NULL;
Q->f = Q->r = q;
return 0;
}
int
queue_en(queue_link *Q, int value)
{
node *q;
q = (node *)malloc(sizeof(node));
if( q == NULL ){
printf("queue add node failed\n");
return -1;
}
q->data = value;
q->next = NULL;
Q->r->next = (struct quenu_node *)q;//更新队尾节点
Q->r = q;//更新队尾指针,用于判断
return 0;
}
int
queue_d(queue_link *Q)
{
int value;
node *p;
if( Q->f == Q->r )
return -1;
p = (node *)Q->f->next;//取得对头节点
value = p->data;
Q->f->next = p->next;//更新对头节点
//必须要有这一句,不然会出现段错误
if( p == Q->r )
Q->f = Q->r;
return value;
}
int
main(void)
{
int i, value;
queue_link Q;
queue_init(&Q);
for(i = 0; i < MAX_QUEUE_SIZE; i++){
queue_en(&Q, i);
value = queue_d(&Q);
printf("%d ",value);
}
printf("\n");
return 0;
}
结果: