链表
#include<stdio.h>
#include<stdlib.h>
typedef struct Node{
int data;
struct Node *next;
}Node;
typedef struct Queue{
Node *f,*r;
}Q;
void init(Q *q){
q->f = q->r = (Node *)malloc(sizeof(Node));
q->f->next = NULL;
}
void enQueue(Q *q,int x){
Node *p = (Node*)malloc(sizeof(Node));
p->next = NULL;
p->data = x;
q->r->next = p;
q->r = P;
}
void delQueue(Q *q,int *x){
if(q->f != q->r){
Node *p = q->f->next;
*x = p->data;
q->f->next = p->next;
free(p);
}
}
void travel(Q q){
Node *p;
for(p = p=q.f->next;p!=NULL;p = p->next){
printf("%3d\n",p->data);
}
}
int main(void){
Q myq;
int t;
init(&myq);
enQueue(&myq,11);
enQueue(&myq,22);
enQueue(&myq,33);
enQueue(&myq,44);
travel(myq);
delQueue(&myq,&t);
printf("\n deleted the element %d",t);
return 0;
}
数组(循环队列)
#include <stdio.h>
#include <stdlib.h>
typedef struct Queue
{
int arr[10];
int front, rear;
}Q;
void init(Q* a_q)
{
a_q->front = a_q->rear = 0;
}
void enqueue(Q* a_q, int x)
{
if ((a_q->rear + 1) % 10 != a_q->front)
{
printf("%d\n",a_q->rear);
a_q->arr[a_q->rear] = x;
a_q->rear = (a_q->rear + 1) % 10;
}
}
void delqueue(Q*a_q, int *x)
{
if (a_q->front != a_q->rear)
{
*x = a_q->arr[a_q->front];
a_q->front = (a_q->front + 1) % 10;
}
}
void travel(Q* aq)
{
int i;
for (i = aq->front; i != aq->rear; i=(i+1)%10)
{
printf("%5d\t", aq->arr[i]);
}
}
int main(void) {
Q myq;
int t;
init(&myq);
enqueue(&myq, 1);
enqueue(&myq, 2);
enqueue(&myq, 33);
enqueue(&myq, 44);
enqueue(&myq, 55);
enqueue(&myq, 6);
enqueue(&myq, 7);
enqueue(&myq, 8);
enqueue(&myq, 9);
travel(&myq);
delqueue(&myq, &t);
enqueue(&myq, 10);
printf("out%d\n",t);
travel(&myq);
return 0;
}