顺序队列(循环)

对循环队列的操作
void initQueue(SeqQueue *q);//栈的初始化
void clearQueue(SeqQueue *q);//清除队中所有的元素
bool queueEmpty(SeqQueue *q);//判断队是否为空
bool queueFull(SeqQueue *q);//判断是否队满
int getQueue(SeqQueue *q,DataType *e);//获取队头元素
int deQueue(SeqQueue *q,DataType *e);//出队
int enQueue(SeqQueue *q,DataType e);//在队中添加一个元素
int queueLength(SeqQueue *s);//求队的长度

队列的存储结构

typedef struct{
	DataType data[QUEUESIZE];
	int front;//队头指针 
	int rear;//队尾指针 
}SeqQueue;

void initQueue(SeqQueue *q);//栈的初始化

void initQueue(SeqQueue *q)//栈的初始化 
{
	q->front = 0;
	q->rear = 0;
}

void clearQueue(SeqQueue *q);//清除队中所有的元素

void clearQueue(SeqQueue *q)//清除队中所有的元素
{
	q->front = 0;
	q->rear = 0;
}

bool queueEmpty(SeqQueue *q);//判断队是否为空

bool queueEmpty(SeqQueue *q)//判断队是否为空
{
	return q->front == q->rear;
}

bool queueFull(SeqQueue *q);//判断是否队满

bool queueFull(SeqQueue *q)//判断是否队满
{
	return q->front == (q->rear+1)%QUEUESIZE;
}

int getQueue(SeqQueue *q,DataType *e);//获取队头元素

int getQueue(SeqQueue *q,DataType *e)//获取队头元素
{
	if(!queueEmpty(q))
	*e = q->data[q->front];
}

int deQueue(SeqQueue *q,DataType *e);//出队

int deQueue(SeqQueue *q,DataType *e)//出队
{
	if(!queueEmpty(q)){
		*e = q->data[q->front];
		q->front = (q->front+1)%QUEUESIZE;
	}
}

int enQueue(SeqQueue *q,DataType e);//在队中添加一个元素

int enQueue(SeqQueue *q,DataType e)//在队中添加一个元素
{
	if(!queueFull(q)){
		q->data[q->rear] = e;
		q->rear = (q->rear+1)%QUEUESIZE;
	} 
}

int queueLength(SeqQueue *s);//求队的长度,有公式

int queueLength(SeqQueue *q)//求队的长度
{
	return (q->rear-q->front+QUEUESIZE)%QUEUESIZE;
}
#include <bits/stdc++.h>
#define QUEUESIZE 100
typedef int DataType;
typedef struct{
	DataType data[QUEUESIZE];
	int front;//队头指针 
	int rear;//队尾指针 
}SeqQueue;

void initQueue(SeqQueue *q);//栈的初始化 
void clearQueue(SeqQueue *q);//清除队中所有的元素 
bool queueEmpty(SeqQueue *q);//判断队是否为空 
bool queueFull(SeqQueue *q);//判断是否队满
int getQueue(SeqQueue *q,DataType *e);//获取队头元素 
int deQueue(SeqQueue *q,DataType *e);//出队
int enQueue(SeqQueue *q,DataType e);//在队中添加一个元素
int queueLength(SeqQueue *s);//求队的长度 

int main()
{
	SeqQueue sq;
	initQueue(&sq);
	for(int i = 0;i < 5;i++){
		enQueue(&sq,i);
	}
	int len = queueLength(&sq);
	printf("%d\n",len); 
	if(queueEmpty(&sq)){
		printf("队列为空");
	}else {
		for(int i = 0;i < 4;i++){
			int n;
			deQueue(&sq,&n);
			printf("%d\n",n);
		}
	}
	clearQueue(&sq);
	return 0;
}

int queueLength(SeqQueue *q)//求队的长度
{
	return (q->rear-q->front+QUEUESIZE)%QUEUESIZE;
} 
int enQueue(SeqQueue *q,DataType e)//在队中添加一个元素
{
	if(!queueFull(q)){
		q->data[q->rear] = e;
		q->rear = (q->rear+1)%QUEUESIZE;
	} 
}
int deQueue(SeqQueue *q,DataType *e)//出队
{
	if(!queueEmpty(q)){
		*e = q->data[q->front];
		q->front = (q->front+1)%QUEUESIZE;
	}
}
int getQueue(SeqQueue *q,DataType *e)//获取队头元素
{
	if(!queueEmpty(q))
	*e = q->data[q->front];
}
bool queueFull(SeqQueue *q)//判断是否队满
{
	return q->front == (q->rear+1)%QUEUESIZE;
}
bool queueEmpty(SeqQueue *q)//判断队是否为空
{
	return q->front == q->rear;
}
void initQueue(SeqQueue *q)//栈的初始化 
{
	q->front = 0;
	q->rear = 0;
}
void clearQueue(SeqQueue *q)//清除队中所有的元素
{
	q->front = 0;
	q->rear = 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_42868863/article/details/88591592