- 循环队列的基本操作
- 1.定义循环队列
- 2.初始化队列
- 3.出队
- 4.入队
- 5.判断队空
- 6.取队头元素
typedef struct
{
int data[MAXQSIZE];
int rear;
int front;
}SqQueue;
2.初始化队列
int InitQueue(SqQueue *q)
{
q->front=0;
q->rear=0;
return 1;
}
3.出队
int PushQueue(SqQueue *q,int x)
{
if((q->rear+1)%MAXQSIZE==q->front)
return 0;
q->data[q->rear]=x;
q->rear=(q->rear+1)%MAXQSIZE;
return 1;
}
4.入队
int PopQueue(SqQueue *q,int *x)
{
if(q->rear==q->front) return 0;
*x=q->data[q->front];
q->front=(q->front+1)%MAXQSIZE;
return 1;
}
5.判断队空
int EmptyQueue(SqQueue *q)
{
if(q->front==q->rear) return 1;
return 0;
}
6.取队头元素
int Gethead(SqQueue *q)
{
if(EmptyQueue(q)) return 0;
return q->data[q->front];
}
完整程序实现
#include#include #define MAXQSIZE 100 typedef struct { int data[MAXQSIZE]; int rear; int front; }SqQueue; int InitQueue(SqQueue *q) { q->front=0; q->rear=0; return 1; } int PushQueue(SqQueue *q,int x) { if((q->rear+1)%MAXQSIZE==q->front) return 0; q->data[q->rear]=x; q->rear=(q->rear+1)%MAXQSIZE; return 1; } int PopQueue(SqQueue *q,int *x) { if(q->rear==q->front) return 0; *x=q->data[q->front]; q->front=(q->front+1)%MAXQSIZE; return 1; } int EmptyQueue(SqQueue *q) { if(q->front==q->rear) return 1; return 0; } int Gethead(SqQueue *q) { if(EmptyQueue(q)) return 0; return q->data[q->front]; } int main() { int x; SqQueue q; InitQueue(&q); while(~scanf("%d",&x)&&x) { PushQueue(&q,x); } while(!EmptyQueue(&q)) { PopQueue(&q,&x); printf("%d ",x); } return 0; }
输入
1 2 3 4 5 6 7 8 9 0
输出
1 2 3 4 5 6 7 8 9
国庆节又懒了



