循環隊列--數組實現

<pre name="code" class="cpp"># include <stdio.h>
# include <malloc.h>
# define len 6												//隊列長度 

typedef struct QUENE										
{
	int * pbase;												//數據域 
	int front;												//頭指針 
	int rear;												//尾指針 
}Quene,* quene;

void init_quene(quene que);									//建立隊列 
bool empty_quene(quene que);								//判斷是否爲空 
bool full_quene(quene que);									//判斷釋放滿溢 
bool on_quene(quene que,int val);							//入隊 
bool out_quene(quene que,int *val);							//出隊 
void traverse_quene(quene que);								//遍歷輸出 

int main (void)
{
	int val; 
	quene que;
	que = (quene)malloc(sizeof(Quene));						//爲指針變量que分配空間 
	init_quene(que);
	on_quene(que,1);
	on_quene(que,2);
	on_quene(que,3);
	on_quene(que,4);
	traverse_quene(que);
	out_quene(que,&val);
	printf ("%d\n",val);
	traverse_quene(que);
	printf ("%d\n",val);
	
	return 0;
}

void init_quene(quene que)
{
	que->pbase = (int *)malloc(sizeof(int)*len);				//爲循環隊列分配空間 
	que->front = 0;
	que->rear = 0;
}

bool empty_quene(quene que)
{
	if (que->front == que->rear)
	return true;
	else
	return false;
}

bool full_quene(quene que)
{
	if (que->front == (que->rear+1)%len)
	return true;
	else
	return false;
}

bool on_quene(quene que,int val)
{
	if (full_quene(que))
	return false;
	else
	{
		que->pbase[que->rear] = val;
		que->rear = (que->rear+1)%len;					//尾指針指向下移位置 
		return true;
	}
}

bool out_quene(quene que,int *val)
{
	if (empty_quene(que))
	return false;
	else
	{
		*val = que->pbase[que->front];
		que->front = (que->front+1)%len;				//頭指針指向下一位置 
		return true;
	}
}

void traverse_quene(quene que)
{
	int i;
	i = que->front;
	while(i != que->rear)
	{
		printf ("%d ",que->pbase[i]);					//輸出隊列 
		i = (i+1)%len;
	}
	printf ("\n");
}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章