构建思路 详细代码看后面
#define MAXSIZE 9
int a[MAXSIZE];
a[rear] = 32; (入队)
rear=(rear+1)%MAXSIZE;
a[rear] = 15;
rear++;
a[rear] = 75;
rear++;
return a[front];
出队:
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 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);
}