队列是先进先出的线性表。基本操作有push/pop/front/back/empty/size
有数组和链表两种表示方法。
1)链表的表示如下:
typedef struct queuenode {
int val;
qnode *next;
}qnode;
typedef struct queue {
qnode* front;
qnode* rear;
}queue;
bool push(queue q, int e) { //入队列
qnode *tmp = (qnode*)malloc(sizeof(qnode));
if(tmp == NULL) {
return false;
}
tmp->val = e;
tmp->next = NULL;
q->rear->next = tmp;
q->rear = tmp;
return true;
}
bool pop(queue q, int *e) { //出队列
if(q->front == q->rear) { //队列为空
return false;
}
e = q->front->val;
queue* tmp = q->front;
q->front = tmp->next;
free(tmp);
tmp = NULL;
return true;
}
int front(queue q) {
}
bool empty(queue q) {
return q->front == q->rear;
}
int size(queue q) {
if(empty(q)) {
return 0;
}
qnode* tmp = q->front;
int len = 0;
while(tmp != q->rear) {
len++;
tmp = tmp->next;
}
return len;
}