#include <stdio.h>
#include <stdlib.h>
#define MAX_QUEUE 10
/* キューでデータを保持するための配列 */
static short int Queue[MAX_QUEUE];
/* キューの制御にに必要な変数をグローバル変数で定義 */
/* static で定義したほうが安全 */
/* 各自作成 */
typedef short int* iterator;
static iterator deque_begin = Queue;
static iterator deque_end = Queue;
//配列内データを再配置する関数
void rearrange()
{
iterator ite;
iterator target = Queue;
for(ite=deque_begin; ite!=deque_end; ite++, target++)
{
*target = *ite;
}
deque_begin = Queue;
deque_end = target;
}
/* キューにデータを追加する関数
引数:キューに追加するデータ
返り値:なし */
void enqueue(short int data)
{
//if deque_end is pointing out of array, try rearrange.
if(deque_end == Queue+MAX_QUEUE)
{
if(deque_begin == Queue)
{
fprintf(stderr,"Que is full,\n");
exit(1);
}
rearrange();
}
*deque_end = data;
deque_end++;
}
/* キューからデータを取り出す関数
引数:なし
返り値:キューから取り出したデータ */
short int dequeue()
{
short int ret;
/* キューのデータが空っぽかどうかチェック */
if (deque_begin == deque_end) {
fprintf(stderr, "Queue is empty.\n");
exit(1);
}
ret = *deque_begin;
deque_begin++;
return ret;
}
//---------------------------------------------------------------
// ここまでがdequeue.c
//---------------------------------------------------------------
void showQueue()
{
iterator i;
for(i=deque_begin;i!=deque_end;i++)
{
printf("%5d \n",*i);
}
}
int main()
{
short int i;
for(i=0;i<10;i++)
{
enqueue(i);
}
printf("initial queue \n");
showQueue();
printf("dequeue 3times \n");
for(i=0;i<3;i++)
{
printf("%5d \n", dequeue());
}
printf("after deque \n");
showQueue();
printf("addmore\n");
for(i=1;i<=3;i++)
{
enqueue(i*100);
}
showQueue();
printf("deque 8times \n");
for(i=0;i<8;i++)
{
printf("%5d \n", dequeue());
}
printf("after deque \n");
showQueue();
}