c语言实现循环队列的基本功能

#define maxsize 6
typedef struct{
int data[maxsize];
int rear,front;
}Quene,*pQueue;

注意:(1).front表示队头元素的前一个元素在数组中的位置,rear表示队尾元素在数组中的位置

初始化:

void init(pQueue q){
	q->front=0;
	q->rear=0;
}

注意:(1).初始化front和rear都相等为0

进队:

void add(pQueue q,int x){
	if((q->rear+1)%maxsize==q->front){
	printf("overflow");
	return;
	}else{
		q->rear=(q->rear+1)%maxsize;
		q->data[q->rear]=x;
		printf("添加成功\n");
	}
}

注意:(1).队列满和队列空都是rear=front,怎么解决呢?可以采取少用一个元素的方法。比如可以存放6个元素的数组,到5个就默认满了,所以当(q->reaar+1)%maxsize==q->front 就表示满了,就不能再加入元素了(对maxsize取余,比如6取余6就是0,就代表绕一圈后的数组索引)

c语言实现循环队列的基本功能_第1张图片

出队:

void dl(pQueue q){
	if(q->front==q->rear){
	printf("null");
	return;
	}else{
	q->front=(q->front+1)%maxsize;
	printf("删除的元素是:%d\n",q->data[q->front]);
	}
}

注意:(1).一开始无元素,front和rear都相等等于0,则为null

(2).当把每一个元素删除完,front不断+1,当与rear相等时,就会把rear所对应的元素删除,此时队列也为空了

销毁:

void destroyQueue(pQueue q){
	free(q);
	q=NULL;
}

注意:(1)pQueue q=(pQueue)malloc(sizeof(Quene));为队列指针申请了一块内存空间,销毁时也要free掉,同时指向null,防止野指针

遍历队列:

void traverseQuene(pQueue q){
	int i=q->front;
	while(i!=q->rear){
		i=(i+1)%maxsize;
		printf("%d ",q->data[i]);
	}
	printf("\n");
}

完整代码如下:

#include
#include
#include
#define maxsize 6
typedef struct{
int data[maxsize];
int rear,front;
}Quene,*pQueue;

void init(pQueue q){
	q->front=0;
	q->rear=0;
}

void destroyQueue(pQueue q){
	free(q);
	q=NULL;
}
void add(pQueue q,int x){
	if((q->rear+1)%maxsize==q->front){
	printf("overflow");
	return;
	}else{
		q->rear=(q->rear+1)%maxsize;
		q->data[q->rear]=x;
		printf("添加成功\n");
	}
}

void dl(pQueue q){
	if(q->front==q->rear){
	printf("null");
	return;
	}else{
	q->front=(q->front+1)%maxsize;
	printf("删除的元素是:%d\n",q->data[q->front]);
	}
}

void traverseQuene(pQueue q){
	int i=q->front;
	while(i!=q->rear){
		i=(i+1)%maxsize;
		printf("%d ",q->data[i]);
	}
	printf("\n");
}
int main(){
pQueue q=(pQueue)malloc(sizeof(Quene));
	init(q);
	add(q,1);
	add(q,2);
	add(q,3);
	traverseQuene(q);
	system("pause");
	dl(q);
	traverseQuene(q);
	system("pause");
	dl(q);
	traverseQuene(q);
	system("pause");
}

 

你可能感兴趣的:(c语言实现循环队列的基本功能)