C言語のキュー

C言語を取得するためにひたすらAlgorithmプログラムを書いているので少し紹介します。
まずキューとはFIFO(first in first out)のデータ構造を持ったものです。
いわゆる最初に入ったデータが最初にでるてこと。

C言語でのキューの表現にはリストを用いたものと配列を用いたものがあります。
簡単なサンプル↓
(配列表現)


#define max 100
static int queue[max+1],head,tail;
void init(){
tail = 0;
head = 0;
}
void put(int v){
queue[tail++] = v;
if(tail > max) tail=0;
}
int get(){
int t = queue[head++];
if(head>max) head = 0;
return t;
}
int queueempty(){
return (head == tail);
}

(リスト表現)


truct node {
int key;
struct node *next;
};
static struct node *head,*tail,*z,*t;

void init(void){
head = (struct node *)malloc(sizeof *head);
tail = (struct node *)malloc(sizeof *tail);
z= (struct node *)malloc(sizeof *z);
//先頭ポインタ
head->next=tail;
head->key=0;
//最後尾ポインタ
tail->next=z;
tail->key=0;
//終点ポインタ
z->next=z;
}
//先頭から挿入する
void put(int v){
t=(struct node *)malloc(sizeof *t);
t->key=v;
t->next=head->next;
head->next=t;
}
//最後から値を得る
int get(void){
int x;
//最後尾前までnextポインタを進める
while(t->next!=tail){
t=t->next;
}
//getする値を得る
x=t->key;
//tailを削除
free(tail);
//最後尾前をtailに変える
t->next=z;
tail=t;
return x;
}

比べればわかるけど、配列のほうが簡易的に書くことができますが上限が定数になります。
一方リストで表現すれば上限は可変となります。