循环队列基本操作

/*

 * 循环队列基本操作。

 * 少用一个元素空间,约定以“队列头指针在队列尾指针的下一个位置”作为队列满的标志。

 * “队列头指针等于队列尾指针”作为队列空的标志。

 */

#include <stdio.h>

#include <stdbool.h>

#include <malloc.h>



#define MAXQSIZE 100

typedef char ElemType;

typedef struct

{

	ElemType *base;

	int front;

	int rear;

} Queue;



bool InitQueue(Queue *queue);

int QueueLength(Queue queue);

bool EnQueue(Queue *queue, ElemType e);

bool DeQueue(Queue *queue, ElemType *e);



int main()

{

	Queue queue;

	ElemType elem[26],temp;

	int i,length;



	InitQueue(&queue);

	for (i = 0; i < 26; i++)

	{

		elem[i] = 'A'+i;

		EnQueue(&queue, elem[i]);

	}

	length = QueueLength(queue);

	printf("length:%d\n", length);

	for (i = 0; i < length; i++)

	{

		DeQueue(&queue, &temp);

		putchar(temp);

	}

	return 0;

}



//构造空队列。

bool InitQueue(Queue *queue)

{

	queue->base = (ElemType*)malloc(sizeof(ElemType)*MAXQSIZE);

	if (!queue->base) return false;

	queue->front = queue->rear = 0;

	return true;

}



//求队列长度。

int QueueLength(Queue queue)

{

	return (queue.rear - queue.front + MAXQSIZE) % MAXQSIZE;

}



//插入元素e为队列的队尾元素。

bool EnQueue(Queue *queue, ElemType e)

{

	if ((queue->rear + 1) % MAXQSIZE == queue->front)	//队列满

		return false;

	queue->base[queue->rear] = e;

	queue->rear = (queue->rear + 1) % MAXQSIZE;

	return true;

}



//删除队列的队头元素,用e返回其值。

bool DeQueue(Queue *queue, ElemType *e)

{

	if (queue->front == queue->rear)	//队列空

		return false;

	*e = queue->base[queue->front];

	queue->front = (queue->front + 1) % MAXQSIZE;

	return true;

}

你可能感兴趣的:(基本操作)