您的位置:首页 > 理论基础 > 数据结构算法

数据结构概述<4>队列

2014-12-07 14:49 330 查看
队列也是一种比较常用的数据结构,和栈不同的地方在于它是先进先出的,就像我们平时的排队一样。

由于队列和栈非常相似,就不详细讲述概念了,可以参考上一篇博客数据结构概述<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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: