struct list{
int data;
struct list *next;
struct list *pre;
};
typedef struct {
int size;
struct list head;
struct list *front;
struct list *rear;
}queue;
queue* createQueue(void){
queue *q;
q = malloc(sizeof(queue));
if(!q) {
return NULL;
}
(void)memset(q, 0, sizeof(queue));
q->head.pre = (struct list *)&q->head;
q->head.next = (struct list *)&q->head;
q->front = q->rear =(struct list *)&q->head;
return q;
}
void enQueue(queue *q, int val) {
struct list *l;
l = malloc(sizeof(struct list));
if(!l) {
return;
}
l->data = val;
l->next = q->head.next;
q->head.next->pre = l;
q->head.next = l;
l->pre = &q->head;
q->rear = l;
if(l->next == (struct list *)&q->head) {
q->front = l;
}
q->size++;
}
int deQueue(queue *q) {
struct list *f;
int k;
f = q->front;
f->next->pre = f->pre;
f->pre->next = f->next;
f->next = f->pre = f;
q->size--;
k = f->data;
q->front = q->head.pre;
free(f);
return k;
}
bool QueuEmpty(queue *q) {
return q->size > 0 ? false:true;
}
void freeQueue(queue *q){
struct list *f;
if(QueuEmpty(q)) {
free(q);
}
else {
f = q->head.next;
while(f != (struct list *)&q->head) {
free(f);
f = q->head.next;
}
}
}
04-20
1229
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
08-14