#include<stdio.h>
#include"Queue.h"
int main()
{
int i, j;
void print(QElemType e);
SqQueue q;
InitQueue(&q);
printf("入队:1,2,3,4\n");
EnQueue(&q, 1);
EnQueue(&q, 2);
EnQueue(&q, 3);
EnQueue(&q, 4);
printf("遍历:\n");
QueueTraverse(q,print);
printf("\n队列长度: ");
i = QueueLength(q);
printf("%d\n", i);
printf("出队:");
DeQueue(&q, &j);
printf("%d ", j);
DeQueue(&q, &j);
printf("%d ", j);
DeQueue(&q, &j);
printf("%d ", j);
DeQueue(&q, &j);
printf("%d ", j);
}
void print(QElemType e) {
printf("%d ", e);
}
//Queue.h
#include <stdlib.h>
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
#define MAXQSIZE 100
typedef int QElemType;
typedef int Status;
typedef struct {
QElemType* base;
int front;
int rear;
}SqQueue;
Status InitQueue(SqQueue* Q); //初始化
Status QueueLength(SqQueue Q); //测长
Status EnQueue(SqQueue* Q, QElemType e); //入队
Status DeQueue(SqQueue* Q, QElemType* e); //出队
void DestroyQueue(SqQueue* Q); //删除
void QueueTraverse(SqQueue Q, void(Visit)(QElemType)); //遍历
Status InitQueue(SqQueue* Q) {
Q->base = (QElemType*)malloc(MAXQSIZE * sizeof(QElemType));
if (!Q->base) exit(OVERFLOW);
Q->front = Q->rear = 0;
return OK;
}
Status QueueLength(SqQueue Q) {
return (Q.rear - Q.front + MAXQSIZE) % MAXQSIZE;
}
Status EnQueue(SqQueue* Q, QElemType e) {
if ((Q->rear + 1) % MAXQSIZE == Q->front) return ERROR;
Q->base[Q->rear] = e;
Q->rear = (Q->rear + 1) % MAXQSIZE;
return OK;
}
Status DeQueue(SqQueue* Q, QElemType* e) {
if (Q->front == Q->rear) return ERROR;
*e = Q->base[Q->front];
Q->front = (Q->front + 1) % MAXQSIZE;
return OK;
}
void DestroyQueue(SqQueue* Q) {
if (Q->base) free(Q->base);
Q->base = NULL;
Q->rear = Q->front = 0;
}
void QueueTraverse(SqQueue Q,void(Visit)(QElemType)) {
int i;
i = Q.front;
while (i != Q.rear)
{
Visit(Q.base[i]);
i = (i + 1) % MAXQSIZE;
}
}