队列——循环队列的实现

       代码来自严版数据结构教材。

#include<stdio.h>
#include<stdlib.h>
#include<iostream>
using namespace std;

#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define MAXQSIZE 100
typedef int Status;
typedef int QElemType;
typedef struct {
	QElemType *base;
	int front;
	int rear;
}SqQueue;

Status InitQueue(SqQueue &Q)
{
	Q.base = (QElemType *)malloc(MAXQSIZE * sizeof(QElemType));
	if (!Q.base)
		exit(OVERFLOW);
	Q.rear = Q.front=0;
	return OK;
}

Status CLearQueue(SqQueue &Q)
{
	if (!Q.base)
		exit(OVERFLOW);
	Q.rear = Q.front;
	return OK;
}

Status QueueEmpty(SqQueue Q)
{
	if (Q.rear == Q.front)
		return TRUE;
	else
		return FALSE;
}

int QueueLength(SqQueue Q)
{
	return (Q.rear - Q.front+MAXQSIZE)%MAXQSIZE;
}

Status GetHead(SqQueue Q, QElemType &e)
{
	if (Q.front == Q.rear)
		return ERROR;
	e = Q.base[Q.front];
	return OK;
}

Status EnQueue(SqQueue &Q, QElemType e)
{
	if ((Q.rear+1)%MAXQSIZE==Q.front)
		return ERROR;
	Q.base[Q.rear] = e;
	Q.rear=(Q.rear+1)%MAXQSIZE;
	return OK;
}

Status DeQueue(SqQueue &Q, QElemType &e)
{
	if (Q.front == Q.rear)
		return ERROR;
	e = Q.base[Q.front];
	Q.front = (Q.front + 1) % MAXQSIZE;
	return OK;
}

Status QueueTraverse(SqQueue &Q)
{
	int p;
	if (Q.front == Q.rear)
		return ERROR;
	p = Q.front;
	while (p != Q.rear)
	{
		printf("%d ", Q.base[p]);
		p++;
	}
	printf("\n");
	return OK;
}

void main()
{
	int i, n;
	QElemType k, h, a, f;
	SqQueue Q;
	printf("创建一个空队列!\n");
	InitQueue(Q);
	printf("判断队列是否为空!\n");
	printf("QueueEmpty(Q)=%d\n", QueueEmpty(Q));
	printf("创建队列的元素个数:\n");
	cin >> n;
	printf("输入%d个插入队列的元素的值:\n", n);
	for (i = 0; i < n; i++)
	{
		cin >> k;
		EnQueue(Q, k);
	}
	printf("输出队列元素的值:\n");
	QueueTraverse(Q);
	printf("输入插入队列的元素的值:");
	cin >> h;
	EnQueue(Q, h);
	printf("输出插入一个队列元素后队列元素的值:\n");
	QueueTraverse(Q);
	DeQueue(Q, a);
	printf("输出第1个删除的队头元素的值:%d\n", a);
	DeQueue(Q, a);
	printf("输出第2个删除的队头元素的值:%d\n", a);
	printf("输出两次删除队头元素后队列的元素值:");
	QueueTraverse(Q);
	if (!GetHead(Q, f))
		printf("输出队头元素的值:%d\n", f);
	printf("输出队列元素的个数:%d\n", QueueLength(Q));
	printf("将Q清为空队列!\n");
	CLearQueue(Q);
	printf("输出队列元素的个数:%d\n", QueueLength(Q));
	printf("判断队列是否为空!\n");
	printf("QueueEmpty(Q)=%d\n", QueueEmpty(Q));
	system("pause");
}

猜你喜欢

转载自blog.csdn.net/x_blackbutterfly/article/details/80527767