程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 靜態數組實現循環隊列 c語言

靜態數組實現循環隊列 c語言

編輯:關於C語言

靜態數組實現循環隊列 c語言


#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;
	}
}

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved