数据结构之队列(数组队列)

# include 
# include 

#define Array_length 8

typedef struct Queue
{
	int * pBase;
	int front;
	int rear;
}QUEUE,* PQUEUE;

void init(PQUEUE);		//初始化队列
bool in(PQUEUE,int);		//入队
bool out(PQUEUE,int *);		//出队
bool empty(PQUEUE);		//是否空队列
bool full(PQUEUE);		//是否队列满
void traverse(PQUEUE);		//遍历输出队列

int main()
{
	QUEUE q;
	int val;

	init(&q);

	in(&q,1);
	in(&q,2);
	in(&q,3);
	in(&q,4);
	in(&q,5);
	in(&q,6);
	in(&q,7);
	in(&q,8);

	traverse(&q);

	if (out(&q,&val))
		printf("出队成功,出队数据为:%d\n",val);

	if (out(&q,&val))
		printf("出队成功,出队数据为:%d\n",val);

	if (out(&q,&val))
		printf("出队成功,出队数据为:%d\n",val);

	traverse(&q);

	return 0;
}

void init(PQUEUE pQ)
{
	pQ->pBase=(int*)malloc(sizeof(int)*Array_length);
	pQ->front=0;
	pQ->rear=0;
}

bool full(PQUEUE pQ)
{
	if ( (pQ->rear+1) % Array_length == pQ->front )
		return true;
	return false;
}

bool empty(PQUEUE pQ)
{
	if (pQ->front==pQ->rear)
		return true;
	return false;
}

bool in(PQUEUE pQ,int val)
{
	if (full(pQ))
		return false;
	pQ->pBase[pQ->rear]=val;
	pQ->rear=(pQ->rear+1) % Array_length;
	return true;
}

bool out(PQUEUE pQ,int * pVal)
{
	if (empty(pQ))
		return false;
	*pVal=pQ->pBase[pQ->front];
	pQ->front=(pQ->front+1) % Array_length;
	return true;
}

void traverse(PQUEUE pQ)
{
	int p=pQ->front;
	while((p)%Array_length!=pQ->rear)
	{
		printf("%d ",pQ->pBase[p]);
		p+=1;
	}
	printf("\n");
}

你可能感兴趣的:(数据结构)