队列也是一种比较常用的数据结构,和栈不同的地方在于它是先进先出的,就像我们平时的排队一样。
由于队列和栈非常相似,就不详细讲述概念了,可以参考上一篇博客数据结构概述<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;
}原文:http://blog.csdn.net/bing_bing304/article/details/41787561