#include <stdio.h>
#include <stdlib.h>
struct QueueRecord
{
int capacity;
int front;
int rear;
int size;
char * array;
};
struct QueueRecord * createqueue(int size)
{
char * p;
struct QueueRecord *queue;
p=(char *)malloc(size);
queue=(struct QueueRecord *)malloc(sizeof(struct QueueRecord));
queue->capacity=size;
queue->size=0;
queue->array=p;
queue->front=0;
queue->rear=0;
}
int isfull(struct QueueRecord *q)
{
return q->size==q->capacity;
}
int isempty(struct QueueRecord *q)
{
return q->size==0;
}
int succ (int value,struct QueueRecord *q)
{
value++;
if(value==q->capacity){
value=0;
}
return value;
}
void enqueue(char x,struct QueueRecord * q)
{
if(isfull(q)){
printf("full\n");
return;
}
q->size++;
q->array[q->rear]=x;
q->rear=succ(q->rear,q);
}
int dequeue(struct QueueRecord *q)
{
int x;
if(isempty(q)){
printf("empty\n");
return -1;
}else{
q->size--;
x=q->array[q->front];
q->front=succ(q->front,q);
return x;
}
}
void queue_view(struct QueueRecord *q)
{
int i;
int tmp;
printf("front=%d\n",q->front);
printf("rear=%d\n",q->rear);
printf("size=%d\n",q->size);
for(i=0;i<q->size;i++){
tmp=q->front+i;
if(tmp >= q->capacity){
tmp=tmp-q->capacity;
}
printf("no[%d]=%d\n",tmp,q->array[tmp]);
}
}
int main()
{
int i;
struct QueueRecord *queue;
queue=createqueue(5);
for(i=0;i<5;i++)
{
enqueue(i,queue);
}
queue_view(queue);
for(i=0;i<2;i++){
printf("de[%d]=%d\n",i,dequeue(queue));
}
enqueue(5,queue);
enqueue(6,queue);
printf("******************\n");
queue_view(queue);
}
循环队列(c语言)
最新推荐文章于 2022-05-16 20:36:06 发布