[ create a new paste ] login | about

Link: http://codepad.org/o9fmgNBz    [ raw code | output | fork ]

C, pasted on Nov 24:
#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();
}
	


Output:
initial queue 
    0 
    1 
    2 
    3 
    4 
    5 
    6 
    7 
    8 
    9 
dequeue 3times 
    0 
    1 
    2 
after deque 
    3 
    4 
    5 
    6 
    7 
    8 
    9 
addmore
    3 
    4 
    5 
    6 
    7 
    8 
    9 
  100 
  200 
  300 
deque 8times 
    3 
    4 
    5 
    6 
    7 
    8 
    9 
  100 
after deque 
  200 
  300 


Create a new paste based on this one


Comments: