队列
数据结构三要素–逻辑结构、数据的运算、存储结构(物理结构)
队列是只允许在一端进行插入,在另一端删除的线性表。
先进先出 FIFO
队头 队尾 空队列
静态数组存放数据元素
initqueue(&Q):初始化队列 ,创
destroyqueue(&Q):销毁队列
enqueue(&Q,x):入队,在队尾插入
dequeue(&Q,&x):出队,在队头删除
gethead(Q,&x):读队头元素,若队列Q非空,则将队头元素赋值给x
queueempty(Q):判空
顺序存储队列
#define maxsize 10
typedef struct{
elemtype data[maxsize];
int front,rear;//队头指针,队尾指针
}sqqueue;
初始化队列
void initqueue(sqqueue &Q){
Q.rear=Q.front=0;
}
判空操作
bool queueempty(sqqueue Q){
if(Q.rear==Q.front)
return true;
else
return false;
}
入队(从队尾插入)
bool enqueue(squeue &q,elemtype x){
Q.data[Q.rear]=x;
Q.rear=Q.rear+1;
return true;
}
循环队列(环形队列)
Q.data[Q.rear]=x;
Q.rear=(Q.rear+1)%maxsize; 加1取模
队列已满条件:(Q.rear=(Q.rear+1)%maxsize==Q.front;
队列元素个数:(rear+maxsize-front)%maxsize
判空:(Q.rear+1)%maxsize==Q.front;
出队
bool dequeue(sqqueue &Q,elemtype &x){
x=Q.data[Q.front];
Q.front=Q.front+1;
return true;
}
获得队头指针元素的值
bool gethead(sqqueue Q,elemtype &x){
if(Q.rear==Q.front)
return false;
x=Q.data[Q.front];
return true;
}