构建思路 详细代码看后面
#define MAXSIZE 9
int a[MAXSIZE];
//入队
a[rear] = 32; (入队)
rear=(rear+1)%MAXSIZE;//之所以不是rear++,是为了使代码更简洁。
a[rear] = 15;
rear++;
a[rear] = 75;
rear++;

//获取队头元素
 return a[front];

//rear: 指向队尾元素的后一个位置

出队:
front++;

//判断队列是否为空:
if(front==rear)
      printf("NULL");

//判断队满:



更正后:
front = (front+1)%MAXSIZE;

//用顺序表创建队列数据结构时,应当创建为循环队列,否则会产生队列的假满。

判断队列空?
front==rear;

判断队满?
(1) int size;
if(size==MAXSIZE)
队列满;
(2)空着队列中的一个位置不允许存放数据。
if((rear+1)%MAXSIZE==front)
队列满;




循环队列完整代码:
#include<stdio.h>
#include<stdlib.h>
#include<stdboo.h>

#define MAXSIZE 10

//typedef int TypeName;
typedef struct _queue
{
    TypeName *data;
     int front;
     int rear;
}queue;

queue *createQueue();

void enqueue(queue *pQ, TypeName x);
void dequeue(queue *pQ);
TypeName front(queue *pQ);
bool isEmpty(queue *pQ);
boo isFull(queue *pQ);
void destroyQueue(queue *pQ);

int main(void)
{
    queue *pQueue = createQueue();
    enqueue(pQ,10);
    enqueue(pQ, 20);
    enqueue (pQ ,30);
    printf("%d\n", front(pQueue));
    dequeue(pQueue);    
    printf("%d\n", front(pQueue));
    destroy(pQueue);
    return 0;
}

queue *createQueue()
{
    queue *q = (queue*)malloc(sizeof(queue));
    q->data = (TypeName*)malloc(MAXSIZE*sizeof(TypeName));
    q->front = q->rear = 0;
    return q;
}

void enqueue(queue *pQ, TypeName x)
{
    pQ->data[pQ->rear] = x;
    pQ->rear = (pQ->rear+1) % MAXSIZE;
}
	    
void dequeue(queue *pQ)
{
    pQ->front = (pQ->front+1) % MAXSIZE;
}
TypeName front(queue *pQ)
{
    return pQ->data[pQ->front];
}
bool isEmpty(queue *pQ)
{
    return pQ->front ==pQ->rear;
}
bool isFull(queue *pQ)
{
    return (pQ->rear+1) %MAXSIZE==front;
}
destroy queue(queue *pQ)
{
    free(pQ->data);
    free(pQ);
}