C语言_数据结构_队列(循环队列)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/chenyuk1/article/details/83478407
#include <iostream>
#include <algorithm>
using namespace std;
typedef int  Status;

#define QueueElemType int 
#define MAX_QUEUE_SIZE 10
#define QUEUE_INCREMNET 5
typedef struct { //循环队列
	QueueElemType *base;
	int front;  //队头
	int rear;	//队尾
}SqQueue;

Status InitQueue(SqQueue &Q) {
	Q.base = (QueueElemType*) new QueueElemType[MAX_QUEUE_SIZE];
	if (Q.base == NULL) {
		cout << "初始化成功\n";
		return 0;
	}
	Q.front = Q.rear = 0;
	return 1;
}

Status QueueEmpty(SqQueue &Q) {
	if (Q.front == Q.rear)
		return 1;
	else
		return 0;
}
int QueueLength(SqQueue &Q) {
	return (Q.rear - Q.front + MAX_QUEUE_SIZE) % MAX_QUEUE_SIZE;
}
Status EnQueue(SqQueue &Q, QueueElemType &e) {
	if ((Q.rear + 1) % MAX_QUEUE_SIZE == Q.front) {
		cout << "队列满\n";
		return 0;
	}
	Q.base[Q.rear] = e;
	Q.rear = (Q.rear + 1) % MAX_QUEUE_SIZE;
	return 1;
}

Status GetHead(SqQueue &Q, QueueElemType &e) {
	if (Q.front == Q.rear) {
		cout << "队列空\n";
		return 0;
	}
	e = Q.base[Q.front];
	return 1;
}

Status DeQueue(SqQueue &Q, QueueElemType &e) {
	if (Q.front == Q.rear) {
		cout << "队列为空";
		return 0;
	}
	e = Q.base[Q.front];
	Q.front = (Q.front + 1) % MAX_QUEUE_SIZE;
	return 1;
}

Status DestroyQueue(SqQueue &Q) {
	delete[]Q.base;
	return 1;
}

int queuemain() {
	SqQueue qu;
	InitQueue(qu);
	if (QueueEmpty(qu))
		cout << "kong\n";
	for (int i = 0; i != 7; i++) {
		int tmp=i;
		EnQueue(qu, tmp);
	}

	for (int i = 0; i != 2; i++) {
		int tmp;
		DeQueue(qu, tmp);
		cout << tmp << "______";
		cout << endl;
	}

	for (int i = 0; i != 7; i++) {
		int tmp = i;
		EnQueue(qu, tmp);
	}

	cout << QueueLength(qu) << endl;

	for (int i = 0; i != 10; i++) {
		int tmp;
		DeQueue(qu, tmp);
		cout << tmp << ' ';
	}
	cout << endl;
	
	return 1;
}

猜你喜欢

转载自blog.csdn.net/chenyuk1/article/details/83478407
今日推荐