前言
在两端操作的线性表,队列!特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。 进行插入操作的端称为队尾,进行删除操作的端称为队头。
一、重点
队列的前端front和后端rear 变量不能使用++或–操作否则会越界。应该使用%取余操作:q->rear = (q->rear + 1) % N;
q->front = (q->front + 1) % N;
二、使用步骤
1.创建自定义类型
代码如下(示例):
typedef int datatype;
#define N 128
typedef struct {
datatype data[N];
int front;
int rear;
}sequeue;
2.功能实现
代码如下(示例):
// @ create a queue....
sequeue *createQueue(){
sequeue *q;
if((q = (sequeue *)malloc(sizeof(sequeue))) == NULL){
printf("malloc failed!!");
return NULL;
}
memset(q->data, 0, sizeof(sizeof(q->data)));
q->front = q->rear = 0;
return q;
}
// @ enqueue
int enqueue(sequeue *q, MY_DATA data){
if(!q){
printf("your \'q\' is NULL!\n");
return -1;
}
q->data[q->rear] = data;
q->rear = (q->rear + 1) % N;
return 0;
}
// @ dequeue
MY_DATA dequeue(sequeue *q){
MY_DATA result;
result = q->data[q->front];
q->front = (q->front + 1) % N;
return result;
}
总结
注意存取之后的内存空间的变化,先进先出的原则!
队列是限制在两端进行插入操作和删除操作的线性表
允许进行存入操作的一端称为“队尾”
允许进行删除操作的一端称为“队头”
当线性表中没有元素时,称为“空队”
特点 :先进先出(FIFO)