首页 > 代码库 > 数据结构概述<4>队列

数据结构概述<4>队列

队列也是一种比较常用的数据结构,和栈不同的地方在于它是先进先出的,就像我们平时的排队一样。


由于队列和栈非常相似,就不详细讲述概念了,可以参考上一篇博客数据结构概述<3>栈

和栈一样,在这里直接给出队列的接口(queue.h),以及接口的数组实现(queue1.c)和链表实现(queue2.c)。分别如下:

//queue.h
void queue_init(int);
int queue_empty();
void queue_put(int);
int queue_get();

//queue1.c

#include <stdlib.h>
#include <stdio.h>

static int *q;
static int N,head,tail;

void queue_init(int maxN)
{
	q = malloc((maxN + 1) * sizeof(int));
	N = maxN + 1;
	head = N;
	tail = 0;
}
int queue_empty()
{
	return head % N == tail;
}
void queue_put(int item)
{
	if (tail == head % N) {
		printf("error:overflow\n");
	}
	q[tail++] = item;
	tail = tail % N;
}
int queue_get()
{
	head = head % N;
	return q[head++];
}

//queue2.c
#include <stdlib.h>

typedef struct queuenode* link;
struct queuenode {
	int item;
	link next;
};
static link head,tail;

link NEW(int item,link next)
{
	link x = malloc(sizeof *x);
	x->item = item;
	x->next = next;
	return x;
}
void queue_init(int maxN)
{
	head = NULL;
}
int queue_empty()
{
	return head == NULL;
}
void queue_put(int item)
{
	if (head == NULL) {
		head = (tail = NEW(item,head));
		return;
	}
	tail->next = NEW(item,tail->next);
	tail = tail->next;
}
int queue_get()
{
	int item = head->item;
	link t = head->next;
	free(head);
	head = t;
	return item;
}


数据结构概述<4>队列