顺序队列

#include <stdlib.h>
#include <stdbool.h>
#include <stdio.h>
#define MAXSIZE 20

typedef struct {
	int date;
} Item;

typedef struct {
	Item item[MAXSIZE];
	int front; //头指针 
	int rear;	//尾指针 
} queue;

//初始化
bool initQueue(queue *q);

//入队 
void EnQueue(queue *q, Item *e);

//遍历
void QueueTraverse(queue *q);

//出队
void DeQueue(queue *q, Item *e);

//清空
bool clearQueue(queue *q); 

//队列长度
int QueueLength(queue *q); 

bool initQueue(queue *q){
	q->front = 0;
	q->rear = 0;
	return true; 
}

void EnQueue(queue *q, Item *e){
	// 队列满的判断
	if( (q->rear + 1)%MAXSIZE == q->front){
		fprintf(stderr, "入队错误,队列已满.");
		exit(EXIT_FAILURE);
	}
	//将元素e赋值给队尾
	q->item[q->rear] = *e;
	//rear指针向后移一位置,若到最后则转到数组头部
	q->rear = (q->rear+1)%MAXSIZE;
}

void QueueTraverse(queue *q){
	int i = q->front;
	while( (i+q->front) != q->rear ){
		printf("%d", q->item[i].date );
		i = (i+1)%MAXSIZE;
	}
}

void DeQueue(queue *q, Item	*e){
	//队列空的判断
	if(q->front == q->rear){
		fprintf(stderr ,"出队错误,队列为空");
		exit(EXIT_FAILURE); 
	}
	//将队头元素赋值给e
	*e = q->item[q->front];
	//front指针向后移一位置,若到最后则转到数组头部
	q->front = (q->front+1)%MAXSIZE ;	
}

bool clearQueue(queue *q){
	q->front = q->rear = 0;
	return true;
}

int QueueLength(queue *q){
	return (q->rear-q->front+MAXSIZE)%MAXSIZE;
}

int main(void){
	
	queue q;
	
	Item e = {
		e.date = 1
	};
	
	Item e1 = {
		e1.date = 2
	};
	
	Item e2 = {
		e2.date = 3
	};
	
	Item e3 = {
		e3.date = 4
	};
	initQueue(&q);
	
	EnQueue(&q,&e);
	EnQueue(&q,&e1);
	EnQueue(&q,&e2);
	EnQueue(&q,&e3);
	
	QueueTraverse(&q);
	
	printf("\n");
	
	Item e4;
	DeQueue(&q, &e4);
	printf("出队元素:%d\n",e4.date);
	
	printf("队列的长度:%d",QueueLength(&q));
	
	return 0;
}

  

posted @ 2013-03-21 16:21  chapterlin  阅读(141)  评论(0)    收藏  举报