数组手工实现队列

缘起

我们写算法的时候一般使用的队列都是 c++的 stl的 queue. 但其实使用数组也是很方便的可以实现队列的

分析

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#include "stdafx.h"
#include <iostream>
#pragma warning(disable:4996)
#define LOCAL
using namespace std;

const int MAX_NUM = 105; // 队列中元素最多105个

struct Queue
{
int q[MAX_NUM], head, tail; // 数据区 、队首指针, 队尾指针

Queue():head(0),tail(0){}

void push(int a) // 入队
{
q[tail++] = a;
tail %= MAX_NUM; // 这里取余是为了能更加充分的利用队列, 不要q[0,...,104] 就只有q[102,104]存放了数据,换言之, head与tail每次++操作都要取模
}

void pop() // 出队
{
head++;
head %= MAX_NUM;
}

int front() // 窥队首, 其实确切讲,q[head,tail) 就是存放数据的
{
return q[head];
}

bool empty()
{
return head == tail;
}
};

int main()
{
#ifdef LOCAL
freopen("d:\\data.in","r",stdin);
#endif
Queue q;
q.push(1);
q.push(2);
q.push(3);
while(!q.empty())
{
printf("%d\n",q.front());
q.pop();
}
return 0;
}