链队列(C语言实现)

/*链队列*/
#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;
}

结果:

猜你喜欢

转载自blog.csdn.net/Carl_0/article/details/88131856