当前位置: 移动技术网 > IT编程>开发语言>C/C++ > 静态数组实现循环队列 c语言

静态数组实现循环队列 c语言

2018年04月02日  | 移动技术网IT编程  | 我要评论
#include #include #define Data_Type int #define Queue_Len 5 //判断队满有两种方式,一种是加以个标记,比如说
#include
#include
#define Data_Type int
#define Queue_Len 5
//判断队满有两种方式,一种是加以个标记,比如说size。 
//另一种是浪费一块空间,当占到N-1时,就算满。 
typedef struct Queue{
	Data_Type data[Queue_Len];
	int front;//队头元素的前一个元素 
	int rear;// 队尾元素 
	//int size; 记录队列的大小 
}QUEUE,* QQUEUE;

void create(QQUEUE); 
bool isFull(QQUEUE);
bool isEmpty(QQUEUE);
bool add(QQUEUE,Data_Type);
Data_Type out(QQUEUE);
void traverse(QQUEUE);

int main(void){
	QUEUE queue ;
	create(&queue);
	add(&queue,1);
	add(&queue,2);
	add(&queue,3);
	add(&queue,4);
	out(&queue);
	add(&queue,5);
	out(&queue);
	add(&queue,6);
	out(&queue);
	add(&queue,7);
	traverse(&queue);
	
}

bool isFull(QQUEUE qQuere){
	if((qQuere->rear+1)%Queue_Len==qQuere->front){
		return true;
	} else{
		return false;
	}
}

bool isEmpty(QQUEUE qQueue){
	if(qQueue->front==qQueue->rear){
		return true;
	}else{
		return false;
	}
}

void create(QQUEUE qQueue){
	qQueue->front=qQueue->rear=0;
	return;
}

void traverse(QQUEUE qQueue){
	int i=qQueue->front;	
	while(i!=qQueue->rear){
		//这里比较绕,为什么输出时要取余?
		//首先front表示的是队首元素的前一个元素,肯定是不能输出的。
		// 如果给他+1,则可以正常输出队首。
		//但队尾会出问题,如果下标是队尾下标,+1则会超出数组长度
		//所以再取余, 则输出正常 
		printf(%d
,qQueue->data[(i+1)%Queue_Len]);
		i++;
		i=i%Queue_Len;	
		
		
		//换一种好理解的
		//先找到下一个合法元素,找到再输出 
		//所以直接输出i 就可以了,因为i已经是要找的下一个元素。
		 
		//i++;
		//i=i%Queue_Len;	
		//printf(%d
,qQueue->data[i]);
	}
}

bool add(QQUEUE qQueue,Data_Type val){
	if(isFull(qQueue)){
		return false;
	}else{
		qQueue->rear = (qQueue->rear+1)%Queue_Len;
		qQueue->data[qQueue->rear]=val;
		return true; 
	}
}
Data_Type out(QQUEUE qQueue){
	if(isEmpty(qQueue)){
		exit(-1);
	}else{
		
		Data_Type val = qQueue->data[qQueue->front+1];
		qQueue->front = (qQueue->front+1)%Queue_Len; 
		return val;
	}
}

 

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网