编辑代码

/*===============算法4.11~算法4.16(100~101页)=======
                        循环队列
- 算法4.11(100页)建立空循环队列
- 算法4.12(100页)循环队列置空
- 算法4.13(100页)循环队列长度
- 算法4.14(100页)循环队列入队
- 算法4.15(101页)循环队列出队
- 算法4.16(101页)取循环队列的队头元素
======================================================*/

#include <stdlib.h>
#include <stdio.h>

#define datatype int

#define maxsize 10

/*===============顺序队列的结构类型定义(99页)=======
======================================================*/
typedef struct {
	datatype  data[maxsize];
	int front;
	int rear;
} SeQueue;

/*===============算法4.11(100页)=======
建立空循环队列
======================================================*/
void InitQueue(SeQueue *&sq) { //建立空循环队列sq
	sq = (SeQueue *)malloc(sizeof(SeQueue));
	sq->front = sq->rear = 0;
}

/*===============算法4.12(100页)=======
循环队列置空
======================================================*/
void SetNull (SeQueue *sq) { //置队列sq为空队
	sq->front = sq->rear = 0;
}

/*===============算法4.13(100页)=======
循环队列长度
======================================================*/
int Length (SeQueue *sq) {
	return (sq->rear - sq->front + maxsize) % maxsize;
}

/*===============算法4.14(100页)=======
循环队列入队
======================================================*/
int EnQueue(SeQueue *sq, datatype x)

// 将新元素x插入队列 *sq 的队尾,入队成功返回1,不成功返回0
{
	if (sq->front == (sq->rear + 1) % maxsize) {
		printf("队列上溢");
		return (0);
	} else {
		sq->rear = (sq->rear + 1) % maxsize;
		sq->data[sq->rear] = x;
		return (1);
	}
}


/*===============算法4.15(101页)=======
循环队列出队
======================================================*/
int DeQueue (SeQueue *sq, datatype &x)

// 通过参数x带回元素值,出队成功返回1,否则返回0
{
	if (sq->front == sq->rear) {
		printf("队列下溢");
		return (0);
	} else {
		sq->front = (sq->front + 1) % maxsize;
		x = sq->data[sq->front];
		return (1);
	}
}

/*===============算法4.16(101页)=======
取循环队列的队头元素
======================================================*/
int GetFront (SeQueue *sq, datatype &x)

// 通过参数x带回元素值,取对头元素成功返回1,否则返回0
{
	if (sq->front == sq->rear) {
		printf("队列下溢");
		return (0);
	} else {
		x = sq->data[(sq->front + 1) % maxsize];
		return (1);
	}
}


int main() {
	int flag;
	SeQueue *sq;
	InitQueue(sq);

	datatype val;
	flag = EnQueue(sq, 1);
	flag = EnQueue(sq, 2);
	flag = EnQueue(sq, 3);

	flag = DeQueue(sq, val);
	printf("出队列的值为%d\n", val);

	flag = DeQueue(sq, val);
	printf("出队列的值为%d\n", val);

	GetFront(sq, val);
	printf("队列的队头元素值为%d\n", val);


	return 0;
}